Просмотр исходного кода

日计划生成后,自动下达5天的日计划

heteng 2 лет назад
Родитель
Сommit
e8138e27dd

+ 74 - 19
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -413,14 +413,6 @@ namespace Business.ResourceExamineManagement
                 }
             }
             
-            //取数开始时间为当前日期
-            DateTime beginDate = DateTime.Now.Date;
-            DateTime endDate = DateTime.Now.Date.AddDays(4);
-            //取三天内的日计划
-            var thePeriods = periodSequenceDtls.Where(p => p.PlanDate >= beginDate && p.PlanDate <= endDate).ToList();
-            var workordList = workOrds.Where(x => (x.Status.ToLower() == "r" || x.Status.ToLower() == "w") && thePeriods.Select(s => s.WorkOrds).Contains(x.WorkOrd)).ToList();
-            var theNbrMasters = nbrMasterList.Where(p => thePeriods.Select(s => s.WorkOrds).Contains(p.WorkOrd));
-
             //更新当天日计划的计划数量,排产数量
             foreach (var item in periodSequenceDtls)
             {
@@ -428,16 +420,6 @@ namespace Business.ResourceExamineManagement
                 //获取历史排产数据
                 var curDtl = dbPeriodSequences.FirstOrDefault(p =>p.OrdQty > 0 && p.Op == item.Op && p.WorkOrds == item.WorkOrds && p.Line == item.Line && p.PlanDate == item.PlanDate && p.PlanDate == scheTime.Date);
                 item.OrdQty = curDtl == null ? item.OrdQty : curDtl.OrdQty;
-                //未来三天的日计划(工单下达,且前处理完成)状态设为r
-                if (item.PlanDate >= beginDate && item.PlanDate <= endDate && workordList.Exists(p => p.WorkOrd == item.WorkOrds))
-                {
-                    //工单不需要前处理的领料单全部出库且工单需要前处理的领料单前处理完成,则日计划自动下达
-                    var curNbrs = theNbrMasters.Where(p => p.WorkOrd == item.WorkOrds).ToList();
-                    if (curNbrs.Any() && !curNbrs.Exists(p=>(p.TransType != "PrevProcess" && p.Status.ToLower() != "c") || (p.TransType == "PrevProcess" && p.Ufld1 != "completed" && p.Ufld1 !="50")))
-                    {
-                        item.Status = "r";
-                    }
-                }
             }
 
             using (TransactionScope scope = new TransactionScope())
@@ -578,6 +560,8 @@ namespace Business.ResourceExamineManagement
 
             //领料单重新处理
             AdjustNbrDate(workOrds);
+            //日计划自动下达
+            await ProductionDailyPlanAutoPublish(domain);
             return "OK";
         }
 
@@ -2072,6 +2056,77 @@ namespace Business.ResourceExamineManagement
                 }
             }
         }
-    
+
+        /// <summary>
+        /// 日计划自动发布
+        /// </summary>
+        public async Task<string> ProductionDailyPlanAutoPublish(string domain)
+        {
+            //取数开始时间为当前日期
+            DateTime startTime = DateTime.Now.Date;
+            DateTime endDate = DateTime.Now.Date.AddDays(6);
+
+            var periodList = _periodSequenceDet.Select(x => x.PlanDate >= startTime && x.PlanDate <= endDate && string.IsNullOrEmpty(x.Status) == true && x.Domain == domain).ToList();
+            if (periodList.Any())
+            {
+                try
+                {
+                    List<PeriodSequenceDet> updateList = new List<PeriodSequenceDet>();
+                    var workords = periodList.Select(s => s.WorkOrds);
+                    var workordList = _workOrdMaster.Select(x => x.Domain == domain && x.Status.ToLower() == "r" && workords.Contains(x.WorkOrd)).ToList();
+                    var nbrMasterList = _nbrMaster.Select(x => x.Domain == domain && x.Type == "SM" && workords.Contains(x.WorkOrd)).ToList();
+                    var nbrDetailList = _nbrDetail.Select(x => x.Domain == domain && x.Type == "SM" && workords.Contains(x.WorkOrd)).ToList();
+                    foreach (var work in workordList)
+                    {
+                        bool flag = false;
+                        var nbrlist = nbrMasterList.Where(s => s.WorkOrd == work.WorkOrd).ToList();
+                        if (nbrlist.Any())
+                        {
+                            flag = true;
+                            foreach (var nbr in nbrlist)
+                            {
+                                //还有未出库数据
+                                //如果有任意一个出库,则下达
+                                if (!nbrDetailList.Where(x => x.NbrRecID == nbr.RecID && x.Status.ToUpper() == "C").Any())
+                                {
+                                    flag = false;
+                                    break;
+                                }
+                                /*if (nbr.Status.ToLower() != "c")
+                                {
+                                    flag = false;
+                                    break;
+                                }*/
+                                //需要前处理,但是前处理还未完成
+                                if (nbr.TransType == "PrevProcess" && nbr.PretreatmentState != "completed" && nbr.PretreatmentState != "50")
+                                {
+                                    flag = false;
+                                    break;
+                                }
+                            }
+                        }
+                        if (flag)
+                        {
+                            var publish = periodList.Where(x => x.WorkOrds == work.WorkOrd).ToList();
+                            publish.ForEach(x =>
+                            {
+                                x.Status = "r";
+                            });
+                            updateList.AddRange(publish);
+                        }
+                    }
+                    if (updateList.Any())
+                    {
+                        _periodSequenceDet.Update(updateList);
+                    }
+                }
+                catch (Exception e)
+                {
+                    new NLogHelper("ResourceExamineAppService").WriteLog("ProductionDailyPlanAutoPublish", "日计划自动任务失败:" + e.Message, _currentTenant.Id.ToString());
+                    return "保存失败,请联系管理员。";
+                }
+            }
+            return "ok";
+        }
     }
 }