问题: 需要根据可用的生产日期,轮班工作时间以及每个轮班期间的休息时间更新每个版本的估计开始时间。班次和休息日期是任意的,只有时间部分是正确的。我正在寻找的是一种更好的方法来嵌套这些对象,以简化关键决策,例如下一个生产日,超过班次结束时间和增加休息时间。我已将自己编入角落。在午夜工作时处理额外的日期转换并最终强制解决问题。请参阅下面的示例: currentdatetime 始终是建议的下一个开始时间。
public MESShift IsWithinShifts(DateTime currentdatetime)
{
MESShift activeShift = null;
foreach (MESShift shift in shifts)
{
if (shift.Shift == 1)
{
if (currentdatetime >= shift.StartTime && currentdatetime <= shift.EndTime)
{
activeShift = shift;
break;
}
}
else
{
if (shift.EndTime.Hour < 3)
{
if (currentdatetime >= shift.StartTime)
{
activeShift = shift;
break;
}
else
{
if (currentdatetime.Hour < 3 && currentdatetime.TimeOfDay <= shift.EndTime.TimeOfDay)
{
activeShift = shift;
}
}
}
else
{
if (currentdatetime >= shift.StartTime && currentdatetime <= shift.EndTime)
{
activeShift = shift;
break;
}
}
}
}
return activeShift;
}
我最初的概念很简单,只需要根据当前开始时间的时间开始第一个版本,并添加剩余的分钟以获得结束时间。每个结束时间将是下一个版本的开始时间,除非结束时间超过班次或在从发布开始到结束时间的时间跨度内开始中断。如果超出当前的班次,则根据可用的生产日期选择下一班次已被证明是非常重要的。
<小时/> 生产日期 / 转移
================= ===========================================================
6/1/2018 Line | Shift | ShiftStartTime | ShiftEndTime
6/4/2018 =====+=======+=====================+======================
6/5/2018 1 | 1 |1899-12-30 06:00:00 | 1899-12-30 14:30:00
6/6/2018 =====+=======+=====================+======================
1 | 2 |1899-12-30 17:00:00 | 1899-12-31 01:30:00
=====+=======+=====================+======================
<小时/> 的符
Line | Shift | BreakStartTime | BreakEndTime | BreakMinutes
=====+=======+=====================+=====================+===============
1 | 1 | 1899-12-30 09:00:00 | 1899-12-30 09:10:00 | 10
=====+=======+=====================+=====================+===============
1 | 1 | 1899-12-30 11:45:00 | 1899-12-30 12:15:00 | 30
=====+=======+=====================+=====================+===============
1 | 1 | 1899-12-30 13:55:00 | 1899-12-30 14:05:00 | 10
=====+=======+=====================+=====================+===============
1 | 2 | 1899-12-30 15:30:00 | 1899-12-30 15:40:00 | 10
=====+=======+=====================+=====================+===============
1 | 2 | 1899-12-30 18:30:00 | 1899-12-30 19:00:00 | 30
=====+=======+=====================+=====================+===============
1 | 2 | 1899-12-30 20:36:00 | 1899-12-30 20:50:00 | 14
=====+=======+=====================+=====================+===============
<小时/> 生产版本
Release |Minutes |EST_START_TIME | Start | end
=========+========+===============+========+=======+
10111 | 39.149 | 6/1/18 6:00 AM| | |
=========+========+===============+========+=======+
10112 |125.277 | 6/1/18 6:46 AM| | |
=========+========+===============+========+=======+
10113 | 20.88 |6/1/18 10:20 AM| | |
=========+========+===============+========+=======+
10114 | 20.88 |6/1/18 10:44 AM| | |
=========+========+===============+========+=======+
10115 | 20.88 |6/1/18 11:08 AM| | |
=========+========+===============+========+=======+
10116 | 41.759 |6/1/18 11:32 AM| | |
=========+========+===============+========+=======+
10117 | 62.639 |6/1/18 12:51 PM| | |
=========+========+===============+========+=======+
10118 | 41.759 | 6/1/18 2:15 PM| | |
=========+========+===============+========+=======+
10119 | 41.759 | 6/2/18 6:34 AM| | |
=========+========+===============+========+=======+
10120 | 13.702 | 6/2/18 7:23 AM| | |
=========+========+===============+========+=======+
10120 | 69.816 | 6/2/18 7:23 AM| | |
=========+========+===============+========+=======+
10121 |104.398 | 6/2/18 9:57 AM| | |
=========+========+===============+========+=======+
10122 | 83.518 |6/2/18 12:31 PM| | |
=========+========+===============+========+=======+
10123 | 41.759 | 6/2/18 2:20 PM| | |
=========+========+===============+========+=======+
10124 | 41.759 | 6/4/18 6:39 AM| | |
=========+========+===============+========+=======+
10125 | 62.639 | 6/4/18 7:28 AM| | |
=========+========+===============+========+=======+
10126 | 41.759 | 6/4/18 9:37 AM| | |
=========+========+===============+========+=======+
10127 | 11.745 |6/4/18 10:26 AM| | |
=========+========+===============+========+=======+
10127 | 30.014 |6/4/18 10:26 AM| | |
=========+========+===============+========+=======+