Ver Fonte

PR生成PO同时往MES同步

Murphy há 2 anos atrás
pai
commit
5029db48eb

+ 4 - 1
MicroServices/Business/Business.Application.Contracts/ResourceExamineManagement/Dto/PoActionListDto.cs

@@ -1,4 +1,5 @@
-using Business.Model.SRM;
+using Business.Model.MES.IC;
+using Business.Model.SRM;
 using Business.MongoModel.SRM;
 using Business.MongoModel.SRM;
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
@@ -15,5 +16,7 @@ namespace Business.ResourceExamineManagement.Dto
         public List<mo_srm_po_main> mopoMain { get; set; } = new List<mo_srm_po_main>();
         public List<mo_srm_po_main> mopoMain { get; set; } = new List<mo_srm_po_main>();
         public List<mo_srm_po_list> mopolist { get; set; } = new List<mo_srm_po_list>();
         public List<mo_srm_po_list> mopolist { get; set; } = new List<mo_srm_po_list>();
         public List<mo_srm_po_occupy> poOccupiesList { get; set; } = new List<mo_srm_po_occupy>();
         public List<mo_srm_po_occupy> poOccupiesList { get; set; } = new List<mo_srm_po_occupy>();
+        public List<PurOrdMaster> poMasterList { get; set; } = new List<PurOrdMaster>();
+        public List<PurOrdDetail> poDetailList { get; set; } = new List<PurOrdDetail>();
     }
     }
 }
 }

+ 154 - 46
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -296,6 +296,8 @@ namespace Business.ResourceExamineManagement
         private ISqlRepository<ItemMaster> _itemMaster;
         private ISqlRepository<ItemMaster> _itemMaster;
         private ISqlRepository<NbrMaster> _nbrMaster;
         private ISqlRepository<NbrMaster> _nbrMaster;
         private ISqlRepository<NbrDetail> _nbrDetail;
         private ISqlRepository<NbrDetail> _nbrDetail;
+        private ISqlRepository<PurOrdMaster> _purOrdMaster;
+        private ISqlRepository<PurOrdDetail> _purOrdDetail;
         private ISqlRepository<ItemPackMaster> _itemPackMaster;
         private ISqlRepository<ItemPackMaster> _itemPackMaster;
         /// <summary>
         /// <summary>
         /// 生产排产
         /// 生产排产
@@ -418,6 +420,8 @@ namespace Business.ResourceExamineManagement
             ISqlRepository<WorkOrdDetail> workOrdDetail,
             ISqlRepository<WorkOrdDetail> workOrdDetail,
             ISqlRepository<NbrMaster> nbrMaster,
             ISqlRepository<NbrMaster> nbrMaster,
             ISqlRepository<NbrDetail> nbrDetail,
             ISqlRepository<NbrDetail> nbrDetail,
+            ISqlRepository<PurOrdMaster> purOrdMaster,
+            ISqlRepository<PurOrdDetail> purOrdDetail,
             PriorityAppService priorityAppService,
             PriorityAppService priorityAppService,
             ISqlRepository<ProdLineDetail> prodLineDetail,
             ISqlRepository<ProdLineDetail> prodLineDetail,
             ISqlRepository<ShopCalendarWorkCtr> shopCalendarWorkCtr,
             ISqlRepository<ShopCalendarWorkCtr> shopCalendarWorkCtr,
@@ -488,19 +492,21 @@ namespace Business.ResourceExamineManagement
             _routingOpDetail = routingOpDetail;
             _routingOpDetail = routingOpDetail;
             _productStructureMaster = productStructureMaster;
             _productStructureMaster = productStructureMaster;
             _workOrdRouting = workOrdRouting;
             _workOrdRouting = workOrdRouting;
-            _workOrdMaster=workOrdMaster;
-            _workOrdDetail=workOrdDetail;
+            _workOrdMaster = workOrdMaster;
+            _workOrdDetail = workOrdDetail;
             _lineMaster = lineMaster;
             _lineMaster = lineMaster;
             _itemMaster = itemMaster;
             _itemMaster = itemMaster;
             _nbrMaster = nbrMaster;
             _nbrMaster = nbrMaster;
             _nbrDetail = nbrDetail;
             _nbrDetail = nbrDetail;
-            _priorityAppService= priorityAppService;
+            _purOrdMaster = purOrdMaster;
+            _purOrdDetail= purOrdDetail;
+            _priorityAppService = priorityAppService;
             _rf_serialnumber = rf_serialnumber;
             _rf_serialnumber = rf_serialnumber;
             _prodLineDetail = prodLineDetail;
             _prodLineDetail = prodLineDetail;
             _shopCalendarWorkCtr = shopCalendarWorkCtr;
             _shopCalendarWorkCtr = shopCalendarWorkCtr;
             _qualityLineWorkDetail = qualityLineWorkDetail;
             _qualityLineWorkDetail = qualityLineWorkDetail;
             _holidayMaster = holidayMaster;
             _holidayMaster = holidayMaster;
