Forráskód Böngészése

领料单生成分开处理。

tangdi 2 éve
szülő
commit
d91b27cb03

+ 17 - 19
MicroServices/Business/Business.Application/ResourceExamineManagement/CalcBomViewAppService.cs

@@ -301,6 +301,11 @@ namespace Business.ResourceExamineManagement
                                 }
                                 //1.先生成委外工单。
                                 var mesorder = CreateMesOOder(level1Dto, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
+
+                                //2.生成采购申请
+                                //采购申请
+                                PackageSRMPR(level1Dto, bangid, sentrys);
+
                                 level1Dto.subcontracting_qty = level1Dto.lack_qty;
                                 level1Dto.subcontracting_list = new List<ooder>();
                                 ooder oo = new ooder();
@@ -310,19 +315,12 @@ namespace Business.ResourceExamineManagement
                                 oo.production_unit_code = mesorder.production_unit_code;
                                 oo.ooentry_prdname = mesorder.ooentry_prdname;
                                 oo.ooentry_stime = mesorder.ooentry_stime;
-                                oo.ooentry_etime = mesorder.ooentry_etime;
+                                oo.ooentry_etime = level1Dto.kitting_time;
                                 oo.oorder_date = mesorder.oorder_date;
                                 oo.oorder_no = mesorder.oorder_no;
                                 level1Dto.subcontracting_list.Add(oo);
-                                level1Dto.kitting_time = mesorder.ooentry_etime;
                                 orderList.Add(mesorder);
-                                //2.生成采购申请
-                                //采购申请
-                                PackageSRMPR(level1Dto, bangid, sentrys);
                             }
-
-                           
-
                         }
                         else
                         {
@@ -736,6 +734,9 @@ namespace Business.ResourceExamineManagement
                             }
                             //1.先生成委外工单。
                             var mesorder = CreateMesOOder(item, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
+                            //2.生成采购申请
+                            //采购申请
+                            PackageSRMPR(item, bangid, sentrys);
                             item.subcontracting_qty = item.lack_qty;
                             item.subcontracting_list = new List<ooder>();
                             ooder oo = new ooder();
@@ -745,15 +746,12 @@ namespace Business.ResourceExamineManagement
                             oo.production_unit_code = mesorder.production_unit_code;
                             oo.ooentry_prdname = mesorder.ooentry_prdname;
                             oo.ooentry_stime = mesorder.ooentry_stime;
-                            oo.ooentry_etime = mesorder.ooentry_etime;
+                            oo.ooentry_etime = item.kitting_time;
                             oo.oorder_date = mesorder.oorder_date;
                             oo.oorder_no = mesorder.oorder_no;
                             item.subcontracting_list.Add(oo);
-                            item.kitting_time = mesorder.ooentry_etime;
                             orderList.Add(mesorder);
-                            //2.生成采购申请
-                            //采购申请
-                            PackageSRMPR(item, bangid, sentrys);
+                            
                         }
                     }
                 }
@@ -1162,6 +1160,8 @@ namespace Business.ResourceExamineManagement
                                     }
                                     //1.先生成委外工单。
                                     var mesorder = CreateMesOOder(sct, param.company_id, param.factoryId, bangid, leadTimeList, supplierList, plan_date.Value);
+                                    //采购申请
+                                    PackageSRMPR(sct, bangid, sentrys);
                                     sct.subcontracting_qty = sct.lack_qty;
                                     sct.subcontracting_list = new List<ooder>();
                                     ooder oo = new ooder();
@@ -1171,14 +1171,11 @@ namespace Business.ResourceExamineManagement
                                     oo.production_unit_code = mesorder.production_unit_code;
                                     oo.ooentry_prdname = mesorder.ooentry_prdname;
                                     oo.ooentry_stime = mesorder.ooentry_stime;
-                                    oo.ooentry_etime = mesorder.ooentry_etime;
+                                    oo.ooentry_etime = sct.kitting_time;
                                     oo.oorder_date = mesorder.oorder_date;
                                     oo.oorder_no = mesorder.oorder_no;
                                     item.subcontracting_list.Add(oo);
-                                    sct.kitting_time = mesorder.ooentry_etime;
                                     orderList.Add(mesorder);
-                                    //采购申请
-                                    PackageSRMPR(sct, bangid, sentrys);
                                 }
                             }
                         }
@@ -1300,7 +1297,7 @@ namespace Business.ResourceExamineManagement
             }
             sRMPR.item_no = returnlist.num;
             sRMPR.orderentry_id = returnlist.sentry_id;
-            sRMPR.lastStartTmie = DateTime.Now.AddDays((double)(sRMPR.srm_Pr_Main.MinBy(x => x.totalLeadTime).totalLeadTime.GetValueOrDefault() + plan.clean_leadtime.GetValueOrDefault()));//加上提前期和备料期,得到齐套时间
+            sRMPR.lastStartTmie = DateTime.Now.AddDays((double)(sRMPR.srm_Pr_Main.MinBy(x => x.totalLeadTime).totalLeadTime.GetValueOrDefault()));//加上提前期和备料期,得到齐套时间
             return sRMPR;
         }
         // 生成订单编号 字母+年月日+8位随机数+时间戳
