فهرست منبع

Merge branch 'dev' of http://123.60.180.165:4647/ZZYDOP/DOPCore into dev

tangdi 2 سال پیش
والد
کامیت
5054728fe5

+ 31 - 53
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -3521,69 +3521,46 @@ namespace Business.ResourceExamineManagement
                     //最后一天的产能全部占用或只能占用一部分
                     else
                     {
-                        //剩余生产时长(分钟)
-                        decimal workTime = sumTimes;
-                        //排产开始时间位于哪个时间段
-                        var curPoint = workPoints.Find(p => p.StartPoint <= workStartTime && workStartTime <= p.EndPoint);
-                        //结束时间位于时间段
-                        var lastPoint = new LineWorkPointDto();
-                        TimeSpan span = curPoint.EndPoint - workStartTime;
-                        //当前工作时间段的有效生产时间
-                        decimal effMins = (decimal)span.TotalMinutes;
+                        //结束时间
                         DateTime workEndTime = workStartTime;
-                        if (effMins >= workTime)//当前工作时间段即可满足产能
+                        //需要排产时长=剩余生产时长(分钟) + 清场时长 
+                        decimal workTime = sumTimes + item.WaitTime;
+                        //当天可用时长满足生产时长+清场时长
+                        if (dto.EffTime > workTime)
                         {
-                            workEndTime = workStartTime.AddMinutes((double)workTime);
-                        }
-                        else
-                        {
-                            //获取后续生产时间段
-                            var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
-                            //剩余需要工作时长
-                            decimal nextMins = workTime - effMins;
-                            foreach (var p in nextPoints)
+                            //排产开始时间位于哪个时间段
+                            var curPoint = workPoints.Find(p => p.StartPoint <= workStartTime && workStartTime <= p.EndPoint);
+                            TimeSpan span = curPoint.EndPoint - workStartTime;
+                            //当前工作时间段的有效生产时间
+                            decimal effMins = (decimal)span.TotalMinutes;
+                            if (effMins >= workTime)//当前工作时间段即可满足产能
                             {
-                                if (p.WorkMinutes >= nextMins)
-                                {
-                                    //记录结束时间位于哪个时间段
-                                    lastPoint = p;
-                                    workEndTime = p.StartPoint.AddMinutes((double)nextMins);
-                                    break;
-                                }
-                                nextMins -= p.WorkMinutes;
+                                workEndTime = workStartTime.AddMinutes((double)workTime);
                             }
-                        }
-                        //计算清场时间
-                        //剩余可用工作时长(分钟)
-                        decimal remainTime = CalcRemainWorkTime(workEndTime,workPoints);
-                        //剩余可用工作时长满足清场时长
-                        if (remainTime >= item.WaitTime)
-                        {
-                            //清场需要时长(分钟)
-                            decimal needTime = item.WaitTime;
-                            //获取排产结束时间所处以及之后的生产时间段
-                            var nextPoints = workPoints.Where(p => p.Level >= lastPoint.Level).OrderBy(p => p.Level).ToList();
-                            //处理第一个时间段的开始时间
-                            nextPoints[0].StartPoint = workEndTime;
-                            foreach (var p in nextPoints)
+                            else
                             {
-                                span = p.EndPoint - p.StartPoint;
-                                //当前工作时间段的有效生产时间
-                                effMins = (decimal)span.TotalMinutes;
-                                if (effMins >= needTime)
+                                //获取后续生产时间段
+                                var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
+                                //剩余需要工作时长
+                                decimal nextMins = workTime - effMins;
+                                foreach (var p in nextPoints)
                                 {
-                                    workEndTime = p.StartPoint.AddMinutes((double)needTime);
-                                    break;
+                                    if (p.WorkMinutes >= nextMins)
+                                    {
+                                        workEndTime = p.StartPoint.AddMinutes((double)nextMins);
+                                        break;
+                                    }
+                                    nextMins -= p.WorkMinutes;
                                 }
-                                needTime -= effMins;
                             }
                         }
-                        //剩余可用工作时长不能满足清场时长
-                        else
-                        {
-                            decimal needTime = item.WaitTime - remainTime;
-                            workEndTime.AddMinutes((double)needTime);
+                        //当天可用时长满足生产时长,但是不满足清场时长
+                        else {
+                            //剩余清场时长
+                            decimal needTime = workTime - dto.EffTime;
+                            workEndTime = dto.EndTime.AddMinutes((double)needTime);
                         }
+
                         //记录生产周期
                         periodsDet.Add(new PeriodSequenceDet
                         {
@@ -3615,6 +3592,7 @@ namespace Business.ResourceExamineManagement
                         });
                         sumTimes = 0;
                         item.QtyWorked = item.QtyOrded;
+                        item.Worked = item.LbrVar;
                     }
                 }
             }