-            _productExamineAppService= productExamineAppService;
+            _productExamineAppService = productExamineAppService;
             _locationDetail = locationDetail;
             _locationDetail = locationDetail;
             _itemPackMaster = itemPackMaster;
             _itemPackMaster = itemPackMaster;
         }
         }
@@ -678,7 +684,7 @@ namespace Business.ResourceExamineManagement
                 //同步工单
                 //同步工单
                 CreateWorkOrdDates(moderlist, allRoutings, workOrds, workOrdRoutings, workOrdDetails);
                 CreateWorkOrdDates(moderlist, allRoutings, workOrds, workOrdRoutings, workOrdDetails);
             }
             }
-            
+
             using (TransactionScope scope = new TransactionScope())
             using (TransactionScope scope = new TransactionScope())
             {
             {
                 try
                 try
@@ -739,7 +745,8 @@ namespace Business.ResourceExamineManagement
                     }
                     }
                     scope.Complete();
                     scope.Complete();
                 }
                 }
-                catch (Exception e) {
+                catch (Exception e)
+                {
                     scope.Dispose();
                     scope.Dispose();
                     new NLogHelper("ResourceExamineAppService").WriteLog("ReceiveResult", "资源检查工单相关数据更新失败:" + e.Message, _currentTenant.Id.ToString());
                     new NLogHelper("ResourceExamineAppService").WriteLog("ReceiveResult", "资源检查工单相关数据更新失败:" + e.Message, _currentTenant.Id.ToString());
                     return e.Message;
                     return e.Message;
@@ -771,7 +778,8 @@ namespace Business.ResourceExamineManagement
                 AutoCreatePOFromPR(prmainlist, bangid, icitemlist, itemsupplierList, poaction);
                 AutoCreatePOFromPR(prmainlist, bangid, icitemlist, itemsupplierList, poaction);
                 using (TransactionScope scope = new TransactionScope())
                 using (TransactionScope scope = new TransactionScope())
                 {
                 {
-                    try {
+                    try
+                    {
                         await _srm_pr_main.InsertMany(prmainlist);
                         await _srm_pr_main.InsertMany(prmainlist);
                         _businessDbContext.BulkInsert(pr_mainlist);
                         _businessDbContext.BulkInsert(pr_mainlist);
                         if (poaction.mopoMain.Any())
                         if (poaction.mopoMain.Any())
@@ -795,6 +803,19 @@ namespace Business.ResourceExamineManagement
                             var poOccupies = ObjectMapper.Map<List<mo_srm_po_occupy>, List<srm_po_occupy>>(poaction.poOccupiesList);
                             var poOccupies = ObjectMapper.Map<List<mo_srm_po_occupy>, List<srm_po_occupy>>(poaction.poOccupiesList);
                             _businessDbContext.BulkInsert(poOccupies);
                             _businessDbContext.BulkInsert(poOccupies);
                         }
                         }
+
+                        if(poaction.poMasterList.Any())
+                        {
+                            _purOrdMaster.Insert(poaction.poMasterList);
+                            //快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
+                            List<string> nbrs = poaction.poMasterList.Select(a => a.PurOrd).ToList();
+                            var nbrList = _purOrdMaster.Select(a => a.Domain == "1001" && nbrs.Contains(a.PurOrd));
+                            poaction.poDetailList.ForEach(c =>
+                            {
+                                c.PurOrdRecID = nbrList.Where(a => a.PurOrd == c.PurOrd).First().RecID;
+                            });
+                            _purOrdDetail.Insert(poaction.poDetailList);
+                        }
                         scope.Complete();
                         scope.Complete();
                     }
                     }
                     catch (Exception e)
                     catch (Exception e)
@@ -943,7 +964,7 @@ namespace Business.ResourceExamineManagement
                     return e.Message;
                     return e.Message;
                 }
                 }
             }
             }
-            
+
             //清空快照数据
             //清空快照数据
             await ClearSnapShot(bangid);
             await ClearSnapShot(bangid);
             //return JsonConvert.SerializeObject(rtn);
             //return JsonConvert.SerializeObject(rtn);
@@ -1186,9 +1207,9 @@ namespace Business.ResourceExamineManagement
                     production_leadtime = x.production_leadtime,
                     production_leadtime = x.production_leadtime,
                     order_leadtime = x.order_leadtime,
                     order_leadtime = x.order_leadtime,
                     minorderqty = x.minorderqty,
                     minorderqty = x.minorderqty,
-                    put_integer=x.put_integer,
-                    minpackqty=x.minpackqty,
-                    ordissu_days=x.ordissu_days
+                    put_integer = x.put_integer,
+                    minpackqty = x.minpackqty,
+                    ordissu_days = x.ordissu_days
                 }).AsQueryable<ICItemLeadTimeDto>().ToList();
                 }).AsQueryable<ICItemLeadTimeDto>().ToList();
         }
         }
 
 
