Example #1
0
        /// <summary>
        /// CreatePlanPullOrderSql
        /// </summary>
        /// <param name="planPullOrderFid"></param>
        /// <param name="materialPullingOrderInfo"></param>
        /// <param name="windowTimes"></param>
        /// <param name="timeZone"></param>
        /// <param name="inspectionFlag"></param>
        /// <returns></returns>
        private string CreatePlanPullOrderSql(Guid planPullOrderFid, MaterialPullingOrderInfo materialPullingOrderInfo, string windowTimes, string timeZone, int?inspectionFlag)
        {
            PlanPullOrderInfo planPullOrderInfo = new PlanPullOrderInfo();

            planPullOrderInfo.Fid                 = planPullOrderFid;
            planPullOrderInfo.OrderCode           = materialPullingOrderInfo.OrderNo;
            planPullOrderInfo.PartBoxCode         = materialPullingOrderInfo.PartBoxCode;
            planPullOrderInfo.PartBoxName         = materialPullingOrderInfo.PartBoxName;
            planPullOrderInfo.Plant               = materialPullingOrderInfo.Plant;
            planPullOrderInfo.Workshop            = materialPullingOrderInfo.Workshop;
            planPullOrderInfo.AssemblyLine        = materialPullingOrderInfo.AssemblyLine;
            planPullOrderInfo.SupplierNum         = materialPullingOrderInfo.SupplierNum;
            planPullOrderInfo.SourceWmNo          = materialPullingOrderInfo.SourceWmNo;
            planPullOrderInfo.SourceZoneNo        = materialPullingOrderInfo.SourceZoneNo;
            planPullOrderInfo.TargetWmNo          = materialPullingOrderInfo.TargetWmNo;
            planPullOrderInfo.TargetZoneNo        = materialPullingOrderInfo.TargetZoneNo;
            planPullOrderInfo.PublishTime         = materialPullingOrderInfo.PublishTime;
            planPullOrderInfo.OrderType           = (int)PullOrderTypeConstants.Pulling;
            planPullOrderInfo.Dock                = materialPullingOrderInfo.TargetDock;
            planPullOrderInfo.ExpectedArrivalTime = materialPullingOrderInfo.PlanShippingTime;
            planPullOrderInfo.SuggestDeliveryTime = materialPullingOrderInfo.PlanDeliveryTime;
            planPullOrderInfo.WindowTimes         = windowTimes;
            planPullOrderInfo.OrderStatus         = (int)PullOrderStatusConstants.Released;
            planPullOrderInfo.TimeZone            = timeZone;
            planPullOrderInfo.DeliveryAdd         = string.Empty;
            planPullOrderInfo.InspectionFlag      = inspectionFlag.GetValueOrDefault() == 1 ? true : false;
            planPullOrderInfo.CreateUser          = loginUser;
            return(PlanPullOrderDAL.GetInsertSql(planPullOrderInfo));
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="fields"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public bool UpdateInfo(string fields, long id)
        {
            PlanPullOrderInfo info = dal.GetInfo(id);

            if (info.OrderStatus.GetValueOrDefault() != (int)PullOrderStatusConstants.Created)
            {
                throw new Exception("MC:0x00000683");///状态必须为已创建
            }
            ///如果填写了客户委托编号则需要在此时更新对应入库单、出库单、应收、应付中的委托编号
            string custTrustNo = CommonBLL.GetFieldValue(fields, "CUST_TRUST_NO");
            string sql         = string.Empty;

            if (!string.IsNullOrEmpty(custTrustNo) && custTrustNo != info.CustTrustNo)
            {
                string loginUser = CommonBLL.GetFieldValue(fields, "MODIFY_USER");
                sql += "update [LES].[TT_WMM_RECEIVE] set [ASN_NO] = N'" + custTrustNo + "',[MODIFY_USER] = N'" + loginUser + "',[MODIFY_DATE] = GETDATE() where [RUNSHEET_NO] = N'" + info.OrderCode + "' and [VALID_FLAG] = 1;";
                sql += "update [LES].[TT_WMM_OUTPUT] set [ASN_NO] = N'" + custTrustNo + "',[MODIFY_USER] = N'" + loginUser + "',[MODIFY_DATE] = GETDATE() where [RUNSHEET_NO] = N'" + info.OrderCode + "' and [VALID_FLAG] = 1;";
                sql += "update [LES].[TT_FIM_BUSINESS_EXPENSE_IN] set [CUST_TRUST_NO] = N'" + custTrustNo + "',[MODIFY_USER] = N'" + loginUser + "',[MODIFY_DATE] = GETDATE() where [ORDER_NO] = N'" + info.OrderCode + "' and [VALID_FLAG] = 1;";
                sql += "update [LES].[TT_FIM_BUSINESS_EXPENSE_OUT] set [CUST_TRUST_NO] = N'" + custTrustNo + "',[MODIFY_USER] = N'" + loginUser + "',[MODIFY_DATE] = GETDATE() where [ORDER_NO] = N'" + info.OrderCode + "' and [VALID_FLAG] = 1;";
            }
            ///执行
            using (TransactionScope trans = new TransactionScope())
            {
                if (!string.IsNullOrEmpty(sql))
                {
                    CommonDAL.ExecuteNonQueryBySql(sql);
                }
                if (dal.UpdateInfo(fields, id) == 0)
                {
                    return(false);
                }
                trans.Complete();
            }
            return(true);
        }
Example #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        /// <param name="loginUser"></param>
        /// <returns></returns>
        public bool LogicDeleteInfo(long id, string loginUser)
        {
            PlanPullOrderInfo info = dal.GetInfo(id);

            if (info.OrderStatus.GetValueOrDefault() != (int)PullOrderStatusConstants.Created)
            {
                throw new Exception("MC:0x00000683");///状态必须为已创建
            }
            return(dal.LogicDelete(id, loginUser) > 0 ? true : false);
        }
 /// <summary>
 /// PlanPullOrderInfo -> PlanPullOrderDetailInfo
 /// </summary>
 /// <param name="planPullOrderInfo"></param>
 /// <param name="planPullOrderDetailInfo"></param>
 public static void GetPlanPullOrderDetailInfo(PlanPullOrderInfo planPullOrderInfo, ref PlanPullOrderDetailInfo planPullOrderDetailInfo)
 {
     if (planPullOrderInfo == null)
     {
         return;
     }
     ///ORDER_FID,拉动单外键
     planPullOrderDetailInfo.OrderFid = planPullOrderInfo.Fid;
     ///ORDER_STATUS,拉动单状态
     planPullOrderDetailInfo.OrderStatus = planPullOrderInfo.OrderStatus;
     ///ORDER_CODE,拉动单号
     planPullOrderDetailInfo.OrderCode = planPullOrderInfo.OrderCode;
 }
Example #5
0
 /// <summary>
 /// InsertInfo
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public long InsertInfo(PlanPullOrderInfo info)
 {
     ///系统自动根据规则创建
     info.OrderCode = new SeqDefineDAL().GetCurrentCode("PLAN_PULL_ORDER_CODE");
     ///校验相同客户的委托编号不能重复
     if (!string.IsNullOrEmpty(info.CustTrustNo))
     {
         int cnt = dal.GetCounts("[CUST_CODE] = N'" + info.CustCode + "' and [CUST_TRUST_NO] = N'" + info.CustTrustNo + "'");
         if (cnt > 0)
         {
             throw new Exception("MC:0x00000460");///此客户的相同委托编号已存在
         }
     }
     return(dal.Add(info));
 }
Example #6
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());
     }
 }
