Bläddra i källkod

日计划调整:工单根据领料单前拉逻辑调整

heteng 2 år sedan
förälder
incheckning
d520e9b490

+ 54 - 8
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -147,6 +147,11 @@ namespace Business.ResourceExamineManagement
         /// </summary>
         private ISqlRepository<NbrMaster> _nbrMaster;
 
+        /// <summary>
+        /// 领料单明细
+        /// </summary>
+        private ISqlRepository<NbrDetail> _nbrDetail;
+
         /// <summary>
         /// 工单工序开始准备时间记录
         /// </summary>
@@ -206,7 +211,8 @@ namespace Business.ResourceExamineManagement
             ISqlRepository<ScheduleExceptionMaster> scheduleExceptionMaster,
             ISqlRepository<NbrMaster> nbrMaster,
             IRepository<mes_morder, long> mysql_mes_morder,
-            ISqlRepository<WorkOrdSetupTimeRecord> workOrdSetupTimeRecord
+            ISqlRepository<WorkOrdSetupTimeRecord> workOrdSetupTimeRecord,
+            ISqlRepository<NbrDetail> nbrDetail
             )
         {
             _itemMaster = itemMaster;
@@ -228,6 +234,7 @@ namespace Business.ResourceExamineManagement
             _scheduleExceptionMaster = scheduleExceptionMaster;
             _mysql_mes_morder = mysql_mes_morder;
             _workOrdSetupTimeRecord = workOrdSetupTimeRecord;
+            _nbrDetail = nbrDetail;
         }
         #endregion
 
@@ -269,6 +276,8 @@ namespace Business.ResourceExamineManagement
             scheTime = startTime;
             //获取工单领料单
             var nbrMasterList = _nbrMaster.Select(x => x.Domain == domain && x.Type.ToUpper() == "SM" && workOrds.Select(s => s.WorkOrd).Contains(x.WorkOrd)).ToList();
+            //获取领料单明细
+            var nbrDtlLists = _nbrDetail.Select(x => x.Domain == domain && nbrMasterList.Select(s => s.Nbr).Contains(x.Nbr)).ToList();
             workOrds = workOrds.OrderBy(p => p.Priority).ToList();
             //记录工单数据
             List<WorkPriorityDto> dbWorkOrds = workOrds.Select(p => new WorkPriorityDto { 
@@ -288,16 +297,53 @@ namespace Business.ResourceExamineManagement
                     ytc++;
                     continue;
                 }
-                var curNbrs = nbrMasterList.Where(p => p.WorkOrd == workOrds[i].WorkOrd).ToList();
-                //存在领料单:不需要前处理-领料单已关闭,需要前处理-状态为部分完成或者全部完成
-                if (curNbrs.Any() && !curNbrs.Exists(p => (p.TransType != "PrevProcess" && p.Status.ToUpper() != "C") || (p.TransType == "PrevProcess" && p.PretreatmentState != "completed" && p.PretreatmentState != "50")))
+                //需要前处理的领料单
+                var qclNbr = nbrMasterList.FirstOrDefault(p => p.WorkOrd == workOrds[i].WorkOrd && p.TransType == "PrevProcess");
+                //不需要前处理的领料单
+                var bqclNbr = nbrMasterList.FirstOrDefault(p => p.WorkOrd == workOrds[i].WorkOrd && p.TransType != "PrevProcess");
+                List<NbrDetail> bqclNbrDtls = new List<NbrDetail>();
+                if (bqclNbr!= null)
+                {
+                    bqclNbrDtls = nbrDtlLists.Where(p => p.Nbr == bqclNbr.Nbr).ToList();
+                }
+                //存在领料单:不需要前处理-领料单明细存在已关闭物料,需要前处理-状态为部分完成或者全部完成
+                if (qclNbr != null && bqclNbr != null)
+                {
+                    if ((qclNbr.PretreatmentState == "50" || qclNbr.PretreatmentState == "completed") && bqclNbrDtls.Exists(p=>p.Status.ToUpper() == "C"))
+                    {
+                        workOrds[i].Priority = ktc;
+                        ktc++;
+                        continue;
+                    }
+                    workOrds[i].Priority = bktc;
+                    bktc++;
+                    continue;
+                }
+                if (qclNbr != null && bqclNbr == null)
                 {
-                    workOrds[i].Priority = ktc;
-                    ktc++;
+                    if (qclNbr.PretreatmentState == "50" || qclNbr.PretreatmentState == "completed")
+                    {
+                        workOrds[i].Priority = ktc;
+                        ktc++;
+                        continue;
+                    }
+                    workOrds[i].Priority = bktc;
+                    bktc++;
+                    continue;
+                }
+                if (qclNbr == null && bqclNbr != null)
+                {
+                    if (bqclNbrDtls.Exists(p => p.Status.ToUpper() == "C"))
+                    {
+                        workOrds[i].Priority = ktc;
+                        ktc++;
+                        continue;
+                    }
+                    workOrds[i].Priority = bktc;
+                    bktc++;
                     continue;
                 }
-                //不存在领料单或者领料单未关闭或者前处理状态不为部分完成/全部完成
-                if (!curNbrs.Any() || curNbrs.Exists(p => (p.TransType != "PrevProcess" && p.Status.ToUpper() != "C") || (p.TransType == "PrevProcess" && p.PretreatmentState != "completed" && p.PretreatmentState != "50")))
+                if (qclNbr == null && bqclNbr == null)
                 {
                     workOrds[i].Priority = bktc;
                     bktc++;