@@ -30,7 +30,7 @@ public function compute()
3030 if ($ i === count ($ reverseComputePhases ) - 1 ) {
3131 if ($ k === 0 ) {
3232 $ originStart = $ start = $ this ->ISTS ;
33- } else {
33+ } else if (! empty ( $ this -> list [ $ k - 1 ][ ' phases_forward ' ])) {
3434 $ originStart = $ start = $ this ->list [$ k - 1 ]['phases_forward ' ][0 ]['start ' ];
3535 }
3636 } else {
@@ -59,39 +59,39 @@ public function compute()
5959
6060 $ i --;
6161 }
62- }
6362
64- $ initialPhase = $ this ->list [$ k ]['phases_reverse ' ][$ reverseComputePhasesCnt - 1 ];
65- if (isset ($ initialPhase )) {
66- foreach ($ forwardComputePhases as $ i => $ itemPhase ) {
67- $ workerNum = $ itemPhase ['worker_num ' ];
68- $ costTime = $ itemPhase ['cost_time ' ];
63+ $ initialPhase = $ this ->list [$ k ]['phases_reverse ' ][$ reverseComputePhasesCnt - 1 ];
64+ if (isset ($ initialPhase )) {
65+ foreach ($ forwardComputePhases as $ i => $ itemPhase ) {
66+ $ workerNum = $ itemPhase ['worker_num ' ];
67+ $ costTime = $ itemPhase ['cost_time ' ];
6968
70- list ($ singleCost , $ totalCost ) = $ this ->getPhaseCostTime ($ itemQty , $ itemPhaseMaxCostTime , $ costTime , $ workerNum );
71- if ($ i === 0 ) {
72- $ originStart = $ initialPhase ['start ' ];
73- $ start = $ originStart + $ initialPhase ['dead_time ' ] + $ initialPhase ['ahead_time ' ];
74- } else {
75- $ prevItem = $ this ->list [$ k ]['phases_forward ' ][$ i - 1 ];
76- if ($ prevItem ['out_time ' ] > 0 ) {
77- $ originStart = $ start = $ prevItem ['end ' ];
69+ list ($ singleCost , $ totalCost ) = $ this ->getPhaseCostTime ($ itemQty , $ itemPhaseMaxCostTime , $ costTime , $ workerNum );
70+ if ($ i === 0 ) {
71+ $ originStart = $ initialPhase ['start ' ];
72+ $ start = $ originStart + $ initialPhase ['dead_time ' ] + $ initialPhase ['ahead_time ' ];
7873 } else {
79- $ originStart = $ prevItem ['start ' ];
80- $ start = $ originStart + $ singleCost + $ prevItem ['dead_time ' ] + $ prevItem ['ahead_time ' ];
74+ $ prevItem = $ this ->list [$ k ]['phases_forward ' ][$ i - 1 ];
75+ if ($ prevItem ['out_time ' ] > 0 && isset ($ prevItem ['end ' ])) {
76+ $ originStart = $ start = $ prevItem ['end ' ];
77+ } else {
78+ $ originStart = $ prevItem ['start ' ];
79+ $ start = $ originStart + $ singleCost + $ prevItem ['dead_time ' ] + $ prevItem ['ahead_time ' ];
80+ }
8181 }
82- }
8382
84- $ start = $ this ->phaseTimeWithCalendarCompute ($ originStart , $ start );
85- $ start = $ this ->phaseTimeWithRestDayCompute ($ start );
86- $ this ->list [$ k ]['phases_forward ' ][$ i ]['start ' ] = $ start ;
83+ $ start = $ this ->phaseTimeWithCalendarCompute ($ originStart , $ start );
84+ $ start = $ this ->phaseTimeWithRestDayCompute ($ start );
85+ $ this ->list [$ k ]['phases_forward ' ][$ i ]['start ' ] = $ start ;
8786
88- if ($ itemPhase ['out_time ' ] > 0 ) {
89- $ end = $ start + $ itemPhase ['out_time ' ];
90- } else {
91- $ end = $ start + $ totalCost ;
92- $ end = $ this ->phaseTimeWithCalendarCompute ($ start , $ end );
93- $ end = $ this ->phaseTimeWithRestDayCompute ($ end );
94- $ this ->list [$ k ]['phases_forward ' ][$ i ]['end ' ] = $ end ;
87+ if ($ itemPhase ['out_time ' ] > 0 ) {
88+ $ end = $ start + $ itemPhase ['out_time ' ];
89+ } else {
90+ $ end = $ start + $ totalCost ;
91+ $ end = $ this ->phaseTimeWithCalendarCompute ($ start , $ end );
92+ $ end = $ this ->phaseTimeWithRestDayCompute ($ end );
93+ $ this ->list [$ k ]['phases_forward ' ][$ i ]['end ' ] = $ end ;
94+ }
9595 }
9696 }
9797 }
@@ -164,6 +164,13 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
164164 $ originStartDate = date (self ::SCHEDULER_DATE_FORMAT , $ originStart );
165165
166166 $ calendar = $ this ->getDayCalendar ($ originStart );
167+ if (!isset ($ calendar ['dayStart ' ])) {
168+ $ defaultCalendar = $ this ->getDefaultDayCalendar ();
169+ $ calendar ['rest ' ] = $ defaultCalendar ['profile ' ]['rest ' ];
170+ $ calendar ['dayStart ' ] = $ defaultCalendar ['profile ' ]['dayStart ' ];
171+ $ calendar ['dayEnd ' ] = $ defaultCalendar ['profile ' ]['dayEnd ' ];
172+ $ calendar ['dayDuration ' ] = $ defaultCalendar ['profile ' ]['dayDuration ' ];
173+ }
167174 $ dayStart = strtotime ("{$ originStartDate } {$ calendar ['dayStart ' ]}" );
168175 $ dayEnd = strtotime ("{$ originStartDate } {$ calendar ['dayEnd ' ]}" );
169176 $ dayDuration = $ calendar ['dayDuration ' ];
@@ -173,7 +180,7 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
173180 if ($ diff >= $ dayDuration ) {
174181 while ($ diff > 0 ) {
175182 $ dayCalendar = $ this ->getDayCalendar ($ originStart );
176- if ($ dayCalendar ['dayDuration ' ] < $ diff ) {
183+ if (isset ( $ dayCalendar [ ' dayDuration ' ]) && $ dayCalendar ['dayDuration ' ] < $ diff ) {
177184 $ diff -= $ dayCalendar ['dayDuration ' ];
178185 if ($ isReverse ) {
179186 $ originStart -= self ::SCHEDULER_DAY_SECONDS ;
@@ -192,6 +199,13 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
192199 }
193200
194201 $ calendar = $ this ->getDayCalendar ($ start );
202+ if (!isset ($ calendar ['dayStart ' ])) {
203+ $ defaultCalendar = $ this ->getDefaultDayCalendar ();
204+ $ calendar ['rest ' ] = $ defaultCalendar ['profile ' ]['rest ' ];
205+ $ calendar ['dayStart ' ] = $ defaultCalendar ['profile ' ]['dayStart ' ];
206+ $ calendar ['dayEnd ' ] = $ defaultCalendar ['profile ' ]['dayEnd ' ];
207+ $ calendar ['dayDuration ' ] = $ defaultCalendar ['profile ' ]['dayDuration ' ];
208+ }
195209 $ dayStart = strtotime ("{$ calendar ['date ' ]} {$ calendar ['dayStart ' ]}" );
196210 $ dayEnd = strtotime ("{$ calendar ['date ' ]} {$ calendar ['dayEnd ' ]}" );
197211 $ dayDuration = $ calendar ['dayDuration ' ];
@@ -237,6 +251,13 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
237251
238252 if ($ start < $ dayStart ) {
239253 $ prevCalendar = $ this ->getDayCalendar ($ start - self ::SCHEDULER_DAY_SECONDS );
254+ if (!isset ($ prevCalendar ['dayEnd ' ])) {
255+ $ defaultCalendar = $ this ->getDefaultDayCalendar ();
256+ $ prevCalendar ['rest ' ] = $ defaultCalendar ['profile ' ]['rest ' ];
257+ $ prevCalendar ['dayStart ' ] = $ defaultCalendar ['profile ' ]['dayStart ' ];
258+ $ prevCalendar ['dayEnd ' ] = $ defaultCalendar ['profile ' ]['dayEnd ' ];
259+ $ prevCalendar ['dayDuration ' ] = $ defaultCalendar ['profile ' ]['dayDuration ' ];
260+ }
240261 $ prevDayEnd = strtotime ("{$ prevCalendar ['date ' ]} {$ prevCalendar ['dayEnd ' ]}" );
241262 if ($ isReverse ) {
242263 $ diff = abs ($ dayStart - $ start );
@@ -252,7 +273,12 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
252273
253274 if ($ start > $ dayEnd ) {
254275 $ nextCalendar = $ this ->getDayCalendar ($ start + self ::SCHEDULER_DAY_SECONDS );
255- $ nextDayStart = strtotime ("{$ nextCalendar ['date ' ]} {$ nextCalendar ['dayStart ' ]}" );
276+ if (isset ($ nextCalendar ['dayStart ' ])) {
277+ $ nextDayStart = strtotime ("{$ nextCalendar ['date ' ]} {$ nextCalendar ['dayStart ' ]}" );
278+ } else {
279+ $ s = date ('H:i:s ' , $ dayStart );
280+ $ nextDayStart = strtotime ("{$ nextCalendar ['date ' ]} {$ s }" );
281+ }
256282
257283 if ($ isReverse ) {
258284 $ diff = $ start - $ dayEnd ;
0 commit comments