Beispiel #1
0
        /// <summary>
        /// CreateMaterialPullingOrderInfo
        /// </summary>
        /// <param name="planPartBoxInfo"></param>
        /// <param name="orderCode"></param>
        /// <param name="currentWindowTime"></param>
        /// <param name="inspectFlag"></param>
        /// <returns></returns>
        private MaterialPullingOrderInfo CreateMaterialPullingOrderInfo(PlanPartBoxInfo planPartBoxInfo, string orderCode, DateTime currentWindowTime, bool inspectFlag)
        {
            MaterialPullingOrderInfo materialPullingOrderInfo = new MaterialPullingOrderInfo();

            materialPullingOrderInfo.OrderNo          = orderCode;
            materialPullingOrderInfo.PartBoxCode      = planPartBoxInfo.PartBoxCode;  ///零件类2
            materialPullingOrderInfo.PartBoxName      = planPartBoxInfo.PartBoxName;  ///零件类名称3
            materialPullingOrderInfo.Plant            = planPartBoxInfo.Plant;        ///工厂4
            materialPullingOrderInfo.Workshop         = planPartBoxInfo.Workshop;     ///车间5
            materialPullingOrderInfo.AssemblyLine     = planPartBoxInfo.AssemblyLine; ///流水线6
            materialPullingOrderInfo.SupplierNum      = planPartBoxInfo.SupplierNum;  ///供应商7
            materialPullingOrderInfo.SupplierName     = planPartBoxInfo.SupplierName;
            materialPullingOrderInfo.SourceZoneNo     = planPartBoxInfo.SourceZoneNo; ///来源存储区8
            materialPullingOrderInfo.SourceWmNo       = planPartBoxInfo.SourceWmNo;   ///来源仓库9
            materialPullingOrderInfo.TargetZoneNo     = planPartBoxInfo.TargetZoneNo; ///目标存储区10
            materialPullingOrderInfo.TargetWmNo       = planPartBoxInfo.TargetWmNo;   ///目标仓库11
            materialPullingOrderInfo.TargetDock       = planPartBoxInfo.Dock;         ///道口12
            materialPullingOrderInfo.PlanDeliveryTime = currentWindowTime;            ///预计到厂时间14 = 窗口时间
            materialPullingOrderInfo.PlanShippingTime = currentWindowTime.AddMinutes((-1) * planPartBoxInfo.DeliveryTime.GetValueOrDefault());
            materialPullingOrderInfo.PublishTime      = DateTime.Now;
            materialPullingOrderInfo.OrderType        = (int)PullOrderTypeConstants.Pulling;
            materialPullingOrderInfo.InspectFlag      = inspectFlag;
            materialPullingOrderInfo.PullMode         = (int)PullModeConstants.Plan;
            return(materialPullingOrderInfo);
        }
Beispiel #2
0
 /// <summary>
 /// PlanPartBoxInfo -> PlanPullOrderInfo
 /// </summary>
 /// <param name="planPartBoxInfo"></param>
 /// <param name="planPullOrderInfo"></param>
 public static void GetPlanPullOrderInfo(PlanPartBoxInfo planPartBoxInfo, ref PlanPullOrderInfo planPullOrderInfo)
 {
     if (planPartBoxInfo == null)
     {
         return;
     }
     ///WORKSHOP
     planPullOrderInfo.Workshop = planPartBoxInfo.Workshop;
     ///ASSEMBLY_LINE
     planPullOrderInfo.AssemblyLine = planPartBoxInfo.AssemblyLine;
     ///EXPECTED_ARRIVAL_TIME
     if (planPullOrderInfo.SuggestDeliveryTime != null)
     {
         planPullOrderInfo.ExpectedArrivalTime = planPullOrderInfo.SuggestDeliveryTime.GetValueOrDefault().AddMinutes(
             planPartBoxInfo.PickUpTime.GetValueOrDefault() + planPartBoxInfo.DeliveryTime.GetValueOrDefault());
     }
 }
