|
|
@@ -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)
|
|
|
{
|