浏览代码

排产记录今天数据新增

Pengxy 1 年之前
父节点
当前提交
85bcfefd86

+ 47 - 5
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -416,10 +416,11 @@ namespace Business.ResourceExamineManagement
             //更新当天日计划的计划数量,排产数量
             foreach (var item in periodSequenceDtls)
             {
-                item.UDeci5 = item.OrdQty;
+                //item.UDeci5 = item.OrdQty;
                 //获取历史排产数据
                 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;
+                //item.OrdQty = curDtl == null ? item.OrdQty : curDtl.OrdQty;
+                item.UDeci5 = curDtl == null ? item.OrdQty : curDtl.OrdQty;
             }
 
             using (TransactionScope scope = new TransactionScope())
@@ -459,6 +460,9 @@ namespace Business.ResourceExamineManagement
                         //需要删除的日计划
                         List<PeriodSequenceDet> delSequenceDets = new List<PeriodSequenceDet>();
                         List<ScheduleResultOpMaster> delScheduleResults = new List<ScheduleResultOpMaster>();
+                        //需要新增的日计划
+                        List<PeriodSequenceDet> inSequenceDets = new List<PeriodSequenceDet>();
+                        List<ScheduleResultOpMaster> inScheduleResults = new List<ScheduleResultOpMaster>();
                         PeriodSequenceDet seqInfo = new PeriodSequenceDet();
                         ScheduleResultOpMaster schInfo = new ScheduleResultOpMaster();
                         foreach (var gdh in sczWorkords)
@@ -487,6 +491,7 @@ namespace Business.ResourceExamineManagement
 
                                     //获取提前投产的日计划
                                     var opSchs = wlSchedules.Where(p => p.WorkOrd == gdh && p.Op == op && opSeqs.Select(m => m.PlanDate).Contains(p.WorkDate)).ToList();
+                                    if (!opSchs.Any()) continue;
                                     schInfo = opSchs[0];
                                     string strScheTime = scheTime.Date.ToString("yyyy-MM-dd");
                                     schInfo.WorkDate = scheTime.Date;
@@ -505,6 +510,31 @@ namespace Business.ResourceExamineManagement
                                     upSequenceDets.Add(seqInfo);
                                 }
                             }
+                            
+                            //今天未投产的计划清空
+                            var delp = dtSequenceDets.Where(p => string.IsNullOrEmpty(p.Status) && p.WorkOrds==gdh).ToList();
+                            if (delp.Any())
+                            {
+                                //删除今天的
+                                delSequenceDets.AddRange(delp);
+                                var delr = dtScheduleResults.Where(p => p.WorkOrd == gdh && delp.Select(d => d.Op).Contains(p.Op)).ToList();
+                                delScheduleResults.AddRange(delr);
+                                //同一个工序有下达记录则不进行新增
+                                var pc= dtSequenceDets.Where(p => !string.IsNullOrEmpty(p.Status) && p.WorkOrds == gdh).ToList();
+                                delp = delp.Where(d=> !pc.Select(p=>p.Op).Contains(d.Op)).ToList();
+                                //新增今天的
+                                inSequenceDets.AddRange(periodSequenceDtls.Where(p=>p.WorkOrds==gdh && p.PlanDate== scheTime.Date && delp.Select(d => d.Op).Contains(p.Op)));
+                                inScheduleResults.AddRange(scheduleMasters.Where(p => p.WorkOrd == gdh && p.WorkDate == scheTime.Date && delp.Select(d => d.Op).Contains(p.Op)));
+                            }
+                            //无计划的今天的工序新增
+                            var inss = dtScheduleResults.Where(p => p.WorkOrd == gdh).ToList();
+                            var ins = periodSequenceDtls.Where(p => p.WorkOrds == gdh && p.PlanDate == scheTime.Date && !inss.Select(n=>n.Op).Contains(p.Op)).ToList();
+                            if (ins.Any())
+                            {
+                                //新增今天的
+                                inSequenceDets.AddRange(ins);
+                                inScheduleResults.AddRange(scheduleMasters.Where(p => p.WorkOrd == gdh && p.WorkDate == scheTime.Date && ins.Select(d => d.Op).Contains(p.Op)));
+                            }
                         }
                         //更新提前投产的日计划
                         if (upSequenceDets.Any())
@@ -524,14 +554,22 @@ namespace Business.ResourceExamineManagement
                         {
                             _scheduleResultOpMaster.Delete(delScheduleResults);
                         }
-
+                        //新增当天的日计划
+                        if (inSequenceDets.Any())
+                        {
+                            _periodSequenceDet.Insert(inSequenceDets);
+                        }
+                        if (inScheduleResults.Any())
+                        {
+                            _scheduleResultOpMaster.Insert(inScheduleResults);
+                        }
                         //删除当前日期下一天开始的工单排产记录
                         _periodSequenceDet.Delete(p => sczWorkords.Contains(p.WorkOrds) && p.PlanDate > scheTime.Date && p.Domain == domain);
                         _scheduleResultOpMaster.Delete(p => sczWorkords.Contains(p.WorkOrd) && p.WorkDate > scheTime.Date && p.Domain == domain);
 
                         //保存下一天的日计划数据
-                        _periodSequenceDet.Insert(periodSequenceDtls.Where(p => sczWorkords.Contains(p.WorkOrds) && p.PlanDate >= scheTime.Date).ToList());
-                        _scheduleResultOpMaster.Insert(scheduleMasters.Where(p => sczWorkords.Contains(p.WorkOrd) && p.WorkDate >= scheTime.Date).ToList());
+                        _periodSequenceDet.Insert(periodSequenceDtls.Where(p => sczWorkords.Contains(p.WorkOrds) && p.PlanDate > scheTime.Date).ToList());
+                        _scheduleResultOpMaster.Insert(scheduleMasters.Where(p => sczWorkords.Contains(p.WorkOrd) && p.WorkDate > scheTime.Date).ToList());
 
                     }
                     //未投产的工单,当前日期及以后的排产记录全部删除
@@ -705,6 +743,10 @@ namespace Business.ResourceExamineManagement
         /// <param name="allResults">产线占用记录</param>
         public void LineSchedule(WorkOrdMaster workOrd, List<WorkOrdRouting> workOrdRoutings, List<ProdLineDetail> prodLines,List<PeriodSequenceDet> periodsDet, List<ScheduleResultOpMaster> scheduleResults, List<ScheduleResultOpMaster> allResults)
         {
+            if (workOrd.WorkOrd == "M500080907")
+            {
+                var isy = 1;
+            }
             //生产周期
             List<PeriodSequenceDet> curSequences = new List<PeriodSequenceDet>();
             //排产明细