@@ -1443,8 +1440,9 @@ namespace Business.ResourceExamineManagement
             {
                 item.purchase_qty = item.lack_qty;
                 item.purchase_list = new List<purchase>();
-                item.kitting_time = SRMPRDto.lastStartTmie;
+                
             }
+            item.kitting_time = SRMPRDto.lastStartTmie;
             SRMPRDtoList.Add(SRMPRDto);
         }
     }

+ 164 - 107
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -10,7 +10,9 @@ using Business.ResourceExamineManagement.Dto;
 using Business.StructuredDB.SaleFcst;
 using Business.StructuredDB.WMS;
 using EFCore.BulkExtensions;
+using Microsoft.AspNetCore.DataProtection.Repositories;
 using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
 using MongoDB.Driver;
 using MongoDB.Driver.Linq;
 using Newtonsoft.Json;
@@ -30,6 +32,7 @@ using Volo.Abp.MultiTenancy;
 using Volo.Abp.ObjectMapping;
 using Volo.Abp.Uow;
 using static Spire.Pdf.General.Render.Decode.Jpeg2000.j2k.codestream.HeaderInfo;
+using static Volo.Abp.Identity.Settings.IdentitySettingNames;
 
 namespace Business.ResourceExamineManagement
 {
@@ -2415,6 +2418,9 @@ namespace Business.ResourceExamineManagement
             //只做库存是否齐套检查
             if (mo_Mes_Morders.Any())
             {
+                List<mes_morder> updateList = new List<mes_morder>();
+                List<mes_morder> xdupdateList = new List<mes_morder>();
+
                 //检查工单是否已经下了领料单
                 var nbrList = _nbrMaster.Select(a => a.Domain == domain && a.Type == "SM" && mo_Mes_Morders.Select(c => c.morder_no).Contains(a.WorkOrd));
                 foreach (var mo in mo_Mes_Morders)
@@ -2444,6 +2450,7 @@ namespace Business.ResourceExamineManagement
                             //工单状态为  “备料中”
                             mo.MaterialSituation = MorderEnum.Preparation;
                         }
+                        updateList.Add(mo);
                         //完成时间已经过去,则不做处理
                     }
                     else {
@@ -2501,6 +2508,7 @@ namespace Business.ResourceExamineManagement
                                     workords += "," + cmo.morder_no;
                                     cmo.MaterialSituation = MorderEnum.Preparation;
                                     cmo.morder_state = MorderEnum.Xd_state;
+                                    updateList.Add(cmo);
                                 }
                                 else {
                                     cmo.MaterialSituation = MorderEnum.CarehouseComplete;
@@ -2509,6 +2517,10 @@ namespace Business.ResourceExamineManagement
                                         workords += "," + cmo.morder_no;
                                         cmo.MaterialSituation = MorderEnum.Preparation;
                                         cmo.morder_state = MorderEnum.Xd_state;
+                                        xdupdateList.Add(cmo);
+                                    }
+                                    else {
+                                        updateList.Add(cmo);
                                     }
                                 }
                             }
@@ -2521,6 +2533,11 @@ namespace Business.ResourceExamineManagement
                                     workords += "," + cmo.morder_no;
                                     cmo.morder_state = MorderEnum.Xd_state;
                                     cmo.MaterialSituation = MorderEnum.Part;
+                                    xdupdateList.Add(cmo);
+                                }
+                                else
+                                {
+                                    updateList.Add(cmo);
                                 }
                             }
                         }
@@ -2530,7 +2547,7 @@ namespace Business.ResourceExamineManagement
                     //保存检查结果
                     SaveExamineResult(result.KittingCheckResultList, result.DayBulletinBoardList, 1);*/
                 }
