heteng 3 年之前
父節點
當前提交
a0c95f6f9e
共有 1 個文件被更改,包括 19 次插入4 次删除
  1. 19 4
      MicroServices/Business/Business.Application/Quartz/ProductionScheduleAppService.cs

+ 19 - 4
MicroServices/Business/Business.Application/Quartz/ProductionScheduleAppService.cs

@@ -1,6 +1,7 @@
 using Business.Business.Dto;
 using Business.Core.Utilities;
 using Business.Dto;
+using Business.EntityFrameworkCore;
 using Business.ResourceExamineManagement.Dto;
 using Bussiness.EntityFrameworkCore.SqlRepositories;
 using Bussiness.Model.MES.IC;
@@ -112,6 +113,8 @@ namespace Business.Quartz
         /// </summary>
         private List<HolidayMaster> holidays;
 
+        private readonly BusinessDbContext _businessDbContext;
+
         #endregion
 
         #region 构造函数
@@ -130,7 +133,8 @@ namespace Business.Quartz
             ISqlRepository<ShopCalendarWorkCtr> shopCalendarWorkCtr,
             ISqlRepository<ScheduleExceptionMaster> scheduleExceptionMaster,
             ISqlRepository<QualityLineWorkDetail> qualityLineWorkDetail,
-            ISqlRepository<HolidayMaster> holidayMaster
+            ISqlRepository<HolidayMaster> holidayMaster,
+            BusinessDbContext businessDbContext
             )
         { 
             _itemMaster= itemMaster;
@@ -145,6 +149,7 @@ namespace Business.Quartz
             _scheduleExceptionMaster= scheduleExceptionMaster;
             _qualityLineWorkDetail= qualityLineWorkDetail;
             _holidayMaster = holidayMaster;
+            _businessDbContext = businessDbContext;
         }
         #endregion
 
@@ -201,6 +206,8 @@ namespace Business.Quartz
 
                 //工序预处理:确定每层级工序对应的产线
                 List<WorkOrdRoutingDto> routingDtos = ProcPretreatment(item, workOrdRoutings.Where(p => p.WorkOrd == item.WorkOrd).ToList(), prodLines, curSchedules);
+                
+                //排产前的数据校验
                 if (routingDtos.Count() == 0)//没有维护主工序
                 {
                     //记录排产异常原因
@@ -255,7 +262,15 @@ namespace Business.Quartz
 
                 //产线排产
                 LineSchedule(item, routingDtos.OrderBy(p => p.level).ToList(), periodSequenceDtls, scheduleMasters);
+
+                //更新工单表
+                item.Status = "w";
+                await _workOrdMaster.Update(item);
             }
+            //记录排产数据
+            await _businessDbContext.PeriodSequenceDet.BulkInsertAsync(periodSequenceDtls);
+            await _businessDbContext.ScheduleResultOpMaster.BulkInsertAsync(scheduleMasters);
+            await _businessDbContext.ScheduleExceptionMaster.BulkInsertAsync(scheduleExceptions);
         }
 
         /// <summary>
@@ -405,7 +420,7 @@ namespace Business.Quartz
                     }
                 }
             }
-
+            //记录排产结果
             periodsDet.AddRange(curSequences);
             scheduleResults.AddRange(curScheduleRsts);
         }
@@ -700,7 +715,7 @@ namespace Business.Quartz
             dto.ParentOp = lastOp.ParentOp;
             dto.level = 1;
             dto.Op = lastOp.OP;
-            //主工序对应的产线
+            //主工序对应的产线(目前只考虑一个产品对应一条产线的情况)
             var line = prodLines.Where(p => p.Part == lastOp.ItemNum && p.Op == lastOp.OP).FirstOrDefault();
             if (line != null) {
                 dto.Line = line.Line;
@@ -746,7 +761,7 @@ namespace Business.Quartz
                 dto.Op = lastOp.OP;
                 dto.ParentOp = lastOp.ParentOp;
                 dto.level = level + 1;
-                //当前层级工序对应的产线,子产线有多条,则取产能最大的那一条
+                //当前层级工序对应的产线
                 var maxRateLine = prodLines.Where(p => p.Part == lastOp.ItemNum && p.Op == lastOp.OP).OrderByDescending(p => p.Rate).FirstOrDefault();
                 if (maxRateLine != null)
                 {