Beispiel #3
0
        /// <summary>
        /// 获取入库单转紧急计划拉动单执行语句
        /// </summary>
        /// <param name="receiveInfo"></param>
        /// <param name="receiveDetailInfos"></param>
        /// <param name="loginUser"></param>
        /// <returns></returns>
        public static string GetEmergencyPullSql(ReceiveInfo receiveInfo, List <ReceiveDetailInfo> receiveDetailInfos, string loginUser)
        {
            StringBuilder @string = new StringBuilder();
            ///创建计划拉动单
            PlanPullOrderInfo planPullOrderInfo = CreatePlanPullOrderInfo(loginUser);

            ///以入库单信息填充计划拉动单
            GetPlanPullOrderInfo(receiveInfo, ref planPullOrderInfo);
            ///PlanPartBoxInfo -> PlanPullOrderInfo
            //PlanPartBoxInfo planPartBoxInfo = new PlanPartBoxDAL().GetInfo(receiveInfo.PartBoxCode);
            PlanPartBoxInfo planPartBoxInfo = new  PlanPartBoxInfo();

            GetPlanPullOrderInfo(planPartBoxInfo, ref planPullOrderInfo);
            ///
            int     sumPackageQty = 0;
            decimal sumPartQty    = 0;

            foreach (var receiveDetailInfo in receiveDetailInfos)
            {
                if (receiveDetailInfo.RequiredQty.GetValueOrDefault() <= receiveDetailInfo.ActualQty.GetValueOrDefault())
                {
                    continue;
                }
                ///创建计划拉动单明细
                PlanPullOrderDetailInfo planPullOrderDetailInfo = PlanPullOrderDetailBLL.CreatePlanPullOrderDetailInfo(loginUser);
                ///ReceiveDetailInfo -> PlanPullOrderDetailInfo
                PlanPullOrderDetailBLL.GetPlanPullOrderDetailInfo(receiveDetailInfo, ref planPullOrderDetailInfo);
                ///PlanPullOrderInfo -> PlanPullOrderDetailInfo
                PlanPullOrderDetailBLL.GetPlanPullOrderDetailInfo(planPullOrderInfo, ref planPullOrderDetailInfo);
                ///
                @string.AppendLine(PlanPullOrderDetailDAL.GetInsertSql(planPullOrderDetailInfo));
                sumPackageQty += planPullOrderDetailInfo.RequiredPackageQty.GetValueOrDefault();
                sumPartQty    += planPullOrderDetailInfo.RequiredPartQty.GetValueOrDefault();
            }
            if (@string.Length == 0)
            {
                return(string.Empty);
            }
            ///SUM_PACKAGE_QTY
            planPullOrderInfo.SumPackageQty = sumPackageQty;
            ///SUM_PART_QTY
            planPullOrderInfo.SumPartQty = sumPartQty;
            @string.AppendLine(PlanPullOrderDAL.GetInsertSql(planPullOrderInfo));
            return(@string.ToString());
        }
Beispiel #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public long InsertInfo(PlanPartBoxInfo info)
        {
            ///零件类代码①、零件类名称②为必填项,各自校验在对应表字段内容不能重复
            int cnt = dal.GetCounts("[PART_BOX_CODE] = N'" + info.PartBoxCode + "'");

            if (cnt > 0)
            {
                throw new Exception("MC:0x00000302");///零件类代码重复
            }
            cnt = dal.GetCounts("[PART_BOX_NAME] = N'" + info.PartBoxName + "'");
            if (cnt > 0)
            {
                throw new Exception("MC:0x00000303");///零件类名称重复
            }
            ///来源存储区⑧与目标存储区⑩不能为同一存储区
            if (info.SourceZoneNo == info.TargetZoneNo)
            {
                throw new Exception("MC:0x00000402");///来源存储区与目标存储区不可一致,请重新选取
            }
            return(dal.Add(info));
        }
Beispiel #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        /// <param name="loginUser"></param>
        /// <returns></returns>
        public bool LogicDeleteInfo(long id, string loginUser)
        {
            PlanPartBoxInfo info = dal.GetInfo(id);

            if (info == null)
            {
                throw new Exception("MC:0x00000084");///数据错误
            }
            ///零件类没有对应的物料拉动信息可用数据
            int cnt = new MaintainInhouseLogisticStandardDAL().GetCounts("[INHOUSE_PART_CLASS] = N'" + info.PartBoxCode + "'");

            if (cnt > 0)
            {
                throw new Exception("MC:0x00000403");///该零件类下还有相关物料,不可删除
            }
            ///零件类必须已创建状态
            if (info.Status != (int)BasicDataStatusConstants.Created)
            {
                throw new Exception("MC:0x00000722");///零件类必须已创建状态
            }
            return(dal.LogicDelete(id, loginUser) > 0 ? true : false);
        }