-                _businessDbContext.BulkUpdate(mo_Mes_Morders);
+                _businessDbContext.BulkUpdate(updateList);
                 if (workords.Length > 0)
                 {
                     workords = workords.Substring(1, workords.Length - 1);
@@ -2540,6 +2557,7 @@ namespace Business.ResourceExamineManagement
                     {
                         return rst;
                     }
+                    _businessDbContext.BulkUpdate(xdupdateList);
                     var insertList = GetCopyOP(workords, domain);
                     if (insertList.Any())
                     {
@@ -3060,8 +3078,13 @@ namespace Business.ResourceExamineManagement
                     var wkordPrList = prmainlist.Where(s => s.pr_mono == wod.WorkOrd).ToList();
 
                     //反算所有的PR,根据时间减去提前期   //按最大预处理时间倒排
-                    var moIcitems = icitemlist.Where(s => wkordPrList.Select(c => c.icitem_id).Contains(s.mysql_id)).ToList();
-                    var maxTime = moIcitems.Max(s => s.clean_leadtime.GetValueOrDefault());
+                    var moIcitems = icitemlist.Where(s => s.is_clean == 1 && wkordPrList.Select(c => c.icitem_id).Contains(s.mysql_id)).ToList();
+                    //获取预处理提前期最大值
+                    decimal maxTime = 0;
+                    if (moIcitems.Any())
+                    {
+                        maxTime = moIcitems.Max(x => x.clean_leadtime.GetValueOrDefault());
+                    }
                     wkordPrList.ForEach(pr =>
                     {
                         var ts = pr.pr_parrive_date - pr.pr_psend_date;
@@ -3310,7 +3333,7 @@ namespace Business.ResourceExamineManagement
             AutoCreateBomBill(companyid);
         }
 
-        public async Task AutoCreatePickBill(List<WorkOrdMaster> workOrdMasters, List<PeriodSequenceDet> dbPeriodSequences, List<NbrMaster> nbrMasterList, List<NbrDetail> nbrDetailList, string userAccount)
+        public async Task AutoCreatePickBill(List<WorkOrdMaster> workOrdMasters, List<PeriodSequenceDet> dbPeriodSequences, List<NbrMaster> nbrMasterList, List<NbrDetail> nbrDetailList, string userAccount, List<WorkOrdDetail> workDetails)
         {
             if (dbPeriodSequences.Any())
             {
@@ -3318,11 +3341,14 @@ namespace Business.ResourceExamineManagement
                 List<LineMaster> AllLineMasters = _lineMaster.Select(p => AllLines.Contains(p.Line) && p.Domain == workOrdMasters[0].Domain && p.IsActive);
                 var user = _employeeMaster.Select(s => s.Employee == userAccount && s.Domain == workOrdMasters[0].Domain).FirstOrDefault();
                 var ewdmList = _empWorkDutyMaster.Select(s => s.Domain == workOrdMasters[0].Domain).ToList();
+                //需要前处理物料
+                var Items = _mysql_ic_item.GetListAsync(s => workDetails.Select(c => c.ItemNum).Contains(s.number) && s.factory_id.ToString() == workOrdMasters[0].Domain).Result;
+                List<ItemMaster> itemMasterList = _itemMaster.Select(p => workDetails.Select(c => c.ItemNum).Contains(p.ItemNum) && p.Domain == workOrdMasters[0].Domain).Distinct().ToList();
+
                 //按照工单领料,一个工单一个领料单,之前是按照排产日期和产线分别领料
                 foreach (var workord in workOrdMasters)
                 {
                     Dictionary<string, decimal> dictItemQty = new Dictionary<string, decimal>();
-                    decimal QtyOrdSum = workord.QtyOrded;
                     string LocationTo = "";
                     LineMaster defaultLine = null;
 
@@ -3336,110 +3362,44 @@ namespace Business.ResourceExamineManagement
                         }
                         LocationTo = defaultLine?.VLocation;
                     }
-                    
-                    List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord.WorkOrd).ItemNum, QtyOrdSum, workord.Domain);
-                    var childrenList = itemList.Select(a => a.ComponentItem).Distinct().ToList();
-                    List<ItemMaster> itemLocList = _itemMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == workord.Domain && p.IsActive).Distinct().ToList();
-                    var dopIcitems = _ic_item.GetListAsync(s => itemLocList.Select(c => c.ItemNum).Contains(s.number) && s.factory_id.ToString() == workord.Domain).Result;
+                    var workdtls = workDetails.Where(s => s.WorkOrd == workord.WorkOrd).ToList();
+                    //List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord.WorkOrd).ItemNum, QtyOrdSum, workord.Domain);
+                    //var childrenList = itemList.Select(a => a.ComponentItem).Distinct().ToList();
+                    List<ItemMaster> itemLocList = itemMasterList.Where(p => workdtls.Select(c => c.ItemNum).Contains(p.ItemNum) && p.Domain == workord.Domain).Distinct().ToList();
+
+                    List<WorkOrdDetail> cleanDetail = new List<WorkOrdDetail>();
+                    List<WorkOrdDetail> noCleanDetail = new List<WorkOrdDetail>();
+                    workdtls.ForEach(s => {
+                        var i = Items.Find(x => x.number == s.ItemNum && x.is_clean == 1);
+                        if (i != null)
+                        {
+                            cleanDetail.Add(s);
+                        }
+                        else {
+                            noCleanDetail.Add(s);
+                        }
+                    });
                     //获取预处理提前期最大值
                     decimal cleanTime = 0;
-                    if (dopIcitems.Any())
+                    if (noCleanDetail.Any())
                     {
-                        cleanTime = dopIcitems.Max(s => s.clean_leadtime.GetValueOrDefault());
+                        //无需前处理领料单
+                        GenerateNbr(workord, cleanTime, defaultLine, userAccount, nbrMasterList, nbrDetailList, noCleanDetail, itemLocList, ewdmList, LocationTo, user,"");
                     }
-                    List<ItemPackMaster> itemPackList = _itemPackMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == workord.Domain && p.IsActive).Distinct().ToList();
-                    var Nbr = GetMaxSerialNumber(417416915624005);
-                    
-                    DateTime eff = workord.OrdDate.GetValueOrDefault().Date.AddDays(-1);
-                    DateTime start = eff.AddDays((double)(0 - cleanTime - 1));
-                    if (start <= DateTime.Now.Date)
+                    if (cleanDetail.Any())
                     {
-                        start = DateTime.Now.Date;
+                        //需要前处理的领料单
+                        cleanTime = Items.Where(s=> cleanDetail.Select(i=>i.ItemNum).Contains(s.number)).Max(s => s.clean_leadtime.GetValueOrDefault());
+                        GenerateNbr(workord, cleanTime, defaultLine, userAccount, nbrMasterList, nbrDetailList, cleanDetail, itemLocList, ewdmList, LocationTo, user, "PrevProcess");
                     }
