Browse Source

日计划调整:未来日计划前拉调整,如果当天有日计划,则合并

heteng 2 years ago
parent
commit
deb52834e5

+ 32 - 23
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -525,50 +525,59 @@ namespace Business.ResourceExamineManagement
                         //获取计划日期在当前日期之后且已投产的日计划,将其计划开工日期改为当天
                         List<PeriodSequenceDet> wlSequenceDets = _periodSequenceDet.Select(p => p.Domain == domain  && sczWorkords.Contains(p.WorkOrds) && p.Status.ToUpper() == "W" && p.PlanDate > scheTime.Date).ToList();
                         List<ScheduleResultOpMaster> wlSchedules = new List<ScheduleResultOpMaster>();
+                        //获取当天的日计划
+                        List<PeriodSequenceDet> dtSequenceDets = _periodSequenceDet.Select(p => p.Domain == domain && sczWorkords.Contains(p.WorkOrds) && p.PlanDate == scheTime.Date).ToList();
+                        List<ScheduleResultOpMaster> dtScheduleResults = _scheduleResultOpMaster.Select(p => p.Domain == domain && sczWorkords.Contains(p.WorkOrd) && p.WorkDate == scheTime.Date).ToList();
+                        //需要更新的日计划
+                        List<PeriodSequenceDet> upSequenceDets = new List<PeriodSequenceDet>();
+                        List<ScheduleResultOpMaster> upScheduleResults = new List<ScheduleResultOpMaster>();
                         if (wlSequenceDets.Any())
                         {
                             var wlWorkords = wlSequenceDets.Select(p => p.WorkOrds).ToList();
                             var wlDate = wlSequenceDets.Select(p => p.PlanDate).ToList();
                             var wlOps = wlSequenceDets.Select(p => p.Op).ToList();
-
                             //更新计划日期为当前日期
                             foreach (var wlItem in wlSequenceDets)
                             {
                                 var curSche = _scheduleResultOpMaster.Select(p => p.Domain == domain && p.WorkOrd == wlItem.WorkOrds && p.WorkDate == wlItem.PlanDate && p.Op == wlItem.Op).FirstOrDefault();
                                 if (curSche != null)
                                 {
-                                    wlSchedules.Add(curSche);
+                                    //如果当天有日计划,则只需要更新计划数量
+                                    var cInfo = dtScheduleResults.FirstOrDefault(p => p.WorkOrd == wlItem.WorkOrds && p.WorkDate == scheTime.Date && p.Op == wlItem.Op);
+                                    if (cInfo != null)
+                                    {
+                                        cInfo.WorkQty = cInfo.WorkQty + curSche.WorkQty;
+                                        upScheduleResults.Add(cInfo);
+                                    }
+                                    else {
+                                        string strScheTime = scheTime.Date.ToString("yyyy-MM-dd");
+                                        curSche.WorkDate = scheTime.Date;
+                                        curSche.WorkStartTime = Convert.ToDateTime(curSche.WorkStartTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(curSche.WorkStartTime.ToString("yyyy-MM-dd"), strScheTime));
+                                        curSche.WorkEndTime = Convert.ToDateTime(curSche.WorkEndTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(curSche.WorkEndTime.ToString("yyyy-MM-dd"), strScheTime));
+                                        upScheduleResults.Add(curSche);
+                                    }
                                 }
-                                //更新日期
-                                wlItem.PlanDate = scheTime.Date;
-                                //更新数量
-                                var info = periodSequenceDtls.FirstOrDefault(p=>p.WorkOrds == wlItem.WorkOrds && p.PlanDate == scheTime.Date && p.Op == wlItem.Op);
+                                //如果当天有日计划,则只需要更新状态和计划数量
+                                var info = dtSequenceDets.FirstOrDefault(p=>p.WorkOrds == wlItem.WorkOrds && p.PlanDate == scheTime.Date && p.Op == wlItem.Op);
                                 if (info != null)
                                 {
-                                    wlItem.OrdQty = info.OrdQty;
+                                    info.OrdQty = info.OrdQty + wlItem.OrdQty;
+                                    info.Status = wlItem.Status;
+                                    upSequenceDets.Add(info);
                                 }
-                            }
-                            string strScheTime = scheTime.Date.ToString("yyyy-MM-dd");
-                            foreach (var wlItem in wlSchedules)
-                            {
-                                wlItem.WorkDate = scheTime.Date;
-                                wlItem.WorkStartTime = Convert.ToDateTime(wlItem.WorkStartTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(wlItem.WorkStartTime.ToString("yyyy-MM-dd"), strScheTime));
-                                wlItem.WorkEndTime = Convert.ToDateTime(wlItem.WorkEndTime.ToString("yyyy-MM-dd HH:mm:ss").Replace(wlItem.WorkEndTime.ToString("yyyy-MM-dd"), strScheTime));
-                                //更新数量
-                                var info = scheduleMasters.FirstOrDefault(p => p.WorkOrd == wlItem.WorkOrd && p.WorkDate == scheTime.Date && p.Op == wlItem.Op);
-                                if (info != null)
-                                {
-                                    wlItem.WorkQty = info.WorkQty;
+                                else { //当天没有日计划,则更新计划日期
+                                    wlItem.PlanDate = scheTime.Date;
+                                    upSequenceDets.Add(wlItem);
                                 }
                             }
                             //更新过期日计划的计划开工日期
-                            if (wlSequenceDets.Any())
+                            if (upSequenceDets.Any())
                             {
-                                _periodSequenceDet.Update(wlSequenceDets);
+                                _periodSequenceDet.Update(upSequenceDets);
                             }
-                            if (wlSchedules.Any())
+                            if (upScheduleResults.Any())
                             {
-                                _scheduleResultOpMaster.Update(wlSchedules);
+                                _scheduleResultOpMaster.Update(upScheduleResults);
                             }
                         }
                         //删除当前日期下一天开始的工单排产记录