|
|
@@ -3521,69 +3521,46 @@ namespace Business.ResourceExamineManagement
|
|
|
//最后一天的产能全部占用或只能占用一部分
|
|
|
else
|
|
|
{
|
|
|
- //剩余生产时长(分钟)
|
|
|
- decimal workTime = sumTimes;
|
|
|
- //排产开始时间位于哪个时间段
|
|
|
- var curPoint = workPoints.Find(p => p.StartPoint <= workStartTime && workStartTime <= p.EndPoint);
|
|
|
- //结束时间位于时间段
|
|
|
- var lastPoint = new LineWorkPointDto();
|
|
|
- TimeSpan span = curPoint.EndPoint - workStartTime;
|
|
|
- //当前工作时间段的有效生产时间
|
|
|
- decimal effMins = (decimal)span.TotalMinutes;
|
|
|
+ //结束时间
|
|
|
DateTime workEndTime = workStartTime;
|
|
|
- if (effMins >= workTime)//当前工作时间段即可满足产能
|
|
|
+ //需要排产时长=剩余生产时长(分钟) + 清场时长
|
|
|
+ decimal workTime = sumTimes + item.WaitTime;
|
|
|
+ //当天可用时长满足生产时长+清场时长
|
|
|
+ if (dto.EffTime > workTime)
|
|
|
{
|
|
|
- workEndTime = workStartTime.AddMinutes((double)workTime);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- //获取后续生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
- //剩余需要工作时长
|
|
|
- decimal nextMins = workTime - effMins;
|
|
|
- foreach (var p in nextPoints)
|
|
|
+ //排产开始时间位于哪个时间段
|
|
|
+ var curPoint = workPoints.Find(p => p.StartPoint <= workStartTime && workStartTime <= p.EndPoint);
|
|
|
+ TimeSpan span = curPoint.EndPoint - workStartTime;
|
|
|
+ //当前工作时间段的有效生产时间
|
|
|
+ decimal effMins = (decimal)span.TotalMinutes;
|
|
|
+ if (effMins >= workTime)//当前工作时间段即可满足产能
|
|
|
{
|
|
|
- if (p.WorkMinutes >= nextMins)
|
|
|
- {
|
|
|
- //记录结束时间位于哪个时间段
|
|
|
- lastPoint = p;
|
|
|
- workEndTime = p.StartPoint.AddMinutes((double)nextMins);
|
|
|
- break;
|
|
|
- }
|
|
|
- nextMins -= p.WorkMinutes;
|
|
|
+ workEndTime = workStartTime.AddMinutes((double)workTime);
|
|
|
}
|
|
|
- }
|
|
|
- //计算清场时间
|
|
|
- //剩余可用工作时长(分钟)
|
|
|
- decimal remainTime = CalcRemainWorkTime(workEndTime,workPoints);
|
|
|
- //剩余可用工作时长满足清场时长
|
|
|
- if (remainTime >= item.WaitTime)
|
|
|
- {
|
|
|
- //清场需要时长(分钟)
|
|
|
- decimal needTime = item.WaitTime;
|
|
|
- //获取排产结束时间所处以及之后的生产时间段
|
|
|
- var nextPoints = workPoints.Where(p => p.Level >= lastPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
- //处理第一个时间段的开始时间
|
|
|
- nextPoints[0].StartPoint = workEndTime;
|
|
|
- foreach (var p in nextPoints)
|
|
|
+ else
|
|
|
{
|
|
|
- span = p.EndPoint - p.StartPoint;
|
|
|
- //当前工作时间段的有效生产时间
|
|
|
- effMins = (decimal)span.TotalMinutes;
|
|
|
- if (effMins >= needTime)
|
|
|
+ //获取后续生产时间段
|
|
|
+ var nextPoints = workPoints.Where(p => p.Level > curPoint.Level).OrderBy(p => p.Level).ToList();
|
|
|
+ //剩余需要工作时长
|
|
|
+ decimal nextMins = workTime - effMins;
|
|
|
+ foreach (var p in nextPoints)
|
|
|
{
|
|
|
- workEndTime = p.StartPoint.AddMinutes((double)needTime);
|
|
|
- break;
|
|
|
+ if (p.WorkMinutes >= nextMins)
|
|
|
+ {
|
|
|
+ workEndTime = p.StartPoint.AddMinutes((double)nextMins);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ nextMins -= p.WorkMinutes;
|
|
|
}
|
|
|
- needTime -= effMins;
|
|
|
}
|
|
|
}
|
|
|
- //剩余可用工作时长不能满足清场时长
|
|
|
- else
|
|
|
- {
|
|
|
- decimal needTime = item.WaitTime - remainTime;
|
|
|
- workEndTime.AddMinutes((double)needTime);
|
|
|
+ //当天可用时长满足生产时长,但是不满足清场时长
|
|
|
+ else {
|
|
|
+ //剩余清场时长
|
|
|
+ decimal needTime = workTime - dto.EffTime;
|
|
|
+ workEndTime = dto.EndTime.AddMinutes((double)needTime);
|
|
|
}
|
|
|
+
|
|
|
//记录生产周期
|
|
|
periodsDet.Add(new PeriodSequenceDet
|
|
|
{
|
|
|
@@ -3615,6 +3592,7 @@ namespace Business.ResourceExamineManagement
|
|
|
});
|
|
|
sumTimes = 0;
|
|
|
item.QtyWorked = item.QtyOrded;
|
|
|
+ item.Worked = item.LbrVar;
|
|
|
}
|
|
|
}
|
|
|
}
|