Beispiel #6
0
 /// <summary>
 /// PlanPartBoxInfo -> PlanPullOrderInfo
 /// </summary>
 /// <param name="planPartBoxInfo"></param>
 /// <param name="planPullOrderInfo"></param>
 public static void GetPlanPullOrder(PlanPartBoxInfo planPartBoxInfo, ref PlanPullOrderInfo planPullOrderInfo)
 {
     if (planPartBoxInfo == null)
     {
         return;
     }
     ///PartBoxCode
     planPullOrderInfo.PartBoxCode = planPartBoxInfo.PartBoxCode;
     ///PartBoxName
     planPullOrderInfo.PartBoxName = planPartBoxInfo.PartBoxName;
     ///Plant
     planPullOrderInfo.Plant = planPartBoxInfo.Plant;
     ///Workshop
     planPullOrderInfo.Workshop = planPartBoxInfo.Workshop;
     ///AssemblyLine
     planPullOrderInfo.AssemblyLine = planPartBoxInfo.AssemblyLine;
     ///SupplierNum
     planPullOrderInfo.SupplierNum = planPartBoxInfo.SupplierNum;
     ///SourceWmNo
     planPullOrderInfo.SourceWmNo = planPartBoxInfo.SourceWmNo;
     ///TargetWmNo
     planPullOrderInfo.TargetWmNo = planPartBoxInfo.TargetWmNo;
     ///TargetZoneNo
     planPullOrderInfo.TargetZoneNo = planPartBoxInfo.TargetZoneNo;
     ///Dock
     planPullOrderInfo.Dock = planPartBoxInfo.Dock;
     ///ExpectedArrivalTime
     if (planPullOrderInfo.SuggestDeliveryTime != null)
     {
         planPullOrderInfo.ExpectedArrivalTime = planPullOrderInfo.SuggestDeliveryTime.GetValueOrDefault().AddMinutes(
             planPartBoxInfo.PickUpTime.GetValueOrDefault() + planPartBoxInfo.DeliveryTime.GetValueOrDefault());
     }
     ///WindowTimes? TODO:紧急拉动怎么处理
     planPullOrderInfo.WindowTimes = null;
     ///TimeZone
     planPullOrderInfo.TimeZone = null;
     ///InspectionFlag
     planPullOrderInfo.InspectionFlag = null;
 }
        /// <summary>
        /// 对于MPM-036逻辑进行函数封装
        /// </summary>
        /// <param name="emergencyPullingCartInfos"></param>
        /// <param name="loginUser"></param>
        public static string Handler(List <EmergencyPullingCartInfo> emergencyPullingCartInfos, string loginUser)
        {
            ///执行语句
            StringBuilder @string = new StringBuilder();
            ///获取系统配置是否允许过量提前拉动
            string allowedFlag = new ConfigDAL().GetValueByCode("ENABLE_EXCEED_COUNTER_QTY_WHEN_ADVANCE_PULL");

            ///接收紧急拉动购物车对象集合进行处理
            if (emergencyPullingCartInfos.Count == 0)
            {
                throw new Exception("MC:0x00000084");///数据错误
            }
            ///对应的物料拉动信息
            List <MaintainInhouseLogisticStandardInfo> maintainInhouseLogisticStandardInfos = new MaintainInhouseLogisticStandardBLL().GetList("" +
                                                                                                                                               " and [STATUS] =" + (int)BasicDataStatusConstants.Enable + "" +
                                                                                                                                               " and [FID] in ('" + string.Join("','", emergencyPullingCartInfos.Select(d => d.LogisticStandardFid).ToArray()) + "')", string.Empty);

            if (maintainInhouseLogisticStandardInfos.Count == 0)
            {
                throw new Exception("MC:0x00000213");///物料拉动信息数据错误
            }
            ///首先需要将其按照拉动方式、零件类进行分组,每个分组产生一张紧急拉动单
            var cartGroups = emergencyPullingCartInfos.GroupBy(d => new { d.PullMode, d.PartBoxCode }).ToList();

            #region 手工拉动 PLAN
            var planCartGroups = cartGroups.Where(d => d.Key.PullMode == (int)PullModeConstants.Plan).ToList();
            ///计划拉动零件类
            List <PlanPartBoxInfo> planPartBoxInfos = new PlanPartBoxBLL().GetList("" +
                                                                                   " and [STATUS] = " + (int)BasicDataStatusConstants.Enable + "" +
                                                                                   " and [PART_BOX_CODE] in ('" + string.Join("','", planCartGroups.Select(d => d.Key.PartBoxCode).ToArray()) + "')", string.Empty);
            foreach (var planCartGroup in planCartGroups)
            {
                ///从参数集合从提取对应的紧急拉动购物车集合
                List <EmergencyPullingCartInfo> pullingCartInfos = emergencyPullingCartInfos.Where(d =>
                                                                                                   d.PullMode == planCartGroup.Key.PullMode && d.PartBoxCode == planCartGroup.Key.PartBoxCode).ToList();
                if (pullingCartInfos.Count == 0)
                {
                    continue;
                }
                ///计划零件类
                PlanPartBoxInfo planPartBoxInfo = planPartBoxInfos.FirstOrDefault(d => d.PartBoxCode == planCartGroup.Key.PartBoxCode);
                if (planPartBoxInfo == null)
                {
                    continue;
                }
                ///计划拉动-->仓储衔接主表
                MaterialPullingOrderInfo materialPulling = MaterialPullingCommonBLL.CreateMaterialPullingOrderInfo();
                ///计划拉动单主表
                PlanPullOrderInfo planPullOrderInfo = PlanPullOrderBLL.CreatePlanPullOrder(loginUser);
                ///OrderType 拉动单类型
                planPullOrderInfo.OrderType = (int)PullOrderTypeConstants.Emergency;
                ///PlanPartBoxInfo-->PlanPullOrderInfo
                PlanPullOrderBLL.GetPlanPullOrder(planPartBoxInfo, ref planPullOrderInfo);
                ///计划拉动单主表sql
                @string.AppendLine(PlanPullOrderDAL.GetInsertSql(planPullOrderInfo));
                ///PlanPullOrderInfo -> MaterialPullingOrderInfo
                MaterialPullingCommonBLL.GetMaterialPlanPullingOrderInfo(planPullOrderInfo, ref materialPulling);
                foreach (EmergencyPullingCartInfo planCartInfo in pullingCartInfos)
                {
                    ///物料拉动信息
                    MaintainInhouseLogisticStandardInfo maintainInhouseLogisticStandardInfo = maintainInhouseLogisticStandardInfos.FirstOrDefault(d => d.Fid == planCartInfo.LogisticStandardFid);
                    if (maintainInhouseLogisticStandardInfo == null)
                    {
                        continue;
                    }
                    ///物料包装数量在此需要根据单包装数量以及物料需求数量进行向上圆整计算
                    ///REQUIRED_BOX_QTY:物料包装数量  PULL_PACKAGE_QTY:单包装数量 REQUIRED_PART_QTY:物料需求数量
                    if (planCartInfo.PullPackageQty.GetValueOrDefault() == 0)
                    {
                        continue;                                                      ///O不能做被除数
                    }
                    planCartInfo.RequiredBoxQty = Convert.ToInt32(Math.Ceiling(planCartInfo.RequiredPartQty.GetValueOrDefault() / planCartInfo.PullPackageQty.GetValueOrDefault()));
                    ///仓储衔接明细表
                    MaterialPullingOrderDetailInfo detailInfo = MaterialPullingCommonBLL.CreateMaterialPullingOrderDetailInfo();
                    ///计划拉动单明细
                    PlanPullOrderDetailInfo planPullOrderDetailInfo = PlanPullOrderDetailBLL.CreatePlanPullOrderDetail(loginUser);
                    ///MaintainInhouseLogisticStandardInfo -> PlanPullOrderDetailInfo
                    PlanPullOrderDetailBLL.GetPlanPullOrderDetail(maintainInhouseLogisticStandardInfo, ref planPullOrderDetailInfo);
                    ///TwdPullOrderInfo -> TwdPullOrderDetailInfo
                    PlanPullOrderDetailBLL.GetPlanPullOrderDetailInfo(planPullOrderInfo, ref planPullOrderDetailInfo);
                    ///RequiredPackageQty
                    planPullOrderDetailInfo.RequiredPackageQty = planCartInfo.RequiredBoxQty.GetValueOrDefault();
                    ///RequiredPartQty
                    planPullOrderDetailInfo.RequiredPartQty = planCartInfo.RequiredPartQty.GetValueOrDefault();
                    ///计划拉动明细sql
                    @string.AppendLine(PlanPullOrderDetailDAL.GetInsertSql(planPullOrderDetailInfo));
                    ///PlanPullOrderDetailInfo -> MaterialPullingOrderDetailInfo
                    MaterialPullingCommonBLL.GetMaterialPullingOrderDetail(planPullOrderDetailInfo, ref detailInfo);
                    ///仓储明细集合Add
                    materialPulling.MaterialPullingOrderDetailInfos.Add(detailInfo);
                }
                ///拉动单生成后需要调用拉动仓储衔接函数获取语句
                @string.AppendLine(MaterialPullingCommonBLL.Handler(materialPulling, loginUser));
            }

            #endregion

            #region 提前拉动 TWD
            var twdCartGroups = cartGroups.Where(d => d.Key.PullMode == (int)PullModeConstants.Pcs || d.Key.PullMode == (int)PullModeConstants.Twd).ToList();
            ///TWD计数器
            List <TwdCounterInfo> twdCounterInfos = new TwdCounterBLL().GetList("" +
                                                                                "[STATUS] =" + (int)BasicDataStatusConstants.Enable + " and " +
                                                                                "[PART_PULL_FID] in ('" + string.Join("','", maintainInhouseLogisticStandardInfos.Select(d => d.Fid).ToArray()) + "')  and " +
                                                                                "isnull([CURRENT_QTY],0) > 0", string.Empty);
            ///TWD零件类
            List <TwdPartBoxInfo> twdPartBoxInfos = new TwdPartBoxBLL().GetList("" +
                                                                                "[STATUS] =" + (int)BasicDataStatusConstants.Enable + " and " +
                                                                                "[PART_BOX_CODE] in ('" + string.Join("','", twdCartGroups.Select(d => d.Key.PartBoxCode).ToArray()) + "')", string.Empty);
            foreach (var twdCartGroup in twdCartGroups)
            {
                ///从参数集合从提取对应的紧急拉动购物车集合
                List <EmergencyPullingCartInfo> pullingCartInfos = emergencyPullingCartInfos.Where(d =>
                                                                                                   d.PullMode == twdCartGroup.Key.PullMode && d.PartBoxCode == twdCartGroup.Key.PartBoxCode).ToList();
                if (pullingCartInfos.Count == 0)
                {
                    continue;
                }
                ///TWD零件类
                TwdPartBoxInfo twdPartBoxInfo = twdPartBoxInfos.FirstOrDefault(d => d.PartBoxCode == twdCartGroup.Key.PartBoxCode);
                if (twdPartBoxInfo == null)
                {
                    continue;
                }
                ///触发层级拉动的集合
                List <EmergencyPullingCartInfo> pullingLevelCartInfos = pullingCartInfos.Where(d => d.TriggerPullFlag == true).ToList();
                foreach (EmergencyPullingCartInfo pullingLevelCartInfo in pullingLevelCartInfos)
                {
                    ///需要根据其物料拉动信息外键获取对应的计数器数据(状态必须为已启用)
                    TwdCounterInfo twdCounterInfo = twdCounterInfos.FirstOrDefault(d =>
                                                                                   d.PartPullFid == pullingLevelCartInfo.LogisticStandardFid.GetValueOrDefault() &&
                                                                                   d.Status == (int)BasicDataStatusConstants.Enable);
                    if (twdCounterInfo == null)
                    {
                        continue;
                    }
                    ///在此之前需要根据物料图号、供应商、层级仓库、层级存储区在物料拉动信息中获取匹配的目标仓库、目标存储区数据
                    MaintainInhouseLogisticStandardInfo maintainInhouseLogisticStandardInfo = maintainInhouseLogisticStandardInfos.FirstOrDefault(d =>
                                                                                                                                                  d.PartNo == pullingLevelCartInfo.PartNo &&
                                                                                                                                                  d.SupplierNum == pullingLevelCartInfo.SupplierNum &&
                                                                                                                                                  d.WmNo == pullingLevelCartInfo.TriggerWmNo &&
                                                                                                                                                  d.ZoneNo == pullingLevelCartInfo.TriggerZoneNo);
                    ///触发层级拉动
                    @string.AppendFormat(TwdCounterBLL.LevelPullCounter(maintainInhouseLogisticStandardInfo, pullingLevelCartInfo.RequiredPartQty.GetValueOrDefault(), loginUser, twdCounterInfo.Fid.GetValueOrDefault(), twdPartBoxInfo));
                }
                ///提前拉动的集合
                List <EmergencyPullingCartInfo> advancePullCartInfos = pullingCartInfos.Where(d =>
                                                                                              d.TriggerPullFlag == false && d.EmergencyPullMode == (int)EmergencyPullModeConstants.AdvancePull).ToList();
                if (advancePullCartInfos.Count == 0)
                {
                    continue;
                }
                ///仓储衔接主表
                MaterialPullingOrderInfo materialPulling = MaterialPullingCommonBLL.CreateMaterialPullingOrderInfo();
                ///TWD拉动单主表
                TwdPullOrderInfo twdPullOrderInfo = TwdPullOrderBLL.CreateTwdPullOrderInfo(loginUser);
                ///TwdPartBoxInfo -> TwdPullOrderInfo
                TwdPullOrderBLL.GetTwdPullOrderInfo(twdPartBoxInfo, ref twdPullOrderInfo);
                ///TWD拉动单主表sql
                @string.AppendLine(TwdPullOrderDAL.GetInsertSql(twdPullOrderInfo));
                ///TwdPullOrderInfo-->MaterialPullingOrderInfo
                MaterialPullingCommonBLL.GetMaterialPullingOrderInfo(twdPullOrderInfo, ref materialPulling);
                int rowNo = 0; ///行号
                               ///逐条循环每个购物车
                foreach (EmergencyPullingCartInfo advancePullCartInfo in advancePullCartInfos)
                {
                    ///需要根据其物料拉动信息外键获取对应的计数器数据(状态必须为已启用)
                    ///TT_MPM_TWD_COUNTER TWD计数器
                    TwdCounterInfo twdCounterInfo = twdCounterInfos.FirstOrDefault(d =>
                                                                                   d.PartPullFid == advancePullCartInfo.LogisticStandardFid.GetValueOrDefault() &&
                                                                                   d.Status == (int)BasicDataStatusConstants.Enable);
                    if (twdCounterInfo == null)
                    {
                        continue;
                    }
                    ///物料拉动信息
                    MaintainInhouseLogisticStandardInfo maintainInhouseLogisticStandardInfo = maintainInhouseLogisticStandardInfos.FirstOrDefault(d => d.Fid == advancePullCartInfo.LogisticStandardFid);
                    if (maintainInhouseLogisticStandardInfo == null)
                    {
                        continue;
                    }
                    ///物料包装数量在此需要根据单包装数量以及物料需求数量进行向上圆整计算
                    ///REQUIRED_BOX_QTY:物料包装数量  PULL_PACKAGE_QTY:单包装数量 REQUIRED_PART_QTY:物料需求数量
                    if (advancePullCartInfo.PullPackageQty.GetValueOrDefault() == 0)
                    {
                        continue;                                                             ///O不能做被除数
                    }
                    advancePullCartInfo.RequiredBoxQty = Convert.ToInt32(Math.Ceiling(advancePullCartInfo.RequiredPartQty.GetValueOrDefault() / advancePullCartInfo.PullPackageQty.GetValueOrDefault()));
                    ///若该系统配置标记为false时、计数器当前累计数量不允许小于购物车物料需求数量,
                    if (allowedFlag.ToLower() == "false" && twdCounterInfo.CurrentQty.GetValueOrDefault() < advancePullCartInfo.RequiredPartQty.GetValueOrDefault())
                    {
                        continue;
                    }
                    ///仓储衔接明细表
                    MaterialPullingOrderDetailInfo detailInfo = MaterialPullingCommonBLL.CreateMaterialPullingOrderDetailInfo();
                    ///TWD明细表
                    TwdPullOrderDetailInfo pullOrderDetailInfo = TwdPullOrderDetailBLL.CreateTwdPullOrderDetailInfo(loginUser);
                    ///MaintainInhouseLogisticStandardInfo -> TwdPullOrderDetailInfo
                    TwdPullOrderDetailBLL.GetTwdPullOrderDetailInfo(maintainInhouseLogisticStandardInfo, ref pullOrderDetailInfo);
                    ///TwdPullOrderInfo -> TwdPullOrderDetailInfo
                    TwdPullOrderDetailBLL.GetTwdPullOrderDetailInfo(twdPullOrderInfo, ref pullOrderDetailInfo);
                    ///ROW_NO,行号
                    pullOrderDetailInfo.RowNo = ++rowNo;
                    ///REQUIRED_PACKAGE_QTY,需求包装数
                    pullOrderDetailInfo.RequiredPackageQty = advancePullCartInfo.RequiredBoxQty.GetValueOrDefault();
                    ///REQUIRED_PART_QTY,需求物料数量
                    pullOrderDetailInfo.RequiredPartQty = advancePullCartInfo.RequiredPartQty.GetValueOrDefault();
                    ///TWD明细表sql
                    @string.AppendLine(TwdPullOrderDetailDAL.GetInsertSql(pullOrderDetailInfo));
                    ///TwdPullOrderDetailInfo -> MaterialPullingOrderDetailInfo
                    MaterialPullingCommonBLL.GetMaterialPullingOrderDetailInfo(pullOrderDetailInfo, ref detailInfo);
                    ///仓储衔接集合Add
                    materialPulling.MaterialPullingOrderDetailInfos.Add(detailInfo);
                    ///否则直接对计数器的当前累计数量按购物车物料需求数量进行扣减
                    @string.AppendLine("update [LES].[TT_MPM_TWD_COUNTER] " +
                                       "set [CURRENT_QTY] = isnull([CURRENT_QTY],0) - " + advancePullCartInfo.RequiredPartQty.GetValueOrDefault() + "," +
                                       "[MODIFY_DATE] = GETDATE()," +
                                       "[MODIFY_USER] = N'" + loginUser + "' " +
                                       "where [ID]= " + twdCounterInfo.Id + ";");
                    ///同时记录计数器日志并标记其类型为提前拉动
                    TwdCounterLogInfo twdCounterLogInfo = TwdCounterLogBLL.CreateTwdCounterLogInfo(twdCounterInfo.Fid.GetValueOrDefault(), loginUser);
                    ///TwdCounterInfo -> TwdCounterLogInfo
                    TwdCounterLogBLL.GetTwdCounterLogInfo(twdCounterInfo, ref twdCounterLogInfo);
                    ///PART_QTY,物料数量
                    twdCounterLogInfo.PartQty = 0 - advancePullCartInfo.RequiredPartQty.GetValueOrDefault();
                    ///SOURCE_DATA,目视来源数据
                    twdCounterLogInfo.SourceData = twdPullOrderInfo.OrderCode;
                    ///SOURCE_DATA_FID,数据来源外键
                    twdCounterLogInfo.SourceDataFid = twdPullOrderInfo.Fid;
                    ///SOURCE_DATA_TYPE,数据来源类型
                    twdCounterLogInfo.SourceDataType = (int)TwdCounterSourceDataTypeConstants.AdvancePull;
                    ///计数器日志sql
                    @string.AppendLine(TwdCounterLogDAL.GetInsertSql(twdCounterLogInfo));
                }
                ///拉动单生成后需要调用拉动仓储衔接函数获取语句
                @string.AppendLine(MaterialPullingCommonBLL.Handler(materialPulling, loginUser));
            }

            #endregion

            return(@string.ToString());
        }