Pārlūkot izejas kodu

Merge branch 'dev' of http://123.60.180.165:4647/ZZYDOP/DOPCore into dev

Murphy 2 gadi atpakaļ
vecāks
revīzija
999c7bd893

+ 51 - 160
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -792,7 +792,16 @@ namespace Business.ResourceExamineManagement
             rtn.item_stockoccupy_list = sklist;
 
             //检查结果写入数据库
-            var b_Examine_Results = ObjectMapper.Map<List<ExamineResult>, List<b_examine_result>>(rtn.examines);
+            await ExamineResultInsertDBAsync(rtn.examines);
+            
+            //清空快照数据
+            await ClearSnapShot(bangid);
+            return JsonConvert.SerializeObject("ok");
+        }
+
+        public async Task ExamineResultInsertDBAsync(List<ExamineResult> examines)
+        {
+            //检查结果写入数据库
             List<b_examine_result> examineList = new List<b_examine_result>();
             List<b_bom_child_examine> bomExamineList = new List<b_bom_child_examine>();
             List<b_mo_occupy> mooccupyList = new List<b_mo_occupy>();
@@ -801,7 +810,7 @@ namespace Business.ResourceExamineManagement
             List<b_purchase> purchaseList = new List<b_purchase>();
             List<b_purchase_occupy> purchaseoccupyList = new List<b_purchase_occupy>();
 
-            foreach (var ex in rtn.examines)
+            foreach (var ex in examines)
             {
                 var b_ex = ObjectMapper.Map<ExamineResult, b_examine_result>(ex);
                 b_ex.GenerateNewId(help.NextId());// = help.NextId();
@@ -884,7 +893,7 @@ namespace Business.ResourceExamineManagement
                     }
                 });
             }
-            using (var unitOfWork = _unitOfWorkManager.Begin(false,true))
+            using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
             {
                 try
                 {
@@ -916,20 +925,17 @@ namespace Business.ResourceExamineManagement
                     {
                         _businessBangDbContext.BulkInsert(purchaseoccupyList);
                     }
-                   await unitOfWork.CompleteAsync();
+                    await unitOfWork.CompleteAsync();
                 }
                 catch (Exception e)
                 {
                     new NLogHelper("ResourceExamineAppService").WriteLog("ReceiveResult", "资源检查计算结果相关数据更新失败:" + e.Message, _currentTenant.Id.ToString());
                     unitOfWork.Dispose();
-                    return e.Message;
                 }
             }
-            //清空快照数据
-            await ClearSnapShot(bangid);
-            return JsonConvert.SerializeObject("ok");
         }
 
+
         //PR手动合并
         public async Task<string> PrMerge(string ids)
         {
@@ -2770,25 +2776,24 @@ namespace Business.ResourceExamineManagement
                     morder.moentry_sys_stime = wod.OrdDate;
                     morder.moentry_sys_etime = wod.DueDate;
 
-                    var exa = rtn.examines.Find(s => s.morder_no == wod.WorkOrd);
-                    exa.latest_times = morder.moentry_sys_etime.GetValueOrDefault().Date.AddDays(1);
+                    /*var exa = rtn.examines.Find(s => s.morder_no == wod.WorkOrd);
+                    exa.latest_times = morder.moentry_sys_etime.GetValueOrDefault().Date.AddDays(1);*/
                     //根据排产后得日期,反推PR。
                     var wkordPrList = prmainlist.Where(s => s.pr_mono == wod.WorkOrd).ToList();
 
-                    //反算所有的PR,根据时间减去提前期
+                    //反算所有的PR,根据时间减去提前期   //按最大预处理时间倒排
+                    var moIcitems = icitemlist.Where(s => wkordPrList.Select(c => c.icitem_id).Contains(s.Id)).ToList();
+                    var maxTime = moIcitems.Max(s => s.clean_leadtime.GetValueOrDefault());
                     wkordPrList.ForEach(pr =>
                     {
                         var ts = pr.pr_parrive_date - pr.pr_psend_date;
-                        var icitem = icitemlist.Find(s => s.mysql_id == pr.icitem_id);
-                        if (icitem != null)
+                        //var icitem = icitemlist.Find(s => s.mysql_id == pr.icitem_id);
+                        //var bce = exa.BomChildExamineList.Find(s => s.item_id == pr.icitem_id && s.num == pr.num);
+                        pr.pr_sarrive_date = morder.moentry_sys_stime.Value.AddDays((double)(0 - maxTime - 1));//到货还需要向前推 物料的预处理时间。到货日期必须提前一天到
+                        pr.pr_ssend_date = pr.pr_sarrive_date.GetValueOrDefault().AddDays(0 - ts.Value.Days);
+                        if (pr.pr_ssend_date < DateTime.Now.Date.AddDays(1))
                         {
-                            var bce = exa.BomChildExamineList.Find(s => s.item_id == pr.icitem_id && s.num == pr.num);
-                            pr.pr_sarrive_date = morder.moentry_sys_stime.Value.AddDays((double)(0 - bce.pre_time.GetValueOrDefault() - 1 - icitem.clean_leadtime.GetValueOrDefault()));//到货还需要向前推 物料的预处理时间。到货日期必须提前一天到
-                            pr.pr_ssend_date = pr.pr_sarrive_date.GetValueOrDefault().AddDays(0 - ts.Value.Days);
-                            if (pr.pr_ssend_date < DateTime.Now.Date.AddDays(1))
-                            {
-                                pr.pr_ssend_date = DateTime.Now.Date.AddDays(1);
-                            }
+                            pr.pr_ssend_date = DateTime.Now.Date.AddDays(1);
                         }
                     });
                 }
