Parcourir la source

生成日计划调整:未来日计划提前投产,将改日计划计划日期改为当天,计划数量改为当天的排产数量

heteng il y a 2 ans
Parent
commit
34ed63523d

+ 49 - 0
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -522,6 +522,55 @@ namespace Business.ResourceExamineManagement
                     List<string> sczWorkords = workOrds.Where(p => p.Status.ToUpper() == "W").Select(p=>p.WorkOrd).ToList();
                     if (sczWorkords.Any())
                     {
+                        //获取计划日期在当前日期之后且已投产的日计划,将其计划开工日期改为当天
+                        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>();
+                        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);
+                                }
+                                //更新日期
+                                wlItem.PlanDate = scheTime.Date;
+                                //更新数量
+                                var info = periodSequenceDtls.FirstOrDefault(p=>p.WorkOrds == wlItem.WorkOrds && p.PlanDate == scheTime.Date && p.Op == wlItem.Op);
+                                if (info != null)
+                                {
+                                    wlItem.OrdQty = info.OrdQty;
+                                }
+                            }
+                            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;
+                                }
+                            }
+                            //更新过期日计划的计划开工日期
+                            if (wlSequenceDets.Any())
+                            {
+                                _periodSequenceDet.Update(wlSequenceDets);
+                            }
+                            if (wlSchedules.Any())
+                            {
+                                _scheduleResultOpMaster.Update(wlSchedules);
+                            }
+                        }
                         //删除当前日期下一天开始的工单排产记录
                         _periodSequenceDet.Delete(p => sczWorkords.Contains(p.WorkOrds) && p.PlanDate > scheTime.Date && p.Domain == domain && p.OrdQty != 0);
                         _scheduleResultOpMaster.Delete(p => sczWorkords.Contains(p.WorkOrd) && p.WorkDate > scheTime.Date && p.Domain == domain);