@@ -12,9 +12,9 @@ public function compute()
1212 {
1313 foreach ($ this ->list as $ k => $ item ) {
1414 $ itemQty = $ item ['item_qty ' ];
15- $ itemPhaseMaxCostTime = $ item ['phase_max_cost ' ];
16- $ reverseComputePhases = $ item ['phases_reverse ' ];
17- $ forwardComputePhases = $ item ['phases_forward ' ];
15+ $ itemPhaseMaxCostTime = $ this -> list [ $ k ] ['phase_max_cost ' ];
16+ $ reverseComputePhases = $ this -> list [ $ k ] ['phases_reverse ' ];
17+ $ forwardComputePhases = $ this -> list [ $ k ] ['phases_forward ' ];
1818
1919 $ reverseComputePhasesCnt = count ($ reverseComputePhases );
2020 if (!empty ($ reverseComputePhasesCnt )) {
@@ -34,7 +34,7 @@ public function compute()
3434 $ originStart = $ start = $ this ->list [$ k - 1 ]['phases_forward ' ][0 ]['start ' ];
3535 }
3636 } else {
37- $ nextPhase = $ reverseComputePhases [$ i + 1 ];
37+ $ nextPhase = $ this -> list [ $ k ][ ' phases_reverse ' ] [$ i + 1 ];
3838 $ originStart = $ start = $ nextPhase ['start ' ];
3939 $ start -= ($ itemPhase ['dead_time ' ] + $ itemPhase ['ahead_time ' ]);
4040 if ($ itemPhase ['out_time ' ] > 0 ) {
@@ -61,7 +61,7 @@ public function compute()
6161 }
6262 }
6363
64- $ initialPhase = $ reverseComputePhases [$ reverseComputePhasesCnt - 1 ];
64+ $ initialPhase = $ this -> list [ $ k ][ ' phases_reverse ' ] [$ reverseComputePhasesCnt - 1 ];
6565 if (isset ($ initialPhase )) {
6666 foreach ($ forwardComputePhases as $ i => $ itemPhase ) {
6767 $ workerNum = $ itemPhase ['worker_num ' ];
@@ -72,7 +72,7 @@ public function compute()
7272 $ originStart = $ initialPhase ['start ' ];
7373 $ start = $ originStart + $ initialPhase ['dead_time ' ] + $ initialPhase ['ahead_time ' ];
7474 } else {
75- $ prevItem = $ forwardComputePhases [$ i - 1 ];
75+ $ prevItem = $ this -> list [ $ k ][ ' phases_forward ' ] [$ i - 1 ];
7676 if ($ prevItem ['out_time ' ] > 0 ) {
7777 $ originStart = $ start = $ prevItem ['end ' ];
7878 } else {
@@ -102,20 +102,21 @@ public function compute()
102102
103103 private function initialStartTimeCompute (): int
104104 {
105+ $ initialScheduleDate = date (self ::SCHEDULER_DATE_FORMAT , $ this ->ISTS );
105106 $ dayCalendar = $ this ->getDayCalendar ($ this ->ISTS );
106107
107- $ initialScheduleDate = date (self ::SCHEDULER_DATE_FORMAT , $ this ->ISTS );
108108 if ($ this ->computeDirection === 1 ) {
109109 if (empty ($ dayCalendar )) {
110110 $ dayCalendarStartTime = $ this ->getDayCalendarStartTime ($ this ->defaultDayCalendar );
111111
112112 $ this ->ISDT = $ initialScheduleDate . " " . $ dayCalendarStartTime ;
113113 } else {
114- foreach ($ dayCalendar as $ k => $ day ) {
114+ $ monthCalendar = $ this ->getMonthCalendar ();
115+ foreach ($ monthCalendar as $ k => $ day ) {
115116 if ($ initialScheduleDate === $ day ['date ' ]) {
116117 if ($ day ['is_rest ' ] === 1 ) {
117- if ($ k !== count ($ dayCalendar )) {
118- $ nextDayCalendar = $ dayCalendar [$ k + 1 ];
118+ if ($ k !== count ($ monthCalendar )) {
119+ $ nextDayCalendar = $ monthCalendar [$ k + 1 ];
119120 if ($ nextDayCalendar ['is_rest ' ] === 1 ) {
120121 continue ;
121122 } else {
@@ -194,44 +195,40 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
194195 $ dayDuration = $ calendar ['dayDuration ' ];
195196 }
196197
197- foreach ($ calendar as $ c ) {
198- if ($ start >= $ dayStart && $ start <= $ dayEnd ) {
199- $ times = $ c ['rest ' ];
200- foreach ($ times as $ t ) {
201- $ restStart = strtotime ("{$ originStartDate } {$ t ['start ' ]}" );
202- $ restEnd = strtotime ("{$ originStartDate } {$ t ['end ' ]}" );
198+ if ($ start >= $ dayStart && $ start <= $ dayEnd ) {
199+ $ times = $ calendar ['rest ' ];
200+ foreach ($ times as $ t ) {
201+ $ restStart = strtotime ("{$ originStartDate } {$ t ['start ' ]}" );
202+ $ restEnd = strtotime ("{$ originStartDate } {$ t ['end ' ]}" );
203203
204- if ($ start >= $ restStart && $ start < $ restEnd ) {
204+ if ($ start >= $ restStart && $ start < $ restEnd ) {
205+ if ($ isReverse ) {
206+ $ start -= $ t ['duration ' ];
207+ } else {
208+ $ start += $ t ['duration ' ];
209+ }
210+ } else {
211+ $ cycle = 10 * 60 ;
212+ $ cycleCount = ceil ($ diff / $ cycle );
213+ $ _start = $ originStart ;
214+ for ($ i = 1 ; $ i <= $ cycleCount ; $ i ++) {
205215 if ($ isReverse ) {
206- $ start -= $ t ['duration ' ];
216+ $ _start -= $ cycle * $ i ;
217+
218+ if ($ _start >= $ restStart && $ _start < $ restEnd ) {
219+ $ start -= $ t ['duration ' ];
220+ break ;
221+ }
207222 } else {
208- $ start += $ t ['duration ' ];
209- }
210- } else {
211- $ cycle = 10 * 60 ;
212- $ cycleCount = ceil ($ diff / $ cycle );
213- $ _start = $ originStart ;
214- for ($ i = 1 ; $ i <= $ cycleCount ; $ i ++) {
215- if ($ isReverse ) {
216- $ _start -= $ cycle * $ i ;
217-
218- if ($ _start >= $ restStart && $ _start < $ restEnd ) {
219- $ start -= $ t ['duration ' ];
220- break ;
221- }
222- } else {
223- $ _start += $ cycle * $ i ;
223+ $ _start += $ cycle * $ i ;
224224
225- if ($ _start >= $ restStart && $ _start < $ restEnd ) {
226- $ start += $ t ['duration ' ];
227- break ;
228- }
225+ if ($ _start >= $ restStart && $ _start < $ restEnd ) {
226+ $ start += $ t ['duration ' ];
227+ break ;
229228 }
230229 }
231230 }
232231 }
233- } else {
234- break ;
235232 }
236233 }
237234
@@ -279,7 +276,7 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
279276
280277 private function phaseTimeWithRestDayCompute (int &$ time , bool $ isReverse = false ): int
281278 {
282- $ calendar = $ this ->getDayCalendar ();
279+ $ calendar = $ this ->getMonthCalendar ();
283280
284281 foreach ($ calendar as $ c ) {
285282 if (strtotime ($ c ['date ' ]) < $ time && $ c ['is_rest ' ] === 1 ) {
0 commit comments