@@ -2816,142 +2821,10 @@ namespace Business.ResourceExamineManagement
                         new NLogHelper("ResourceExamineAppService").WriteLog("OrderKittingCheck", "工单检查数据更新失败:" + e.Message, _currentTenant.Id.ToString());
                     }
                 }
-
-                //检查结果写入数据库
-                var b_Examine_Results = ObjectMapper.Map<List<ExamineResult>, List<b_examine_result>>(rtn.examines);
-                List<b_examine_result> examineList = new List<b_examine_result>();
-                List<b_bom_child_examine> bomExamineList = new List<b_bom_child_examine>();
-                List<b_mo_occupy> mooccupyList = new List<b_mo_occupy>();
-                List<b_mo_order> moorderList = new List<b_mo_order>();
-                List<b_ooder> ooderList = new List<b_ooder>();
-                List<b_purchase> purchaseList = new List<b_purchase>();
-                List<b_purchase_occupy> purchaseoccupyList = new List<b_purchase_occupy>();
-
-                foreach (var ex in rtn.examines)
-                {
-                    var b_ex = ObjectMapper.Map<ExamineResult, b_examine_result>(ex);
-                    b_ex.GenerateNewId(help.NextId());// = help.NextId();
-                    if (_CalcBomViewAppService.mordersInsertList.Any())
-                    {
-                        var moentry = _CalcBomViewAppService.moentriesInsertList.Where(s => s.soentry_id == b_ex.sentry_id).FirstOrDefault();
-                        if (moentry != null)
-                        {
-                            var sentryMo = _CalcBomViewAppService.mordersInsertList.Where(s => s.mysql_id == moentry.moentry_moid).FirstOrDefault();
-                            if (sentryMo != null)
-                            {
-                                b_ex.morder_id = sentryMo.mysql_id;
-                                b_ex.morder_no = sentryMo.morder_no;
-                            }
-                        }
-                    }
-                    b_ex.create_time = DateTime.Now;
-                    b_ex.company_id = param.company_id;
-                    b_ex.factory_id = param.factoryId;
-                    examineList.Add(b_ex);
-                    ex.BomChildExamineList.ForEach(s =>
-                    {
-                        var bc_ex = ObjectMapper.Map<BomChildExamineDto, b_bom_child_examine>(s);
-                        bc_ex.GenerateNewId(help.NextId());
-                        bc_ex.examine_id = b_ex.Id;
-                        bc_ex.company_id = param.company_id;
-                        bc_ex.factory_id = param.factoryId;
-                        bc_ex.create_time = DateTime.Now;
-                        bomExamineList.Add(bc_ex);
-
-                        if (s.mo_occupy_list != null)
-                        {
-                            var olist = ObjectMapper.Map<List<mo_occupy>, List<b_mo_occupy>>(s.mo_occupy_list);
-                            olist.ForEach(o =>
-                            {
-                                o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
-                                o.factory_id = param.factoryId;
-                            });
-                            mooccupyList.AddRange(olist);
-                        }
-                        if (s.make_list != null)
-                        {
-                            var mlist = ObjectMapper.Map<List<moorder>, List<b_mo_order>>(s.make_list);
-                            mlist.ForEach(o =>
-                            {
-                                o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
-                                o.factory_id = param.factoryId;
-                            });
-                            moorderList.AddRange(mlist);
-                        }
-                        if (s.subcontracting_list != null)
-                        {
-                            var slist = ObjectMapper.Map<List<ooder>, List<b_ooder>>(s.subcontracting_list);
-                            slist.ForEach(o =>
-                            {
-                                o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
-                                o.factory_id = param.factoryId;
-                            });
-                            ooderList.AddRange(slist);
-                        }
-                        if (s.purchase_list != null)
-                        {
-                            var plist = ObjectMapper.Map<List<purchase>, List<b_purchase>>(s.purchase_list);
-                            plist.ForEach(o =>
-                            {
-                                o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
-                                o.factory_id = param.factoryId;
-                            });
-                            purchaseList.AddRange(plist);
-                        }
-                        if (s.purchase_occupy_list != null)
-                        {
-                            var purlist = ObjectMapper.Map<List<purchase_occupy>, List<b_purchase_occupy>>(s.purchase_occupy_list);
-                            purlist.ForEach(o =>
-                            {
-                                o.bom_child_examine_id = bc_ex.Id; o.company_id = param.company_id;
-                                o.factory_id = param.factoryId;
-                            });
-                            purchaseoccupyList.AddRange(purlist);
-                        }
-                    });
-                }
-                using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
-                {
-                    try
-                    {
-                        if (examineList.Any())
-                        {
-                            _businessBangDbContext.BulkInsert(examineList);
-                        }
-                        if (bomExamineList.Any())
-                        {
-                            _businessBangDbContext.BulkInsert(bomExamineList.OrderBy(s => s.num_order).ToList());
-                        }
-                        if (mooccupyList.Any())
-                        {
-                            _businessBangDbContext.BulkInsert(mooccupyList);
-                        }
-                        if (moorderList.Any())
-                        {
-                            _businessBangDbContext.BulkInsert(moorderList);
-                        }
-                        if (ooderList.Any())
-                        {
-                            _businessBangDbContext.BulkInsert(ooderList);
-                        }
-                        if (purchaseList.Any())
-                        {
-                            _businessBangDbContext.BulkInsert(purchaseList);
-                        }
-                        if (purchaseoccupyList.Any())
-                        {
-                            _businessBangDbContext.BulkInsert(purchaseoccupyList);
-                        }
-                        await unitOfWork.CompleteAsync();
-                    }
-                    catch (Exception e)
-                    {
-                        new NLogHelper("ResourceExamineAppService").WriteLog("OrderKittingCheck", "工单检查资源检查计算结果数据更新失败:" + e.Message, _currentTenant.Id.ToString());
-                        unitOfWork.Dispose();
-                    }
-                }
+                
             }