@@ -1324,7 +1345,7 @@ namespace Business.ResourceExamineManagement
                     podetail.mysql_id = help.NextId();
                     podetail.mysql_id = help.NextId();
                     podetail.po_id = po_Main.mysql_id;
                     podetail.po_id = po_Main.mysql_id;
                     podetail.po_billno = po_Main.po_billno;
                     podetail.po_billno = po_Main.po_billno;
-                    podetail.polist_row = podetaillist.Where(a=>a.po_billno== po_Main.po_billno).Count() + 1;
+                    podetail.polist_row = podetaillist.Where(a => a.po_billno == po_Main.po_billno).Count() + 1;
                     podetail.pr_id = item.mysql_id;
                     podetail.pr_id = item.mysql_id;
                     podetail.pr_billno = item.pr_billno;
                     podetail.pr_billno = item.pr_billno;
                     podetail.pr_purchase_id = po_Main.supplier_id;
                     podetail.pr_purchase_id = po_Main.supplier_id;
@@ -1515,6 +1536,49 @@ namespace Business.ResourceExamineManagement
             poaction.polist.AddRange(po_listlist);
             poaction.polist.AddRange(po_listlist);
             poaction.mopoMain.AddRange(polist);
             poaction.mopoMain.AddRange(polist);
             poaction.mopolist.AddRange(podetaillist);
             poaction.mopolist.AddRange(podetaillist);