Example #7
0
        /// <summary>
        /// Create PlanPullOrderInfo
        /// </summary>
        /// <param name="loginUser"></param>
        /// <returns></returns>
        public static PlanPullOrderInfo CreatePlanPullOrderInfo(string loginUser)
        {
            PlanPullOrderInfo planPullOrderInfo = new PlanPullOrderInfo
            {
                ///Fid
                Fid = Guid.NewGuid(),
                ///ValidFlag
                ValidFlag = true,
                ///CreateDate
                CreateDate = DateTime.Now,
                ///CreateUser
                CreateUser = loginUser
            };

            ///
            return(planPullOrderInfo);
        }
Example #8
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());
        }
Example #9
0
 /// <summary>
 /// ReceiveInfo -> PlanPullOrderInfo
 /// </summary>
 /// <param name="receiveInfo"></param>
 /// <param name="planPullOrderInfo"></param>
 public static void GetPlanPullOrderInfo(ReceiveInfo receiveInfo, ref PlanPullOrderInfo planPullOrderInfo)
 {
     ///Fid
     planPullOrderInfo.Fid = receiveInfo.Fid;
     ///ORDER_CODE
     planPullOrderInfo.OrderCode = new SeqDefineDAL().GetCurrentCode("PLAN_PULL_ORDER_CODE");
     ///PART_BOX_CODE
     //planPullOrderInfo.PartBoxCode = receiveInfo.PartBoxCode;
     /////PART_BOX_NAME
     //planPullOrderInfo.PartBoxName = receiveInfo.PartBoxName;
     ///PLANT
     planPullOrderInfo.Plant = receiveInfo.Plant;
     ///SUPPLIER_NUM
     planPullOrderInfo.SupplierNum = receiveInfo.SupplierNum;
     ///SOURCE_ZONE_NO
     //planPullOrderInfo.SourceZoneNo = receiveInfo.SourceZoneNo;
     /////SOURCE_WM_NO
     //planPullOrderInfo.SourceWmNo = receiveInfo.SourceWmNo;
     ///TARGET_ZONE_NO
     planPullOrderInfo.TargetZoneNo = receiveInfo.ZoneNo;
     ///TARGET_WM_NO
     planPullOrderInfo.TargetWmNo = receiveInfo.WmNo;
     ///PUBLISH_TIME
     planPullOrderInfo.PublishTime = DateTime.Now;
     ///ORDER_TYPE
     planPullOrderInfo.OrderType = (int)PullOrderTypeConstants.Emergency;
     ///DOCK
     planPullOrderInfo.Dock = receiveInfo.Dock;
     ///SUGGEST_DELIVERY_TIME
     planPullOrderInfo.SuggestDeliveryTime = DateTime.Now;
     ///ORDER_STATUS
     planPullOrderInfo.OrderStatus = (int)PullOrderStatusConstants.Released;
     ///ASN_FLAG
     planPullOrderInfo.AsnFlag = false;
     ///KEEPER
     planPullOrderInfo.Keeper = receiveInfo.BookKeeper;
     ///ROUTE_CODE
     //planPullOrderInfo.RouteCode = receiveInfo.Route;
     /////ROUTE_NAME
     //planPullOrderInfo.RouteName = receiveInfo.RouteName;
     /////CUST_CODE
     //planPullOrderInfo.CustCode = receiveInfo.CustCode;
     /////CUST_SNAME
     //planPullOrderInfo.CustSname = receiveInfo.CustName;
 }
Example #10
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;
 }
Example #11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="loginUser"></param>
        /// <returns></returns>
        public static PlanPullOrderInfo CreatePlanPullOrder(string loginUser)
        {
            PlanPullOrderInfo info = new PlanPullOrderInfo();

            ///FID,
            info.Fid = Guid.NewGuid();
            ///VALID_FLAG,逻辑删除标记
            info.ValidFlag = true;
            ///CREATE_DATE,创建时间
            info.CreateDate = DateTime.Now;
            ///CREATE_USER,创建用户
            info.CreateUser = loginUser;
            ///ORDER_STATUS,拉动单状态
            info.OrderStatus = (int)PullOrderStatusConstants.Released;
            ///ORDER_CODE,拉动单号
            info.OrderCode = new SeqDefineDAL().GetCurrentCode("PLAN_PULL_ORDER_CODE"); ///TODO: 动态参数?
            ///PUBLISH_TIME,发布时间
            info.PublishTime = DateTime.Now;
            ///KEEPER,保管员
            info.Keeper = null;
            return(info);
        }
        /// <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());
        }