tangdi 2 жил өмнө
parent
commit
0396df0686

+ 80 - 5
MicroServices/Business/Business.Application/ResourceExamineManagement/ResourceExamineAppService.cs

@@ -2184,14 +2184,53 @@ namespace Business.ResourceExamineManagement
                 Mes_Morders.ForEach(s => { s.moentry_sys_stime = DateTime.Now.Date.AddDays((double)lookDay + 1); });
                 List<string> monolist = Mes_Morders.Select(c => c.morder_no).ToList();
                 //清理PR的占用。
+                //如果PR没有转PO,则PR没有合并,就删除,有合并,就减少合并后的PR的数量。
+                var prlist = _mysql_srm_pr_main.GetListAsync(s => monolist.Contains(s.pr_mono)).Result;
+                List<srm_pr_main> alllist = new List<srm_pr_main>();
+                List<srm_pr_main> updatelist = new List<srm_pr_main>();
+                List<srm_pr_main> dellist = new List<srm_pr_main>();
+                RecursionGetDbPr2(prlist, alllist);
+                foreach (var pr in prlist)
+                {
+                    //找到没有关闭的PR,如果关联上的PR都是已关闭,则说明已经转了PO。
+                    var getPr = RerunPr(pr, alllist);
+                    if (getPr != null)
+                    {
+                        getPr.pr_aqty = getPr.pr_aqty - pr.pr_aqty;
+                        if (getPr.pr_aqty <= 0)
+                        {
+                            //删除这个pr,没有小于0则是更新
+                            dellist.Add(getPr);
+                        }
+                        else {
+                            updatelist.Add(getPr);
+                        }
+                    }
+                }
                 List<srm_po_occupy> occupy = await _mysql_srm_po_occupy.GetListAsync(s => monolist.Contains(s.morder_mo));
                 _businessDbContext.BulkDelete(occupy);
+                if (updatelist.Any())
+                {
+                    _businessDbContext.BulkUpdate(updatelist);
+                }
+                if (dellist.Any())
+                {
+                    _businessDbContext.BulkDelete(dellist);
+                }
 
-                //清理锁定期外的排程数据
-                _periodSequenceDet.Delete(s => monolist.Contains(s.WorkOrds));
-                _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
+                //清理锁定期外的排程数据.
+                var periodList = _periodSequenceDet.Select(s => monolist.Contains(s.WorkOrds));
+                if (periodList.Any())
+                {
+                    _periodSequenceDet.Delete(s => monolist.Contains(s.WorkOrds));
+                }
+                var schedulList = _scheduleResultOpMaster.Select(s => monolist.Contains(s.WorkOrd));
+                if (schedulList.Any())
+                {
+                    _scheduleResultOpMaster.Delete(s => monolist.Contains(s.WorkOrd));
+                }
                 //只走计划工单
-                await OrderKittingCheck(Mes_Morders, true);
+                var rtn = await OrderKittingCheck(Mes_Morders, true);
             }
             else {
                 return JsonConvert.SerializeObject("未查找到对应的计划工单,请联系管理员。");
@@ -2199,6 +2238,42 @@ namespace Business.ResourceExamineManagement
             return "ok";
         }
 
+        /// <summary>
+        /// 递归寻找PR,找到合并后的PR
+        /// </summary>
+        public void RecursionGetDbPr2(List<srm_pr_main> list, List<srm_pr_main> referlist)
+        {
+            List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => list.Select(c => c.refer_pr_billno).Contains(s.pr_billno)).Result;
+            if (prlist.Any())
+            {
+                referlist.AddRange(prlist);
+                RecursionGetDbPr2(prlist, referlist);
+            }
+        }
+
+        //找到没有关闭的PR,做数量的减少
+        public srm_pr_main RerunPr(srm_pr_main pr, List<srm_pr_main> referlist)
+        {
+            //如果当前PR已经关闭,则检查合并数据
+            if (pr.state == 0)
+            {
+                //已关闭,并且没有关联数据,则代表转PO了。
+                var refPr = referlist.Find(s => s.pr_billno == pr.refer_pr_billno);
+                //如果有关联,继续往下查
+                if (refPr != null)
+                {
+                    return RerunPr(refPr, referlist);
+                }
+                else {
+                    return null;
+                }
+            }
+            else {
+                return pr;
+            }
+        }
+
+
         /// <summary>
         /// 按未来N天工单齐套检查
         /// </summary>
@@ -2747,7 +2822,7 @@ 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>();

+ 1 - 1
MicroServices/Business/Business.Domain/StructuredDB/SRM/srm_pr_main.cs

@@ -179,7 +179,7 @@ namespace Business.Domain
         [Comment("单位")]
         public string pr_unit { get; set; }
         /// <summary>
-        /// 状态 0,关闭;1,新增;2,提交;3,未通过;4,评审通过
+        /// 状态 0,关闭;1,新增;    暂时不考虑这种状态,影响PR重新生成,如增加需调整PR代码。2,提交;3,未通过;4,评审通过
         /// </summary>
         [Comment("状态")]
         public int? state { get; set; }