-                    var newNbr = new NbrMaster
-                    {
-                        Domain = workord.Domain,
-                        Type = "SM",
-                        Nbr = Nbr,
-                        Remark = "下达自动领料",
-                        //Date = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Min(a => a.PlanDate),
-                        ProdLine = defaultLine?.Line,
-                        EffDate = eff,
-                        Date = start,
-                        Status = "",
-                        WorkOrd = workord.WorkOrd,
-                        QtyOrd = QtyOrdSum,
-                        IsActive = true,
-                        IsChanged = true,
-                        Name = userAccount,
-                        Department = "101",
-                        CreateTime = DateTime.Now,
-                        UpdateTime = DateTime.Now,
-                        CreateUser = user?.Name,
-                        UpdateUser = user?.Name,
-                    };
-                    nbrMasterList.Add(newNbr);
-                    List<string> headAccount = new List<string>();
-                    int i = 1;
-                    itemList?.ForEach(a =>
-                    {
-                        var find = itemLocList?.Find(c => c.ItemNum == a.ComponentItem);
-                        string LocationFrom = "";
-                        if (find != null)
-                        {
-                            LocationFrom = find.Location;
-                            //找出职责范围负责人
-                            //s.ItemNum1 <= a.ComponentItem && a.ComponentItem <= s.ItemNum2
-                           var ewdm = ewdmList.Find(s => 0 >= string.Compare(s.ItemNum1, a.ComponentItem) && 0 >= string.Compare(a.ComponentItem, s.ItemNum2));
-                            if (ewdm != null && !string.IsNullOrEmpty(ewdm.Employee))
-                            {
-                                headAccount.Add(ewdm.Employee);
-                            }
-                        }
-                        
-                        //相同物料汇总
-                        var itemComponent = nbrDetailList.Find(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem);
-                        if (itemComponent == null)
-                        {
-                            nbrDetailList.Add(new NbrDetail
-                            {
-                                Domain = workord.Domain,
-                                Type = "SM",
-                                Nbr = Nbr,
-                                ItemNum = a.ComponentItem,
-                                QtyFrom = 0,
-                                QtyTo = 0,
-                                LocationFrom = LocationFrom,
-                                LocationTo = LocationTo,//现在这几条线是同一线边仓,暂时不考虑多个线边仓
-                                WorkOrd = workord.WorkOrd,
-                                QtyOrd = a.Qty,
-                                CurrQtyOpened = a.Qty,
-                                Line = i,
-                                IsActive = true,
-                                CreateTime = DateTime.Now,
-                                UpdateTime = DateTime.Now,
-                                CreateUser = user?.Name,
-                                UpdateUser = user?.Name,
-                                UM = a.UM
-                            });
-                            i++;
-                        }
-                        else
-                        {
-                            nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).QtyOrd = itemComponent.QtyOrd + a.Qty;
-                            nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).CurrQtyOpened = itemComponent.CurrQtyOpened + a.Qty;
-                        }
-                    });
+                    
 
-                    if (headAccount.Any())
-                    {
-                        newNbr.User1 = string.Join(",", headAccount.Distinct());
-                        string[] user2 = headAccount.ToArray();
-                        newNbr.User2 =JsonConvert.SerializeObject(user2);
-                    }
+                    
+                    //List<ItemPackMaster> itemPackList = _itemPackMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == workord.Domain && p.IsActive).Distinct().ToList();
+                    
 
