Bladeren bron

排产调整:删除未投产且计划开始时间小于当前时间的工单排产记录;工单未投产,预估数量为0;后续工序计划开始时间处理。

heteng 2 jaren geleden
bovenliggende
commit
134e076545

+ 17 - 4
MicroServices/Business/Business.Application/ResourceExamineManagement/ProductionScheduleAppService.cs

@@ -276,6 +276,15 @@ namespace Business.ResourceExamineManagement
             //正常工单
             var zcWorkOrds = workOrds.Where(p => string.IsNullOrEmpty(p.Typed)).ToList();
 
+            //先删除计划开工时间在当前日期之前且状态不为"w"的工单日计划
+            List<WorkOrdMaster> delWorks = workOrds.Where(p => p.OrdDate < scheTime && p.Status.ToUpper() != "W").ToList();
+            if (delWorks.Any())
+            {
+                _periodSequenceDet.Delete(p => delWorks.Select(m=>m.WorkOrd).Contains(p.WorkOrds));
+                _scheduleResultOpMaster.Delete(p => delWorks.Select(m => m.WorkOrd).Contains(p.WorkOrd));
+                _workOrdSetupTimeRecord.Delete(p=> delWorks.Select(m => m.WorkOrd).Contains(p.WorkOrd));
+            }
+
             //2、获取数据
             //获取工单工艺路径数据
             List<WorkOrdRouting> workOrdRoutings = _workOrdRouting.Select(p => workOrds.Select(m => m.WorkOrd).Contains(p.WorkOrd) && p.ParentOp == 0 && p.Domain == domain && p.Status != "C" && p.IsActive);
@@ -378,7 +387,7 @@ namespace Business.ResourceExamineManagement
                 //计算开始排产时间或者上次报工时间到当前时间点的预估产能
                 decimal sumTimes = 0m;
                 //工单没有报工记录
-                if (curOp.Last == null)
+                if (curOp.Last == null && item.Status.ToUpper() == "W")
                 {
                     if (curRecord == null)
                     {
@@ -835,7 +844,7 @@ namespace Business.ResourceExamineManagement
                         //计算开始排产时间或者上次报工时间到当前时间点的预估产能
                         decimal sumWorkTimes = 0m;
                         //工单没有报工记录
-                        if (curOp.Last == null)
+                        if (curOp.Last == null && item.Status.ToUpper() == "W")
                         {
                             if (curRecord == null)
                             {
@@ -4215,7 +4224,7 @@ namespace Business.ResourceExamineManagement
 
             //计算上次报工到当前时间点的预估生产数量,如果没有报工记录,则计算产线准备时间完成到当前时间点的预估生产数量
             decimal planQty = 0m;
-            if (routing.Last == null && restTime < 0)
+            if (routing.Last == null && restTime < 0 && workOrd.Status.ToUpper() == "W")
             {
                 //工序没有报工,使用产线准备完成之后到当前时间点剩余时长计算预估生产数量
                 planQty = Math.Floor(Math.Abs(restTime) * rate);
@@ -4540,6 +4549,10 @@ namespace Business.ResourceExamineManagement
             {
                 var curLine = lines.FirstOrDefault(p => p.Line == curRecord.Line);
                 if (curLine != null) {
+                    //产线工作日历:当前产线的工作日历 + 默认工作日历
+                    var curCalendars = calendars.Where(p => p.ProdLine == curLine.Line || string.IsNullOrEmpty(p.ProdLine)).ToList();
+                    var curQtyDtls = qualityLines.Where(p => p.ProdLine == curLine.Line).ToList();
+                    scheTime = CalcActStartTime(curLine.Line, scheTime, curCalendars, curQtyDtls);
                     startDto.RecID = curLine.RecID;
                     startDto.Line = curLine.Line;
                     startDto.StartTime = scheTime;
@@ -4636,7 +4649,7 @@ namespace Business.ResourceExamineManagement
 
             //计算上次报工到当前时间点的预估生产数量,如果没有报工记录,则计算产线准备时间完成到当前时间点的预估生产数量
             decimal planQty = 0m;
-            if (routing.Last == null && restTime < 0)
+            if (routing.Last == null && restTime < 0 && workOrd.Status.ToUpper() == "W")
             {
                 //工序没有报工,使用产线准备完成之后到当前时间点剩余时长计算预估生产数量
                 planQty = Math.Floor(Math.Abs(restTime) * rate);