|
|
@@ -590,7 +590,8 @@ namespace Business.ResourceExamineManagement
|
|
|
Worked = 0,
|
|
|
QtyWorked = 0,
|
|
|
Op = curOp.OP,
|
|
|
- WaitTime = curOp.WaitTime * 60
|
|
|
+ WaitTime = curOp.WaitTime * 60,
|
|
|
+ PlanDate = item.OrdDate.Value
|
|
|
});
|
|
|
sumCleanTimes += curOp.WaitTime * 60;
|
|
|
}
|
|
|
@@ -638,7 +639,8 @@ namespace Business.ResourceExamineManagement
|
|
|
Worked = 0,
|
|
|
QtyWorked = 0,
|
|
|
Op = curOp.OP,
|
|
|
- WaitTime = curOp.WaitTime * 60
|
|
|
+ WaitTime = curOp.WaitTime * 60,
|
|
|
+ PlanDate = item.OrdDate.Value
|
|
|
});
|
|
|
sumCleanTimes += curOp.WaitTime * 60;
|
|
|
}
|
|
|
@@ -650,6 +652,8 @@ namespace Business.ResourceExamineManagement
|
|
|
lstCleanTime = secCleanTime;
|
|
|
}
|
|
|
}
|
|
|
+ //特殊工单排序
|
|
|
+ workDtos = workDtos.OrderBy(p => p.PlanDate).ToList();
|
|
|
//当天的可用生产时长满足特殊工单生产时长+清场时间(最后一个工单清场时间除外)
|
|
|
if (dto.EffTime >= sumTsTimes)
|
|
|
{
|
|
|
@@ -679,6 +683,8 @@ namespace Business.ResourceExamineManagement
|
|
|
//剩余可用工作时长满足最后一个特殊工单的生产时长+清场时长
|
|
|
if (remainTime >= needTime)
|
|
|
{
|
|
|
+ //计算工单排产结束时间
|
|
|
+ curPoint = workPoints.Find(p => p.StartPoint <= beginTime && beginTime <= p.EndPoint);
|
|
|
//获取排产结束时间所处以及之后的生产时间段
|
|
|
var nextPoints = workPoints.Where(p => p.Level >= curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
//处理第一个时间段的开始时间
|
|
|
@@ -775,7 +781,7 @@ namespace Business.ResourceExamineManagement
|
|
|
if (curPoint != null && endTime == curPoint.EndPoint)
|
|
|
{
|
|
|
//获取后续生产时间段
|
|
|
- curPoint = workPoints.Where(p => p.Level == curPoint.Level + 1).FirstOrDefault();
|
|
|
+ curPoint = workPoints.FirstOrDefault(p => p.Level == curPoint.Level + 1);
|
|
|
//存在后续工作区间
|
|
|
if (curPoint != null)
|
|
|
{
|
|
|
@@ -787,8 +793,8 @@ namespace Business.ResourceExamineManagement
|
|
|
item.Worked = item.LbrVar;
|
|
|
item.QtyWorked = item.QtyOrded;
|
|
|
}
|
|
|
- //当天产能完全占用,且清场时间在下班后
|
|
|
- if (curPoint == null)
|
|
|
+ //当天产能完全占用,且最后一个工单的清场时间刚好下班或者在下班后
|
|
|
+ if (curPoint == null || endTime == dto.EndTime)
|
|
|
{
|
|
|
sumTsTimes = 0;//排产完毕,特殊工单时长置0
|
|
|
//获取下一个工作日
|
|
|
@@ -814,7 +820,8 @@ namespace Business.ResourceExamineManagement
|
|
|
Worked = 0,
|
|
|
QtyWorked = 0,
|
|
|
Op = curOp.OP,
|
|
|
- WaitTime = curOp.WaitTime * 60
|
|
|
+ WaitTime = curOp.WaitTime * 60,
|
|
|
+ PlanDate = item.OrdDate.Value
|
|
|
});
|
|
|
sumCleanTimes += curOp.WaitTime * 60;
|
|
|
}
|
|
|
@@ -826,22 +833,13 @@ namespace Business.ResourceExamineManagement
|
|
|
lstCleanTime = secCleanTime;
|
|
|
}
|
|
|
}
|
|
|
- //当天可用生产时长大于特殊工单生产时长+清场时长
|
|
|
+ //当天可用生产时长大于特殊工单生产时长+最后一个工单的清场时长
|
|
|
else
|
|
|
{
|
|
|
//排产完毕,特殊工单时长置0
|
|
|
sumTsTimes = 0;
|
|
|
//处理workStartTime
|
|
|
workStartTime = 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)
|
|
|
- {
|
|
|
- workStartTime = nextPoint.StartPoint;
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
//当天的可用产能不满足特殊工单生产时长,则当天产能全部排特殊工单(至少最后一个特殊工单的生产时长不能满足)
|
|
|
@@ -858,7 +856,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
//当前工单剩余待排产时长(分钟)
|
|
|
decimal needTime = item.LbrVar - item.Worked;
|
|
|
- //当天剩余产能满足当前工单的剩余待排产时长
|
|
|
+ //当天剩余产能满足当前工单的剩余待排产时长(则当前工单的清场时间必定排完)
|
|
|
if (residueTime >= needTime)
|
|
|
{
|
|
|
//计算工单排产结束时间
|
|
|
@@ -886,17 +884,18 @@ namespace Business.ResourceExamineManagement
|
|
|
nextMins -= p.WorkMinutes;
|
|
|
}
|
|
|
}
|
|
|
- //当天剩余产能
|
|
|
+ //当天剩余可用生产时长
|
|
|
residueTime -= needTime;
|
|
|
//处理清场时间,两种场景:
|
|
|
//1、residueTime<=item.WaitTime,结束时间加上剩余清场时长
|
|
|
if (residueTime <= item.WaitTime)
|
|
|
{
|
|
|
+ //仍需排产的清场时长
|
|
|
decimal otherTime = item.WaitTime - residueTime;
|
|
|
endTime = dto.EndTime.AddMinutes((double)otherTime);
|
|
|
residueTime = 0;
|
|
|
}
|
|
|
- //2、residueTime>item.WaitTime,剩余时长大于,清场时长,需要过滤休息时间
|
|
|
+ //2、residueTime>item.WaitTime,剩余时长大于清场时长,需要过滤休息时间
|
|
|
else
|
|
|
{
|
|
|
//清场时长
|
|
|
@@ -929,6 +928,8 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
residueTime -= needTime;
|
|
|
}
|
|
|
+ //处理特殊工单剩余时长减去当前工单待排产时长和清场时长
|
|
|
+ sumTsTimes -= (item.LbrVar - item.Worked + item.WaitTime);
|
|
|
|
|
|
//记录生产周期
|
|
|
curSequences.Add(new PeriodSequenceDet
|
|
|
@@ -964,17 +965,19 @@ namespace Business.ResourceExamineManagement
|
|
|
item.QtyWorked = item.QtyWorked;
|
|
|
|
|
|
beginTime = endTime;
|
|
|
- //获取结束时间所处时间段
|
|
|
- curPoint = workPoints.Find(p => p.StartPoint <= endTime && endTime <= p.EndPoint);
|
|
|
- if (curPoint != null && endTime == curPoint.EndPoint)
|
|
|
+ //当天可用生产时长还有剩余
|
|
|
+ if (residueTime > 0)
|
|
|
{
|
|
|
- var nextPoint = workPoints.Find(p => p.Level == curPoint.Level + 1);
|
|
|
- if (nextPoint != null)
|
|
|
+ //获取结束时间所处时间段
|
|
|
+ curPoint = workPoints.Find(p => p.StartPoint <= endTime && endTime <= p.EndPoint);
|
|
|
+ if (endTime == curPoint.EndPoint)
|
|
|
{
|
|
|
- endTime = nextPoint.StartPoint;
|
|
|
+ var nextPoint = workPoints.Find(p => p.Level == curPoint.Level + 1);
|
|
|
+ endTime = nextPoint == null ? endTime : nextPoint.StartPoint;
|
|
|
}
|
|
|
beginTime = endTime;
|
|
|
}
|
|
|
+ //当天可用产能已全部用完
|
|
|
else {
|
|
|
break;
|
|
|
}
|