-
+            //检查结果写入数据库
+            await ExamineResultInsertDBAsync(examines);
             //清空快照数据
             await ClearSnapShot(bangid);
             return rtn;
@@ -3151,29 +3024,47 @@ namespace Business.ResourceExamineManagement
         {
             if (dbPeriodSequences.Any())
             {
+                List<string> AllLines = dbPeriodSequences.Where(a => workOrdMasters.Select(b=>b.WorkOrd).Contains(a.WorkOrds)).Select(a => a.Line).Distinct().ToList();
+                List<LineMaster> AllLineMasters = _lineMaster.Select(p => AllLines.Contains(p.Line) && p.Domain == workOrdMasters[0].Domain && p.IsActive);
+
+
                 //按照工单领料,一个工单一个领料单,之前是按照排产日期和产线分别领料
                 foreach (var workord in workOrdMasters)
                 {
                     Dictionary<string, decimal> dictItemQty = new Dictionary<string, decimal>();
                     List<string> lines = dbPeriodSequences.Where(a => a.WorkOrds == workord.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 = AllLineMasters.Where(p => lines.Contains(p.Line) && p.Domain == workord.Domain && p.IsActive).ToList();
                     List<ProductStructureMaster> itemList = GetProductStructure(dbPeriodSequences.First(a => a.WorkOrds == workord.WorkOrd).ItemNum);
                     var childrenList = itemList.Select(a => a.ComponentItem).Distinct().ToList();
-                    List<ItemMaster> itemLocList = _itemMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == "1001" && p.IsActive).Distinct().ToList();
-                    List<ItemPackMaster> itemPackList = _itemPackMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == "1001" && p.IsActive).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)).Result;
+                    //获取预处理提前期最大值
+                    decimal cleanTime = 0;
+                    if (dopIcitems.Any())
+                    {
+                        cleanTime = dopIcitems.Max(s => s.clean_leadtime.GetValueOrDefault());
+                    }
+                    List<ItemPackMaster> itemPackList = _itemPackMaster.Select(p => childrenList.Contains(p.ItemNum) && p.Domain == workord.Domain && p.IsActive).Distinct().ToList();
                     var Nbr = GetMaxSerialNumber(417416915624005);
                     //根据某一产线汇总即该工单的总数
                     decimal QtyOrdSum = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd && a.Line == lines[0]).Sum(a => a.OrdQty.GetValueOrDefault());
                     string LocationTo= lineMasters.FirstOrDefault()?.Location;
+                    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;
+                    }
                     nbrMasterList.Add(new NbrMaster
                     {
                         Domain = "1001",
                         Type = "SM",
                         Nbr = Nbr,
                         Remark = "下达自动领料",
-                        Date = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Min(a => a.PlanDate),
+                        //Date = dbPeriodSequences.Where(a => a.WorkOrds == workord.WorkOrd).Min(a => a.PlanDate),
                         //ProdLine = item.Line,
-                        EffDate = workord.OrdDate.GetValueOrDefault().Date.AddDays(-1),
+                        EffDate = eff,
+                        Date = start,
                         Status = "",
                         WorkOrd = workord.WorkOrd,
                         QtyOrd = QtyOrdSum,