+            List<PurOrdMaster> purOrdMasters = new List<PurOrdMaster>();
+            po_mainlist.ForEach(a =>
+            {
+                purOrdMasters.Add(new PurOrdMaster
+                {
+                    Domain = "1001",
+                    Potype = "po",
+                    PurOrd = a.po_billno,
+                    Buyer = a.po_purchaser,
+                    OrdDate = a.po_ssend_date,
+                    Curr = "CNY",
+                    Supp = a.supplier_no,
+                    Tax1 = a.po_tax_rate,
+                    Department = a.purchasing_orgname,
+                    CustPhone = a.suppliertelephone,
+                    CustAddress = a.supplierdddress,
+                    IsActive = true,
+                    CreateTime = a.create_time,
+                    UpdateTime = a.update_time
+                });
+            });
+            poaction.poMasterList.AddRange(purOrdMasters);
+            List<PurOrdDetail> purOrdDetails = new List<PurOrdDetail>();
+            po_listlist.ForEach(a =>
+            {
+                purOrdDetails.Add(new PurOrdDetail
+                {
+                    Domain = "1001",
+                    Potype = "po",
+                    PurOrd = a.po_billno,
+                    IsActive = true,
+                    CreateTime = a.create_time,
+                    UpdateTime = a.update_time,
+                    Line = a.polist_row,
+                    ItemNum = a.ItemNum,
+                    QtyOrded = a.qty,
+                    QtyReceived = a.rqty,
+                    PurCost = a.price,
+                    TaxRate = a.rate,
+                    DueDate = a.rarrdate
+                });
+            });
+            poaction.poDetailList.AddRange(purOrdDetails);
         }
         }
         private void AutoCreateWWPOFromPR(List<mo_srm_pr_main> list, long bangid, List<mo_ic_item> itemList, List<mo_srm_supplier> itemsupplierList, PoActionListDto poaction)
         private void AutoCreateWWPOFromPR(List<mo_srm_pr_main> list, long bangid, List<mo_ic_item> itemList, List<mo_srm_supplier> itemsupplierList, PoActionListDto poaction)
         {
         {
@@ -1761,6 +1825,49 @@ namespace Business.ResourceExamineManagement
             poaction.polist.AddRange(po_listlist);
             poaction.polist.AddRange(po_listlist);
             poaction.mopoMain.AddRange(polist);
             poaction.mopoMain.AddRange(polist);
             poaction.mopolist.AddRange(podetaillist);
             poaction.mopolist.AddRange(podetaillist);
+            List<PurOrdMaster> purOrdMasters = new List<PurOrdMaster>();
+            po_mainlist.ForEach(a =>
+            {
+                purOrdMasters.Add(new PurOrdMaster
+                {
+                    Domain = "1001",
+                    Potype = "pw",
+                    PurOrd = a.po_billno,
+                    Buyer = a.po_purchaser,
+                    OrdDate = a.po_ssend_date,
+                    Curr = "CNY",
+                    Supp = a.supplier_no,
+                    Tax1 = a.po_tax_rate,
+                    Department = a.purchasing_orgname,
+                    CustPhone = a.suppliertelephone,
+                    CustAddress = a.supplierdddress,
+                    IsActive = true,
+                    CreateTime = a.create_time,
+                    UpdateTime = a.update_time
+                });
+            });
+            poaction.poMasterList.AddRange(purOrdMasters);
+            List<PurOrdDetail> purOrdDetails = new List<PurOrdDetail>();
+            po_listlist.ForEach(a =>
+            {
+                purOrdDetails.Add(new PurOrdDetail
+                {
+                    Domain = "1001",
+                    Potype = "pw",
+                    PurOrd = a.po_billno,
+                    IsActive = true,
+                    CreateTime = a.create_time,
+                    UpdateTime = a.update_time,
+                    Line = a.polist_row,
+                    ItemNum = a.ItemNum,
+                    QtyOrded = a.qty,
+                    QtyReceived = a.rqty,
+                    PurCost = a.price,
+                    TaxRate = a.rate,
+                    DueDate = a.rarrdate
+                });
+            });
+            poaction.poDetailList.AddRange(purOrdDetails);
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -2092,12 +2199,12 @@ namespace Business.ResourceExamineManagement
             //产品物料编码
             //产品物料编码
             List<string> itemnums = pretreatments.Where(p => p.level == 1).Select(p => p.item_number).Distinct().ToList();
             List<string> itemnums = pretreatments.Where(p => p.level == 1).Select(p => p.item_number).Distinct().ToList();
             //产线明细
             //产线明细
-            prodLines = _prodLineDetail.Select(p=> itemnums.Contains(p.Part)).ToList();
+            prodLines = _prodLineDetail.Select(p => itemnums.Contains(p.Part)).ToList();
             //标准工序
             //标准工序
             routingOps = _routingOpDetail.Select(p => itemnums.Contains(p.RoutingCode)).ToList();
             routingOps = _routingOpDetail.Select(p => itemnums.Contains(p.RoutingCode)).ToList();
-            List<string> lines = prodLines.Select(p=>p.Line).Distinct().ToList();
+            List<string> lines = prodLines.Select(p => p.Line).Distinct().ToList();
             //工作日历
             //工作日历
-            calendarWorks = _shopCalendarWorkCtr.Select(p=>lines.Contains(p.ProdLine)).ToList();
+            calendarWorks = _shopCalendarWorkCtr.Select(p => lines.Contains(p.ProdLine)).ToList();
             //休息日
             //休息日
             qualityLineWorks = _qualityLineWorkDetail.Select(p => lines.Contains(p.ProdLine)).ToList();
             qualityLineWorks = _qualityLineWorkDetail.Select(p => lines.Contains(p.ProdLine)).ToList();
             //节假日
             //节假日
@@ -2124,7 +2231,7 @@ namespace Business.ResourceExamineManagement
             //物料提前期
             //物料提前期
             leadTimeList = GetLeadTime(icitemlist, param.tenantId, param.factoryId);//提前期列表
             leadTimeList = GetLeadTime(icitemlist, param.tenantId, param.factoryId);//提前期列表
             supplierList = GetSupplier(itemIds, param.tenantId, param.factoryId);//供应商列表
             supplierList = GetSupplier(itemIds, param.tenantId, param.factoryId);//供应商列表
-            
+
             _CalcBomViewAppService.leadTimeList = leadTimeList;
             _CalcBomViewAppService.leadTimeList = leadTimeList;
             _CalcBomViewAppService.supplierList = supplierList;
             _CalcBomViewAppService.supplierList = supplierList;
 
 
@@ -2138,7 +2245,7 @@ namespace Business.ResourceExamineManagement
             _CalcBomViewAppService.mordersList = mo_Mes_Morders;//工单
             _CalcBomViewAppService.mordersList = mo_Mes_Morders;//工单
             _CalcBomViewAppService.moentriesList = mo_Mes_Moentry;//工单子表
             _CalcBomViewAppService.moentriesList = mo_Mes_Moentry;//工单子表
             _CalcBomViewAppService.mooccupyAllList = mes_mooccupyList;//工单占用表
             _CalcBomViewAppService.mooccupyAllList = mes_mooccupyList;//工单占用表
-            
+
             _CalcBomViewAppService.srm_Po_Lists = poDetailList; //采购明细
             _CalcBomViewAppService.srm_Po_Lists = poDetailList; //采购明细
             _CalcBomViewAppService.srm_Po_Occupies = poOccupys; //采购占用表
             _CalcBomViewAppService.srm_Po_Occupies = poOccupys; //采购占用表
             _CalcBomViewAppService.ic_item_List = icitemlist; //物料表
             _CalcBomViewAppService.ic_item_List = icitemlist; //物料表
@@ -2269,10 +2376,10 @@ namespace Business.ResourceExamineManagement
             if (dbPeriodSequences.Any())
             if (dbPeriodSequences.Any())
             {
             {
                 //按照工单领料,一个工单一个领料单,之前是按照排产日期和产线分别领料
                 //按照工单领料,一个工单一个领料单,之前是按照排产日期和产线分别领料
-                foreach(var workord in workOrds)
+                foreach (var workord in workOrds)
                 {
                 {
                     Dictionary<string, decimal> dictItemQty = new Dictionary<string, decimal>();
                     Dictionary<string, decimal> dictItemQty = new Dictionary<string, decimal>();
-                    List<string> lines = dbPeriodSequences.Where(a=>a.WorkOrds==workord).Select(a => a.Line).Distinct().ToList();
+                    List<string> lines = dbPeriodSequences.Where(a => a.WorkOrds == workord).Select(a => a.Line).Distinct().ToList();
                     List<LineMaster> lineMasters = _lineMaster.Select(p => lines.Contains(p.Line) && p.Domain == "1001" && p.IsActive);
                     List<LineMaster> lineMasters = _lineMaster.Select(p => lines.Contains(p.Line) && p.Domain == "1001" && p.IsActive);
                     List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord).ItemNum);
                     List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord).ItemNum);
                     var childrenList = itemList.Select(a => a.ComponentItem).Distinct().ToList();
                     var childrenList = itemList.Select(a => a.ComponentItem).Distinct().ToList();
@@ -2287,7 +2394,7 @@ namespace Business.ResourceExamineManagement
                         Type = "SM",
                         Type = "SM",
                         Nbr = Nbr,
                         Nbr = Nbr,
                         Remark = "排产自动领料",
                         Remark = "排产自动领料",
-                        Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a=>a.PlanDate),
+                        Date = dbPeriodSequences.Where(a => a.WorkOrds == workord).Min(a => a.PlanDate),
                         //ProdLine = item.Line,
                         //ProdLine = item.Line,
                         Status = "",
                         Status = "",
                         WorkOrd = workord,
                         WorkOrd = workord,
@@ -2306,13 +2413,13 @@ namespace Business.ResourceExamineManagement
                     {
                     {
                         var find = itemLocList?.Find(c => c.ItemNum == a.ComponentItem);
                         var find = itemLocList?.Find(c => c.ItemNum == a.ComponentItem);
                         string LocationTo = "";
                         string LocationTo = "";
-                        if (find!=null)
+                        if (find != null)
                         {
                         {
-                            LocationTo=find.Location;
+                            LocationTo = find.Location;
                         }
                         }
                         //相同物料汇总
                         //相同物料汇总
                         var itemComponent = nbrDetailList.Find(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem);
                         var itemComponent = nbrDetailList.Find(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem);
-                        if (itemComponent==null)
+                        if (itemComponent == null)
                         {
                         {
                             nbrDetailList.Add(new NbrDetail
                             nbrDetailList.Add(new NbrDetail
                             {
                             {
@@ -2325,8 +2432,8 @@ namespace Business.ResourceExamineManagement
                                 LocationFrom = LocationTo,
                                 LocationFrom = LocationTo,
                                 LocationTo = "",
                                 LocationTo = "",
                                 WorkOrd = workord,
                                 WorkOrd = workord,
-                                QtyOrd =QtyOrdSum * a.Qty,
-                                CurrQtyOpened = QtyOrdSum * a.Qty ,
+                                QtyOrd = QtyOrdSum * a.Qty,
+                                CurrQtyOpened = QtyOrdSum * a.Qty,
                                 Line = i,
                                 Line = i,
                                 IsActive = true,
                                 IsActive = true,
                                 CreateTime = DateTime.Now,
                                 CreateTime = DateTime.Now,
@@ -2339,13 +2446,13 @@ namespace Business.ResourceExamineManagement
                         }
                         }
                         else
                         else
                         {
                         {
-                            nbrDetailList.First( b=> b.Nbr == Nbr && b.ItemNum == a.ComponentItem).QtyOrd= itemComponent.QtyOrd+ QtyOrdSum * a.Qty;
+                            nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).QtyOrd = itemComponent.QtyOrd + QtyOrdSum * a.Qty;
                             nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).CurrQtyOpened = itemComponent.CurrQtyOpened + QtyOrdSum * a.Qty;
                             nbrDetailList.First(b => b.Nbr == Nbr && b.ItemNum == a.ComponentItem).CurrQtyOpened = itemComponent.CurrQtyOpened + QtyOrdSum * a.Qty;
                         }
                         }
                     });
                     });
-                    nbrDetailList.ForEach(a => 
+                    nbrDetailList.ForEach(a =>
                     {
                     {
-                        if(a.Nbr==Nbr)
+                        if (a.Nbr == Nbr)
                         {
                         {
                             var find = itemLocList?.Find(c => c.ItemNum == a.ItemNum);
                             var find = itemLocList?.Find(c => c.ItemNum == a.ItemNum);
                             var packfind = itemPackList?.Find(c => c.ItemNum == a.ItemNum);
                             var packfind = itemPackList?.Find(c => c.ItemNum == a.ItemNum);
@@ -2364,7 +2471,7 @@ namespace Business.ResourceExamineManagement
                     //var items = _mysql_ic_item.GetListAsync(a => itemKeys.Contains(a.number) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
                     //var items = _mysql_ic_item.GetListAsync(a => itemKeys.Contains(a.number) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
                     //var itemIds = items.Select(b => b.Id).ToList();
                     //var itemIds = items.Select(b => b.Id).ToList();
                     //var leadTimes = GetLeadTime(itemIds, 1000, 1001).Max(a=>a.ordissu_days.GetValueOrDefault());
                     //var leadTimes = GetLeadTime(itemIds, 1000, 1001).Max(a=>a.ordissu_days.GetValueOrDefault());
-                    decimal leadTimes=itemLocList.Select(a => a.MFGMTTR).Max();
+                    decimal leadTimes = itemLocList.Select(a => a.MFGMTTR).Max();
                     //没有维护备料提前期,默认取7天
                     //没有维护备料提前期,默认取7天
                     if (leadTimes > 0)
                     if (leadTimes > 0)
                     {
                     {
@@ -2377,12 +2484,12 @@ namespace Business.ResourceExamineManagement
                     //TODO:
                     //TODO:
                     //因为我们并没有模拟发料的过程,在自动生成领料单的时候就要扣减库存,实际业务不能这么做。
                     //因为我们并没有模拟发料的过程,在自动生成领料单的时候就要扣减库存,实际业务不能这么做。
                     //在有上料和追溯的系统,可以在扫码上料或报工时(从线边仓)扣减。或者在实际发料出库时扣减。
                     //在有上料和追溯的系统,可以在扫码上料或报工时(从线边仓)扣减。或者在实际发料出库时扣减。
-                    var locStock=_locationDetail.Select(a => itemKeys.Contains(a.ItemNum) && a.IsActive && a.Domain == "1001");
+                    var locStock = _locationDetail.Select(a => itemKeys.Contains(a.ItemNum) && a.IsActive && a.Domain == "1001");
                     locStock?.ForEach(a =>
                     locStock?.ForEach(a =>
                     {
                     {
                         nbrDetailList.ForEach(b =>
                         nbrDetailList.ForEach(b =>
                         {
                         {
-                            if(a.ItemNum==b.ItemNum && a.Location==b.LocationFrom && a.QtyOnHand - dictItemQty[a.ItemNum] > 0)
+                            if (a.ItemNum == b.ItemNum && a.Location == b.LocationFrom && a.QtyOnHand - dictItemQty[a.ItemNum] > 0)
                             {
                             {
                                 a.QtyOnHand = a.QtyOnHand - dictItemQty[a.ItemNum];
                                 a.QtyOnHand = a.QtyOnHand - dictItemQty[a.ItemNum];
                             }
                             }
@@ -2421,45 +2528,46 @@ namespace Business.ResourceExamineManagement
             List<ic_item_stock> mysqlStock = _mysql_ic_item_stock.GetListAsync(a => itemIds.Contains(a.Id) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
             List<ic_item_stock> mysqlStock = _mysql_ic_item_stock.GetListAsync(a => itemIds.Contains(a.Id) && a.factory_id == 1001 && a.tenant_id == 1000).Result;
             List<ic_item_stock> needAddList = new List<ic_item_stock>();
             List<ic_item_stock> needAddList = new List<ic_item_stock>();
 
 
-            foreach(var stockWMS in groupList)
+            foreach (var stockWMS in groupList)
             {
             {
                 foreach (var num in items)
                 foreach (var num in items)
                 {
                 {
-                    if (stockWMS.ItemNum==num.number)
+                    if (stockWMS.ItemNum == num.number)
                     {
                     {
                         var item = mysqlStock.Find(a => a.Id == num.Id);
                         var item = mysqlStock.Find(a => a.Id == num.Id);
-                        if(item!=null)
+                        if (item != null)
                         {
                         {
                             item.sqty = groupList.First(a => a.ItemNum == num.number).Qty;
                             item.sqty = groupList.First(a => a.ItemNum == num.number).Qty;
-                        }else
+                        }
+                        else
                         {
                         {
-                            ic_item_stock stock= new ic_item_stock();
+                            ic_item_stock stock = new ic_item_stock();
                             stock.GenerateNewId();
                             stock.GenerateNewId();
                             stock.factory_id = 1001;
                             stock.factory_id = 1001;
                             stock.tenant_id = 1000;
                             stock.tenant_id = 1000;
                             stock.icitem_id = num.Id;
                             stock.icitem_id = num.Id;
                             stock.icitem_name = num.name;
                             stock.icitem_name = num.name;
-                            stock.sqty= groupList.First(a => a.ItemNum == num.number).Qty;
+                            stock.sqty = groupList.First(a => a.ItemNum == num.number).Qty;
                         }
                         }
                         break;
                         break;
                     }
                     }
                 };
                 };
             }
             }
-            if(needAddList.Count>0)
+            if (needAddList.Count > 0)
             {
             {
                 _businessDbContext.BulkInsert(needAddList);
                 _businessDbContext.BulkInsert(needAddList);
             }
             }
             _businessDbContext.BulkUpdate(mysqlStock);
             _businessDbContext.BulkUpdate(mysqlStock);
         }
         }
         //循环获取子级物料编码,包括产品本身,有重复的结果去重即可
         //循环获取子级物料编码,包括产品本身,有重复的结果去重即可
-        public List<string> GetChildItemNumber(string itemNum,List<string> list)
+        public List<string> GetChildItemNumber(string itemNum, List<string> list)
         {
         {
             list.Add(itemNum);
             list.Add(itemNum);
-            var productStructures = _productStructureMaster.Select(p =>p.ParentItem== itemNum && p.Domain == "1001" && p.IsActive);
-            list.AddRange(productStructures.Select(a=>a.ComponentItem));
+            var productStructures = _productStructureMaster.Select(p => p.ParentItem == itemNum && p.Domain == "1001" && p.IsActive);
+            list.AddRange(productStructures.Select(a => a.ComponentItem));
             foreach (var item in productStructures)
             foreach (var item in productStructures)
             {
             {
-                if(item.StructureType.ToUpper()=="X")
+                if (item.StructureType.ToUpper() == "X")
                 {
                 {
                     GetChildItemNumber(item.ComponentItem, list);
                     GetChildItemNumber(item.ComponentItem, list);
                 }
                 }
@@ -2576,7 +2684,7 @@ namespace Business.ResourceExamineManagement
                 workOrd.IsActive = true;
                 workOrd.IsActive = true;
                 workOrd.IsConfirm = true;
                 workOrd.IsConfirm = true;
                 workOrds.Add(workOrd);
                 workOrds.Add(workOrd);
-                
+
                 //添加工单工艺路线数据
                 //添加工单工艺路线数据
                 var curRoutings = allRoutings.Where(p => p.RoutingCode == item.product_code).ToList();
                 var curRoutings = allRoutings.Where(p => p.RoutingCode == item.product_code).ToList();
                 foreach (var dtl in curRoutings)
                 foreach (var dtl in curRoutings)
@@ -2637,7 +2745,7 @@ namespace Business.ResourceExamineManagement
             }
             }
             //递归获取所有虚拟件对应的子物料
             //递归获取所有虚拟件对应的子物料
             RecursionProductStructure(itenNum, curPhantoms, rtnStructures);
             RecursionProductStructure(itenNum, curPhantoms, rtnStructures);
-            
+
             return rtnStructures;
             return rtnStructures;
         }
         }
 
 
@@ -2674,10 +2782,10 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         /// </summary>
         /// <param name="sentrys"></param>
         /// <param name="sentrys"></param>
         /// <param name="kittingTimes"></param>
         /// <param name="kittingTimes"></param>
-        public void CalcSuggestDate(List<crm_seorderentry> sentrys, List<KittingTimeDto> kittingTimes) 
+        public void CalcSuggestDate(List<crm_seorderentry> sentrys, List<KittingTimeDto> kittingTimes)
         {
         {
             //获取排产记录
             //获取排产记录
-            List<string> itemNums = sentrys.Select(p=>p.item_number).Distinct().ToList();
+            List<string> itemNums = sentrys.Select(p => p.item_number).Distinct().ToList();
             DateTime eralist = kittingTimes.Min(p => p.kitting_time).Date;
             DateTime eralist = kittingTimes.Min(p => p.kitting_time).Date;
             List<PeriodSequenceDet> periodSequences = _periodSequenceDet.Select(p => itemNums.Contains(p.ItemNum) && p.PlanDate >= eralist).ToList();
             List<PeriodSequenceDet> periodSequences = _periodSequenceDet.Select(p => itemNums.Contains(p.ItemNum) && p.PlanDate >= eralist).ToList();
 
 

+ 10 - 0
MicroServices/Business/Business.EntityFrameworkCore/EntityFrameworkCore/DOP/BusinessDbContext.cs

@@ -77,6 +77,16 @@ namespace Business.EntityFrameworkCore
         /// </summary>
         /// </summary>
         public DbSet<NbrDetail> NbrDetail { get; set; }
         public DbSet<NbrDetail> NbrDetail { get; set; }
 
 
+        /// <summary>
+        /// 采购主表
+        /// </summary>
+        public DbSet<PurOrdMaster> PurOrdMaster { get; set; }
+
+        /// <summary>
+        /// 采购明细表
+        /// </summary>
+        public DbSet<PurOrdDetail> PurOrdDetail { get; set; }
+
         /// <summary>
         /// <summary>
         /// 生产周期表
         /// 生产周期表
         /// </summary>
         /// </summary>

+ 142 - 0
MicroServices/Business/Bussiness.Model/MES/IC/PurOrdDetail.cs

@@ -0,0 +1,142 @@
+using Business.Model;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Business.Model.MES.IC
+{
+    /// <summary>
+    /// 采购订单明细表
+    /// </summary>
+    [Comment("采购订单明细表")]
+    public class PurOrdDetail
+    {
+        /// <summary>
+        /// 主键
+        /// </summary>
+        [Comment("主键")]
+        [Key]
+        public int RecID { get; set; }
+
+        public int PurOrdRecID { get; set; }
+        
+
+        /// <summary>
+        /// 域名
+        /// </summary>
+        [Comment("域名")]
+        public string? Domain { get; set; }
+
+        /// <summary>
+        /// 类型
+        /// </summary>
+        [Comment("类型")]
+        public string? Potype { get; set; }
+
+        /// <summary>
+        /// PO单号
+        /// </summary>
+        [Comment("PO单号")]
+        public string? PurOrd { get; set; }
+
+
+        /// <summary>
+        /// 行号
+        /// </summary>
+        [Comment("行号")]
+        public int? Line { get; set; }
+
+
+        /// <summary>
+        /// 物料编码
+        /// </summary>
+        [StringLength(100)]
+        [Comment("物料编码")]
+        public string? ItemNum { get; set; }
+
+        /// <summary>
+        /// 订单数量
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("订单数量")]
+        public decimal? QtyOrded { get; set; }
+
+        /// <summary>
+        /// 已收货数量
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("已收货数量")]
+        public decimal? QtyReceived { get; set; }
+
+        /// <summary>
+        /// 含税单价
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("含税单价")]
+        public decimal? PurCost { get; set; }
+
+        /// <summary>
+        /// 不含税单价
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("不含税单价")]
+        public decimal? StdCost { get; set; }
+        
+
+        /// <summary>
+        /// 税率
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("税率")]
+        public decimal? TaxRate { get; set; }
+
+
+
+        /// <summary>
+        /// 需求到货日期
+        /// </summary>
+        [Comment("需求到货日期")]
+        public DateTime? DueDate { get; set; }
+
+
+        /// <summary>
+        /// 单位
+        /// </summary>
+        [Comment("单位")]
+        public string? UM { get; set; }
+
+        /// <summary>
+        /// 是否有效:1-有效;0-无效
+        /// </summary>
+        [Comment("是否有效")]
+        public Boolean IsActive { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        [Comment("创建时间")]
+        public DateTime? CreateTime { get; set; }
+
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        [Comment("创建人")]
+        public string? CreateUser { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        [Comment("修改时间")]
+        public DateTime? UpdateTime { get; set; }
+
+        /// <summary>
+        /// 修改人
+        /// </summary>
+        [Comment("修改人")]
+        public string? UpdateUser { get; set; }
+    }
+}

+ 128 - 0
MicroServices/Business/Bussiness.Model/MES/IC/PurOrdMaster.cs

@@ -0,0 +1,128 @@
+using Business.Model;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Business.Model.MES.IC
+{
+    /// <summary>
+    /// 采购订单主表
+    /// </summary>
+    [Comment("采购订单主表")]
+    public class PurOrdMaster
+    {
+        /// <summary>
+        /// 主键
+        /// </summary>
+        [Comment("主键")]
+        [Key]
+        public int RecID { get; set; }
+
+        /// <summary>
+        /// 域名
+        /// </summary>
+        [Comment("域名")]
+        public string? Domain { get; set; }
+
+        /// <summary>
+        /// 类型
+        /// </summary>
+        [Comment("类型")]
+        public string? Potype { get; set; }
+
+        /// <summary>
+        /// PO单号
+        /// </summary>
+        [Comment("PO单号")]
+        public string? PurOrd { get; set; }
+
+        /// <summary>
+        /// 采购员工号
+        /// </summary>
+        [Comment("采购员工号")]
+        public string? Buyer { get; set; }
+
+
+        /// <summary>
+        /// 日期
+        /// </summary>
+        [Comment("日期")]
+        public DateTime? OrdDate { get; set; }
+
+        /// <summary>
+        /// 币别
+        /// </summary>
+        [Required]
+        [Comment("币别")]
+        public string? Curr { get; set; }
+
+        /// <summary>
+        /// 供应商编号
+        /// </summary>
+        [StringLength(80)]
+        [Comment("供应商编号")]
+        public string? Supp { get; set; }
+
+        /// <summary>
+        /// 税率
+        /// </summary>
+        [Precision(23, 10)]
+        [Comment("税率")]
+        public decimal? Tax1 { get; set; }
+
+        /// <summary>
+        /// 部门
+        /// </summary>
+        [Comment("部门")]
+        public string? Department { get; set; }
+
+        /// <summary>
+        /// 供应商联系人电话
+        /// </summary>
+        [StringLength(80)]
+        [Comment("供应商联系人电话")]
+        public string? CustPhone { get; set; }
+
+        /// <summary>
+        /// 供应地址
+        /// </summary>
+        [StringLength(200)]
+        [Comment("供应地址")]
+        public string? CustAddress { get; set; }
+
+
+        /// <summary>
+        /// 是否有效:1-有效;0-无效
+        /// </summary>
+        [Comment("是否有效")]
+        public Boolean IsActive { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        [Comment("创建时间")]
+        public DateTime? CreateTime { get; set; }
+
+        /// <summary>
+        /// 创建人
+        /// </summary>
+        [Comment("创建人")]
+        public string? CreateUser { get; set; }
+
+        /// <summary>
+        /// 创建时间
+        /// </summary>
+        [Comment("修改时间")]
+        public DateTime? UpdateTime { get; set; }
+
+        /// <summary>
+        /// 修改人
+        /// </summary>
+        [Comment("修改人")]
+        public string? UpdateUser { get; set; }
+    }
+}