-                    //先屏蔽备料单扣除库存的DEMO演示。
-                    /*nbrDetailList.ForEach(a =>
+                    /*//先屏蔽备料单扣除库存的DEMO演示。
+                    nbrDetailList.ForEach(a =>
                     {
                         if (a.Nbr == Nbr)
                         {
@@ -3486,6 +3446,101 @@ namespace Business.ResourceExamineManagement
             }
         }
 
+        private void GenerateNbr(WorkOrdMaster workord,decimal cleanTime, LineMaster defaultLine, string userAccount, List<NbrMaster> nbrMasterList, List<NbrDetail> nbrDetailList, List<WorkOrdDetail> detail, List<ItemMaster> itemLocList, List<EmpWorkDutyMaster> ewdmList, string LocationTo,EmployeeMaster user,string TransType)
+        {
+            var Nbr = GetMaxSerialNumber(417416915624005);
+            DateTime eff = workord.OrdDate.GetValueOrDefault().Date.AddDays(-1);
+            DateTime start = eff.AddDays((double)(0 - cleanTime - 1));
+            if (start <= DateTime.Now.Date)
+            {
+                start = DateTime.Now.Date;
+            }
+            //string sql = "exec pr_SFM_GetOrdNbr @Domain='{0}',@NbrType='SM', @UserNo='{1}',@IsDopCall=1'";
+
+            var newNbr = new NbrMaster
+            {
+                Domain = workord.Domain,
+                Type = "SM",
+                Nbr = Nbr,
+                Remark = "下达自动领料",
+                //Date = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Min(a => a.PlanDate),
+                ProdLine = defaultLine?.Line,
+                EffDate = eff,
+                Date = start,
+                Status = "",
+                WorkOrd = workord.WorkOrd,
+                QtyOrd = workord.QtyOrded,
+                IsActive = true,
+                IsChanged = true,
+                Name = userAccount,
+                Department = "101",
+                CreateTime = DateTime.Now,
+                UpdateTime = DateTime.Now,
+                CreateUser = user?.Name,
+                UpdateUser = user?.Name,
+                TransType = TransType
+            };
+            nbrMasterList.Add(newNbr);
+            List<string> headAccount = new List<string>();
+            int i = 1;
+            detail.ForEach(a =>
+            {
+                var find = itemLocList?.Find(c => c.ItemNum == a.ItemNum);
+                string LocationFrom = "";
+                if (find != null)
+                {
+                    LocationFrom = find.Location;
+                    //找出职责范围负责人
+                    var ewdm = ewdmList.Find(s => 0 >= string.Compare(s.ItemNum1, a.ItemNum) && 0 >= string.Compare(a.ItemNum, s.ItemNum2));
+                    if (ewdm != null && !string.IsNullOrEmpty(ewdm.Employee))
+                    {
+                        headAccount.Add(ewdm.Employee);
+                    }
+                    //相同物料汇总
+                    var itemComponent = nbrDetailList.Find(b => b.Nbr == Nbr && b.ItemNum == a.ItemNum);
+                    if (itemComponent == null)
+                    {
+                        nbrDetailList.Add(new NbrDetail
+                        {
+                            Domain = workord.Domain,
+                            Type = "SM",
+                            Nbr = Nbr,
+                            ItemNum = a.ItemNum,
+                            QtyFrom = 0,
+                            QtyTo = 0,
+                            LocationFrom = LocationFrom,
+                            LocationTo = LocationTo,//现在这几条线是同一线边仓,暂时不考虑多个线边仓
+                            WorkOrd = workord.WorkOrd,
+                            QtyOrd = a.QtyRequired,
+                            CurrQtyOpened = a.QtyRequired,
+                            Line = i,
+                            IsActive = true,
+                            CreateTime = DateTime.Now,
+                            UpdateTime = DateTime.Now,
+                            CreateUser = user?.Name,
+                            UpdateUser = user?.Name,
+                            UM = find.UM
+                        });
+                        i++;
+                    }
+                    else
+                    {
+                        nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ItemNum).QtyOrd = itemComponent.QtyOrd + a.QtyRequired;
+                        nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ItemNum).CurrQtyOpened = itemComponent.CurrQtyOpened + a.QtyRequired;
+                    }
+                }
+            });
+
+            if (headAccount.Any())
+            {
+                newNbr.User1 = string.Join(",", headAccount.Distinct());
+                string[] user2 = headAccount.ToArray();
+                newNbr.User2 = JsonConvert.SerializeObject(user2);
+            }
+        }
+
+
+
         public void AsyncItemStockFromWMS(List<crm_seorderentry> sentrys)
         {
             //产品编码
@@ -3643,19 +3698,20 @@ namespace Business.ResourceExamineManagement
             }
 
             //增加判断当前工单是否进行过齐套检查,并且是仓库齐套
-            var mes_morders = _mysql_mes_morder.GetListAsync(s => dbWorkOrds.Contains(s.morder_no) && s.factory_id.ToString() == domain).Result;
+            /*var mes_morders = _mysql_mes_morder.GetListAsync(s => dbWorkOrds.Contains(s.morder_no) && s.factory_id.ToString() == domain).Result;
             if (mes_morders.Where(s => s.MaterialSituation != MorderEnum.CarehouseComplete).Any())
             {
                 return "请选择物料情况为“仓库齐套”的工单。";
-            }
+            }*/
 
             List<NbrMaster> nbrMasterList = new List<NbrMaster>();//需要生成领料单列表
             List<NbrDetail> nbrDetailList = new List<NbrDetail>();//需要生成领料单明细列表
 
             var ords = workOrdMasters.Select(p => p.WorkOrd).ToList();
+            var workDetails = _workOrdDetail.Select(p => p.Domain == domain && workOrds.Contains(p.WorkOrd));
 
             dbPeriodSequences = dbPeriodSequences.Where(p => ords.Contains(p.WorkOrds)).ToList();
