|
|
@@ -580,7 +580,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//特殊工单待排产时长增加新增的特殊工单生产时长
|
|
|
sumTsTimes += secWOMasters.Sum(p => p.LbrVar) * 60;
|
|
|
}
|
|
|
- if (dto.EffTime >= sumTsTimes)//当天的可用产能满足特殊工单生产时长
|
|
|
+ if (dto.EffTime >= sumTsTimes)//当天的可用生产时长满足特殊工单生产时长
|
|
|
{
|
|
|
DateTime beginTime = workStartTime;
|
|
|
DateTime endTime = dto.EndTime;
|
|
|
@@ -604,7 +604,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = needTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -660,6 +660,7 @@ namespace Business.ResourceExamineManagement
|
|
|
beginTime = endTime;
|
|
|
//工单排产完成,排产时长=工单工作时长
|
|
|
item.Worked = item.LbrVar;
|
|
|
+ item.QtyWorked = item.QtyOrded;
|
|
|
sumTsTimes -= needTime;
|
|
|
}
|
|
|
if (dto.EffTime == sumTsTimes)//当天产能完全占用
|
|
|
@@ -689,7 +690,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//特殊工单待排产时长增加新增带排产特殊工单生产时长
|
|
|
sumTsTimes += secWOMasters.Sum(p => p.LbrVar) * 60;
|
|
|
}
|
|
|
- else {
|
|
|
+ else {//当天可用生产时长大于特殊工单生产时长
|
|
|
sumTsTimes = 0;//排产完毕,特殊工单时长置0
|
|
|
//处理workStartTime
|
|
|
workStartTime = endTime;
|
|
|
@@ -697,11 +698,14 @@ namespace Business.ResourceExamineManagement
|
|
|
if (endTime == curPoint.EndPoint)
|
|
|
{
|
|
|
var nextPoint = workPoints.Find(p => p.Level == curPoint.Level + 1);
|
|
|
- workStartTime = nextPoint.StartPoint;
|
|
|
+ if (nextPoint != null)
|
|
|
+ {
|
|
|
+ workStartTime = nextPoint.StartPoint;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- else//当天的可用产能不满足特殊工单生产时长
|
|
|
+ else//当天的可用产能不满足特殊工单生产时长,则当天产能全部排特殊工单
|
|
|
{
|
|
|
decimal residueTime = dto.EffTime;//当天产能剩余产能(分钟)
|
|
|
DateTime beginTime = workStartTime;//排产开始时间
|
|
|
@@ -728,7 +732,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = needTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -771,6 +775,15 @@ namespace Business.ResourceExamineManagement
|
|
|
CreateTime = DateTime.Now
|
|
|
});
|
|
|
beginTime = endTime;
|
|
|
+ curPoint = workPoints.Find(p => p.StartPoint <= endTime && endTime <= p.EndPoint);
|
|
|
+ if (endTime == curPoint.EndPoint)
|
|
|
+ {
|
|
|
+ var nextPoint = workPoints.Find(p => p.Level == curPoint.Level + 1);
|
|
|
+ if (nextPoint != null)
|
|
|
+ {
|
|
|
+ beginTime = nextPoint.StartPoint;
|
|
|
+ }
|
|
|
+ }
|
|
|
//当前工单已排产完成,已排产时间=工单生产时长,已排产数量=工单数量
|
|
|
item.Worked = item.LbrVar;
|
|
|
item.QtyWorked = item.QtyWorked;
|
|
|
@@ -828,6 +841,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
//记录已排产特殊工单
|
|
|
ypcWorkOrds.AddRange(workDtos.Select(p => p.WorkOrd).ToList());
|
|
|
+
|
|
|
//正常工单排产
|
|
|
//正常工单产线已排产数量
|
|
|
decimal sumQty = 0m;
|
|
|
@@ -915,7 +929,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = needTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -980,12 +994,15 @@ namespace Business.ResourceExamineManagement
|
|
|
var point = workPoints.Find(p => p.StartPoint <= endTime && endTime <= p.EndPoint);
|
|
|
if (endTime == point.EndPoint)
|
|
|
{
|
|
|
- var nextPoint = workPoints.Find(p => p.Level == point.Level + 1);
|
|
|
- workStartTime = nextPoint.StartPoint;
|
|
|
+ var nextPoint = workPoints.FirstOrDefault(p => p.Level == point.Level + 1);
|
|
|
+ if (nextPoint != null)
|
|
|
+ {
|
|
|
+ workStartTime = nextPoint.StartPoint;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//剩余产能继续排正常工单
|
|
|
- sumAmount = dto.ProductQty - Math.Floor(dto.Rate * (lineStart.setupTime - sumTimes / 60 - sumTsTimes / 60));
|
|
|
+ sumAmount = dto.ProductQty - Math.Floor(dto.Rate * (lineStart.setupTime - (sumTimes + sumTsTimes) / 60));
|
|
|
//记录生产周期
|
|
|
curSequences.Add(new PeriodSequenceDet
|
|
|
{
|
|
|
@@ -1048,7 +1065,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = needTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -1090,6 +1107,15 @@ namespace Business.ResourceExamineManagement
|
|
|
WorkEndTime = endTime,
|
|
|
CreateTime = DateTime.Now
|
|
|
});
|
|
|
+ curPoint = workPoints.Find(p => p.StartPoint <= endTime && endTime <= p.EndPoint);
|
|
|
+ if (endTime == curPoint.EndPoint)
|
|
|
+ {
|
|
|
+ var nextPoint = workPoints.FirstOrDefault(p => p.Level == curPoint.Level + 1);
|
|
|
+ if (nextPoint != null)
|
|
|
+ {
|
|
|
+ endTime = nextPoint.StartPoint;
|
|
|
+ }
|
|
|
+ }
|
|
|
beginTime = endTime;
|
|
|
//当前工单已排产完成,已排产时间=工单生产时长,已排产数量=工单数量
|
|
|
item.Worked = item.LbrVar;
|
|
|
@@ -1211,7 +1237,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = workTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -1285,7 +1311,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = needTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -1370,7 +1396,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = needTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -1523,7 +1549,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = needTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -1588,8 +1614,11 @@ namespace Business.ResourceExamineManagement
|
|
|
var point = workPoints.Find(p => p.StartPoint <= endTime && endTime <= p.EndPoint);
|
|
|
if (endTime == point.EndPoint)
|
|
|
{
|
|
|
- var nextPoint = workPoints.Find(p => p.Level == point.Level + 1);
|
|
|
- workStartTime = nextPoint.StartPoint;
|
|
|
+ var nextPoint = workPoints.FirstOrDefault(p => p.Level == point.Level + 1);
|
|
|
+ if (nextPoint != null)
|
|
|
+ {
|
|
|
+ workStartTime = nextPoint.StartPoint;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//剩余产能继续排正常工单
|
|
|
@@ -1656,7 +1685,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = needTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -1698,6 +1727,15 @@ namespace Business.ResourceExamineManagement
|
|
|
WorkEndTime = endTime,
|
|
|
CreateTime = DateTime.Now
|
|
|
});
|
|
|
+ curPoint = workPoints.Find(p => p.StartPoint <= endTime && endTime <= p.EndPoint);
|
|
|
+ if (endTime == curPoint.EndPoint)
|
|
|
+ {
|
|
|
+ var nextPoint = workPoints.FirstOrDefault(p => p.Level == curPoint.Level + 1);
|
|
|
+ if (nextPoint != null)
|
|
|
+ {
|
|
|
+ endTime = nextPoint.StartPoint;
|
|
|
+ }
|
|
|
+ }
|
|
|
beginTime = endTime;
|
|
|
//当前工单已排产完成,已排产时间=工单生产时长,已排产数量=工单数量
|
|
|
item.Worked = item.LbrVar;
|
|
|
@@ -1820,7 +1858,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = workTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -1895,7 +1933,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = needTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -1980,7 +2018,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = needTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -2022,6 +2060,15 @@ namespace Business.ResourceExamineManagement
|
|
|
WorkEndTime = endTime,
|
|
|
CreateTime = DateTime.Now
|
|
|
});
|
|
|
+ curPoint = workPoints.Find(p => p.StartPoint <= endTime && endTime <= p.EndPoint);
|
|
|
+ if (endTime == curPoint.EndPoint)
|
|
|
+ {
|
|
|
+ var nextPoint = workPoints.FirstOrDefault(p=>p.Level == curPoint.Level +1);
|
|
|
+ if (nextPoint != null)
|
|
|
+ {
|
|
|
+ endTime = nextPoint.StartPoint;
|
|
|
+ }
|
|
|
+ }
|
|
|
beginTime = endTime;
|
|
|
//当前工单已排产完成,已排产时间=工单生产时长,已排产数量=工单数量
|
|
|
item.Worked = item.LbrVar;
|
|
|
@@ -2109,6 +2156,7 @@ namespace Business.ResourceExamineManagement
|
|
|
//当前产线的休息时间设置
|
|
|
var mlqtyWorkDtls = qualityLines.Where(p => p.ProdLine == item.ProdLine).ToList();
|
|
|
LineStartDto lineStart = new LineStartDto();
|
|
|
+ lineStart.RecID = 0;
|
|
|
lineStart.Line = item.ProdLine;
|
|
|
lineStart.Op = item.Op;
|
|
|
lineStart.StartTime = workStartTime;
|
|
|
@@ -2180,7 +2228,7 @@ namespace Business.ResourceExamineManagement
|
|
|
else
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//剩余需要工作时长
|
|
|
decimal nextMins = workTime - effMins;
|
|
|
foreach (var p in nextPoints)
|
|
|
@@ -2260,7 +2308,7 @@ namespace Business.ResourceExamineManagement
|
|
|
TimeSpan span = curPoint.EndPoint - startTime;
|
|
|
scheduledDto.EffTime = (decimal)span.TotalMinutes;
|
|
|
//获取后续工作时间段的有效工作时间
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).ToList();
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
foreach (var item in nextPoints)
|
|
|
{
|
|
|
span = item.EndPoint - item.StartPoint;
|
|
|
@@ -2507,7 +2555,7 @@ namespace Business.ResourceExamineManagement
|
|
|
startDto.Line = lines[i].Line;
|
|
|
startDto.setupTime = lines[i].SetupTime;
|
|
|
startDto.StartTime = startTime;
|
|
|
- startDto.Rate = lines[0].Rate;
|
|
|
+ startDto.Rate = lines[i].Rate;
|
|
|
startDto.Op = op;
|
|
|
}
|
|
|
}
|