-            await AutoCreatePickBill(workOrdMasters, dbPeriodSequences, nbrMasterList, nbrDetailList, userAccount);
+            await AutoCreatePickBill(workOrdMasters, dbPeriodSequences, nbrMasterList, nbrDetailList, userAccount, workDetails);
             if (nbrMasterList.Any())
             {
                 dbPeriodSequences.ForEach(p => { p.Status = "r"; });
@@ -3672,6 +3728,7 @@ namespace Business.ResourceExamineManagement
                     nbrdtls.ForEach(x =>
                     {
                         ic_item_stockoccupy itemStockoccupyDto = new ic_item_stockoccupy();
+                        itemStockoccupyDto.GenerateNewId(help.NextId());
                         itemStockoccupyDto.morder_mo = s.WorkOrd;
                         itemStockoccupyDto.occupy_time = DateTime.Now;
                         var nbrItem = icitem.Find(c => c.number == x.ItemNum);
@@ -3698,13 +3755,13 @@ namespace Business.ResourceExamineManagement
                         _nbrMaster.Insert(nbrMasterList);
                         nbrMasterList.ForEach(a =>
                         {
-                            string sql ="exec pr_WMS_BPM_AddMobileTask @TaskID='{0}',@PlanDate='{1}',@ExecuterTypeID=2,@CreateUser='{2}'";
-                            _businessDbContext.Database.ExecuteSqlRaw(sql, a.Nbr, a.Date.Value.ToString("yyyy-MM-dd"), a.CreateUser);
+                            string sql =string.Format("exec pr_WMS_BPM_AddMobileTask @TaskID='{0}',@PlanDate='{1}',@ExecuterTypeID=2,@CreateUser='{2}'", a.Nbr, a.Date.Value.ToString("yyyy-MM-dd"), a.CreateUser);
+                            _businessDbContext.Database.ExecuteSqlRaw(sql);
                         });
 
                         if (itemstockoccupy.Any())
                         {
-                            _businessDbContext.BulkDelete(itemstockoccupy);
+                            await _mysql_ic_item_stockoccupy.HardDeleteAsync(itemstockoccupy);
                         }
                         if (insertOccuyy.Any())
                         { 

+ 112 - 112
MicroServices/Business/Business.Application/SystemJobManagement/SystemJobAppService.cs

@@ -590,118 +590,118 @@ namespace Business.SystemJobManagement
         ////    }
         ////}
 
-        ////同步物料
-        //public void SyncItemMaster()
-        //{
-        //    bool isAll = true;//是否同步所有物料
-        //    var ic_itemList = _mysql_ic_item.GetListAsync(a => a.tenant_id == 1000 && a.factory_id == 1001).Result;
-        //    List<ItemMaster> custList = new List<ItemMaster>();
-        //    if (isAll)
-        //    {
-        //        custList = _itemMaster.Select(a => a.IsActive && a.Domain == "1001");
-        //    }
-        //    else
-        //    {
-        //        //格努产品编码同步子级物料
-        //        List<string> childItems = GetChildItemNumber("", new List<string>());
-        //        custList = _itemMaster.Select(a => a.IsActive && a.Domain == "1001" && childItems.Distinct().Contains(a.ItemNum));
-        //    }
-        //    List<ic_item> ItemsAdd = new List<ic_item>();
-        //    List<srm_purchase> srm_purchaseAdd = new List<srm_purchase>();
-        //    if (custList != null && custList.Count > 0)
-        //    {
-        //        for (int i = 0; i < custList.Count; i++)
-        //        {
-        //            var ic_item = ic_itemList.Find(x => x.number == custList[i].ItemNum && x.tenant_id == 1000 && x.factory_id == 1001);
-        //            if (ic_item == null)
-        //            {
-        //                long itemId = help.NextId();
-        //                ItemsAdd.Add(new ic_item(itemId)
-        //                {
-        //                    number = custList[i].ItemNum, //物料编码
-        //                    name = custList[i].Descr, //物料名称
-        //                    model = custList[i].Descr1,//规格型号
-        //                    fversion = "",//版本号
-        //                    //ext.FErpClsID == "配置类" ? 0 : ext.FErpClsID == "自制" ? 1 : ext.FErpClsID == "委外" ? 2 : ext.FErpClsID == "外购" ? 3 : ext.FErpClsID == "虚拟" ? 4 : ext.FErpClsID == "费用" ? 5 : ext.FErpClsID == "服务" ? 6 : -1;
-        //                    //erp_cls = custList[i].PurMfg == "P" ? 3 : 1,//物料属性
-        //                    erp_cls = custList[i].ItemNum == "1.SD1.D.0056-F" || custList[i].ItemNum == "1.ZC1.D.0001" || custList[i].ItemNum == "1.BW1.D.0030" ? 1 : 3,
-        //                    //erp_cls_name = custList[i].PurMfg == "P" ? "外购" : "自制",//物料属性名称
-        //                    erp_cls_name = custList[i].ItemNum == "1.SD1.D.0056-F" || custList[i].ItemNum == "1.ZC1.D.0001" || custList[i].ItemNum == "1.BW1.D.0030" ? "自制" : "外购",
-        //                    unit = custList[i].UM,//单位
-        //                    item_level = 0,//物料等级
-        //                    source = "",//来源
-        //                    iskeyitem = custList[i].IsMainMas ? 1 : 0,//是否关键件
-        //                    net_weight = (decimal)custList[i].NetWeight,//净重
-        //                    maund = custList[i].NetWeightUM,//重量单位
-        //                    length = (decimal)custList[i].Length,//长度
-        //                    width = (decimal)custList[i].Width,//宽度
-        //                    height = (decimal)custList[i].Height,//高度
-        //                    allowpur = custList[i].PurMfg == "P" ? 1 : 0,//允许采购
-        //                    allowsale = 1,//允许销售
-        //                    allowmanu = custList[i].PurMfg == "L" ? 1 : 0,//允许生产
-        //                    allowout = 1,//允许委外
-        //                    allowbatch = custList[i].LotSerialControl ? 1 : 0,//批号管理
-        //                    allowserial = custList[i].LotSerialControl ? 1 : 0,//序列号管理
-        //                    photo = "",//图片
-        //                    enable_warning = 1,//启用预警
-        //                    factory_id = 1001,
-        //                    tenant_id = 1000,
-        //                    IsDeleted = false,
-
-
-        //                    batch_manager = custList[i].LotSerialControl ? 1 : 0,
-        //                    minorderqty = custList[i].MinOrd,
-        //                    minpackqty = 1,
-        //                    ordissu_days = 1,
-        //                    transportation_leadtime = 3,
-        //                    stock_leadtime = 1,
-        //                    production_leadtime = 4,
-        //                    order_leadtime = 4,
-
-        //                    fix_leadtime = 1,
-        //                    order_inter_val = 1,
-        //                    lead_time = 1,
-        //                    bat_change_economy = 1,
-        //                    total_tqq = 1,
-        //                    order_point = 1,
-        //                    secinv = 1,
-        //                    secinv_ratio = 1,
-        //                    self_inspection_date = 1,
-        //                    Warehousing_date = 1,
-        //                    Shipping_date = 3,
-        //                });
-        //                srm_purchaseAdd.Add(new srm_purchase(help.NextId())
-        //                {
-        //                    icitem_id = itemId,
-        //                    icitem_name = custList[i].Descr,
-        //                    sourcelist_number = "HYQD12064",
-        //                    supplier_id = 10101000051,
-        //                    supplier_number = "",
-        //                    supplier_name = "广州市伟正金属构件有限公司",
-        //                    purchgroup = "",
-        //                    purcher = "",
-        //                    purchase_unit = "",
-        //                    netpurchase_price = 1,
-        //                    taxrate = 0.13m,
-        //                    currency_type = 1,
-        //                    order_rector_name = "",
-        //                    order_rector_num = "",
-        //                    factory_code = "",
-        //                    order_dept = "",
-        //                    order_price = 13,
-        //                    sale_price = 130,
-        //                    qty_min = 10,
-        //                    batch_append_qty = 10,
-        //                    factory_id = 1001,
-        //                    tenant_id = 1000,
-        //                    IsDeleted = false
-        //                });
-        //            }
-        //        }
-        //    }
-        //    _businessDbContext.BulkInsert(ItemsAdd);
-        //    _businessDbContext.BulkInsert(srm_purchaseAdd);
-        //}
+        /*//同步物料
+        public void SyncItemMaster()
+        {
+            bool isAll = true;//是否同步所有物料
+            var ic_itemList = _mysql_ic_item.GetListAsync(a => a.tenant_id == 1000 && a.factory_id == 1001).Result;
+            List<ItemMaster> custList = new List<ItemMaster>();
+            if (isAll)
+            {
+                custList = _itemMaster.Select(a => a.IsActive && a.Domain == "1001");
+            }
+            else
+            {
+                //格努产品编码同步子级物料
+                List<string> childItems = GetChildItemNumber("", new List<string>());
+                custList = _itemMaster.Select(a => a.IsActive && a.Domain == "1001" && childItems.Distinct().Contains(a.ItemNum));
+            }
+            List<ic_item> ItemsAdd = new List<ic_item>();
+            List<srm_purchase> srm_purchaseAdd = new List<srm_purchase>();
+            if (custList != null && custList.Count > 0)
+            {
+                for (int i = 0; i < custList.Count; i++)
+                {
+                    var ic_item = ic_itemList.Find(x => x.number == custList[i].ItemNum && x.tenant_id == 1000 && x.factory_id == 1001);
+                    if (ic_item == null)
+                    {
+                        long itemId = help.NextId();
+                        ItemsAdd.Add(new ic_item(itemId)
+                        {
+                            number = custList[i].ItemNum, //物料编码
+                            name = custList[i].Descr, //物料名称
+                            model = custList[i].Descr1,//规格型号
+                            fversion = "",//版本号
+                            //ext.FErpClsID == "配置类" ? 0 : ext.FErpClsID == "自制" ? 1 : ext.FErpClsID == "委外" ? 2 : ext.FErpClsID == "外购" ? 3 : ext.FErpClsID == "虚拟" ? 4 : ext.FErpClsID == "费用" ? 5 : ext.FErpClsID == "服务" ? 6 : -1;
+                            //erp_cls = custList[i].PurMfg == "P" ? 3 : 1,//物料属性
+                            erp_cls = custList[i].ItemNum == "1.SD1.D.0056-F" || custList[i].ItemNum == "1.ZC1.D.0001" || custList[i].ItemNum == "1.BW1.D.0030" ? 1 : 3,
+                            //erp_cls_name = custList[i].PurMfg == "P" ? "外购" : "自制",//物料属性名称
+                            erp_cls_name = custList[i].ItemNum == "1.SD1.D.0056-F" || custList[i].ItemNum == "1.ZC1.D.0001" || custList[i].ItemNum == "1.BW1.D.0030" ? "自制" : "外购",
+                            unit = custList[i].UM,//单位
+                            item_level = 0,//物料等级
+                            source = "",//来源
+                            iskeyitem = custList[i].IsMainMas ? 1 : 0,//是否关键件
+                            net_weight = (decimal)custList[i].NetWeight,//净重
+                            maund = custList[i].NetWeightUM,//重量单位
+                            length = (decimal)custList[i].Length,//长度
+                            width = (decimal)custList[i].Width,//宽度
+                            height = (decimal)custList[i].Height,//高度
+                            allowpur = custList[i].PurMfg == "P" ? 1 : 0,//允许采购
+                            allowsale = 1,//允许销售
+                            allowmanu = custList[i].PurMfg == "L" ? 1 : 0,//允许生产
+                            allowout = 1,//允许委外
+                            allowbatch = custList[i].LotSerialControl ? 1 : 0,//批号管理
+                            allowserial = custList[i].LotSerialControl ? 1 : 0,//序列号管理
+                            photo = "",//图片
+                            enable_warning = 1,//启用预警
+                            factory_id = 1001,
+                            tenant_id = 1000,
+                            IsDeleted = false,
+                            clean_leadtime = custList[i].MFGMTTR,
+                            is_clean= custList[i].IssuePolicy ? 1 : 0,
+                            batch_manager = custList[i].LotSerialControl ? 1 : 0,
+                            minorderqty = custList[i].MinOrd,
+                            minpackqty = 1,
+                            ordissu_days = 1,
+                            transportation_leadtime = 3,
+                            stock_leadtime = 1,
+                            production_leadtime = 4,
+                            order_leadtime = 4,
+
+                            fix_leadtime = 1,
+                            order_inter_val = 1,
+                            lead_time = 1,
+                            bat_change_economy = 1,
+                            total_tqq = 1,
+                            order_point = 1,
+                            secinv = 1,
+                            secinv_ratio = 1,
+                            self_inspection_date = 1,
+                            Warehousing_date = 1,
+                            Shipping_date = 3,
+                        });
+                        srm_purchaseAdd.Add(new srm_purchase(help.NextId())
+                        {
+                            icitem_id = itemId,
+                            icitem_name = custList[i].Descr,
+                            sourcelist_number = "HYQD12064",
+                            supplier_id = 10101000051,
+                            supplier_number = "",
+                            supplier_name = "广州市伟正金属构件有限公司",
+                            purchgroup = "",
+                            purcher = "",
+                            purchase_unit = "",
+                            netpurchase_price = 1,
+                            taxrate = 0.13m,
+                            currency_type = 1,
+                            order_rector_name = "",
+                            order_rector_num = "",
+                            factory_code = "",
+                            order_dept = "",
+                            order_price = 13,
+                            sale_price = 130,
+                            qty_min = 10,
+                            batch_append_qty = 10,
+                            factory_id = 1001,
+                            tenant_id = 1000,
+                            IsDeleted = false
+                        });
+                    }
+                }
+            }
+            _businessDbContext.BulkInsert(ItemsAdd);
+            _businessDbContext.BulkInsert(srm_purchaseAdd);
+        }*/
 
         //public void SyncBom()
         //{

+ 9 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/ItemMaster.cs

@@ -71,7 +71,16 @@ namespace Business.Domain
         public string DefaultShelf { get; set; }
         public decimal? MaxOrd { get; set; }
         public decimal? MinOrd { get; set; }
+        /// <summary>
+        /// 前处理天数
+        /// </summary>
         public decimal MFGMTTR { get; set; }
+        /// <summary>
+        /// 是否前处理
+        /// </summary>
+        [Comment("是否前处理")]
+        public bool IssuePolicy { get; set; }
+
         /// <summary>
         /// 是否有效:1-有效;0-无效
         /// </summary>

+ 6 - 0
MicroServices/Business/Business.Domain/StructuredDB/MES/IC/NbrMaster.cs

@@ -147,5 +147,11 @@ namespace Business.Domain
         /// </summary>
         [Comment("修改人")]
         public string UpdateUser { get; set; }
+
+        /// <summary>
+        /// 前处理领料单 =PrevProcess
+        /// </summary>
+        [Comment("前处理领料单")]
+        public string TransType { get; set; }
     }
 }