@@ -77,7 +77,7 @@ public function compute()
7777 $ originStart = $ start = $ prevItem ['end ' ];
7878 } else {
7979 $ originStart = $ prevItem ['start ' ];
80- $ start = $ originStart + $ prevItem ['dead_time ' ] + $ prevItem ['ahead_time ' ];
80+ $ start = $ originStart + $ singleCost + $ prevItem ['dead_time ' ] + $ prevItem ['ahead_time ' ];
8181 }
8282 }
8383
@@ -154,7 +154,7 @@ private function getPhaseCostTime(int $qty, int $maxCostTime, int $costTime, int
154154 }
155155
156156 $ singleCost = $ cost * $ this ->getEDQ ();
157- $ totalCost = $ qty * $ this -> getEDQ () ;
157+ $ totalCost = $ cost * $ qty ;
158158
159159 return [(int )$ singleCost , (int )$ totalCost ];
160160 }
@@ -164,10 +164,12 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
164164 $ originStartDate = date (self ::SCHEDULER_DATE_FORMAT , $ originStart );
165165
166166 $ calendar = $ this ->getDayCalendar ($ originStart );
167- $ dayStart = $ calendar ['dayStart ' ];
168- $ dayEnd = $ calendar ['dayEnd ' ];
167+ $ dayStart = strtotime ( "{ $ originStartDate } { $ calendar ['dayStart ' ]}" ) ;
168+ $ dayEnd = strtotime ( "{ $ originStartDate } { $ calendar ['dayEnd ' ]}" ) ;
169169 $ dayDuration = $ calendar ['dayDuration ' ];
170- $ diff = $ start - $ originStart ;
170+ $ diff = abs ($ start - $ originStart );
171+
172+
171173 if ($ diff >= $ dayDuration ) {
172174 while ($ diff > 0 ) {
173175 $ dayCalendar = $ this ->getDayCalendar ($ originStart );
@@ -190,9 +192,10 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
190192 }
191193
192194 $ calendar = $ this ->getDayCalendar ($ start );
193- $ dayStart = $ calendar ['dayStart ' ];
194- $ dayEnd = $ calendar ['dayEnd ' ];
195+ $ dayStart = strtotime ( "{ $ calendar ['date ' ]} { $ calendar [ ' dayStart ' ]}" ) ;
196+ $ dayEnd = strtotime ( "{ $ calendar ['date ' ]} { $ calendar [ ' dayEnd ' ]}" ) ;
195197 $ dayDuration = $ calendar ['dayDuration ' ];
198+ $ originStartDate = date (self ::SCHEDULER_DATE_FORMAT , $ originStart );
196199 }
197200
198201 if ($ start >= $ dayStart && $ start <= $ dayEnd ) {
@@ -207,7 +210,7 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
207210 } else {
208211 $ start += $ t ['duration ' ];
209212 }
210- } else {
213+ } else if ( $ diff > $ t [ ' duration ' ]) {
211214 $ cycle = 10 * 60 ;
212215 $ cycleCount = ceil ($ diff / $ cycle );
213216 $ _start = $ originStart ;
@@ -233,38 +236,31 @@ private function phaseTimeWithCalendarCompute(int $originStart, int &$start, boo
233236 }
234237
235238 if ($ start < $ dayStart ) {
239+ $ prevCalendar = $ this ->getDayCalendar ($ start - self ::SCHEDULER_DAY_SECONDS );
240+ $ prevDayEnd = strtotime ("{$ prevCalendar ['date ' ]} {$ prevCalendar ['dayEnd ' ]}" );
236241 if ($ isReverse ) {
237- $ diff = $ dayStart - $ start ;
238-
239- $ prevCalendar = $ this ->getDayCalendar ($ start - self ::SCHEDULER_DAY_SECONDS );
240- $ prevDayStart = $ prevCalendar ['dayStart ' ];
241- $ prevDayEnd = $ prevCalendar ['dayEnd ' ];
242+ $ diff = abs ($ dayStart - $ start );
242243 $ prevStart = $ prevDayEnd - $ diff ;
243244
244245 $ start = $ this ->phaseTimeWithCalendarCompute ($ prevDayEnd , $ prevStart , $ isReverse );
245246 } else {
246- $ prevCalendar = $ this ->getDayCalendar ($ start - self ::SCHEDULER_DAY_SECONDS );
247- $ diff = $ start - $ prevCalendar ['dayEnd ' ];
248- $ dayStart = $ calendar ['dayStart ' ];
247+ $ diff = $ start - $ prevDayEnd ;
249248 $ start = $ dayStart + $ diff ;
250249 $ start = $ this ->phaseTimeWithCalendarCompute ($ dayStart , $ start , $ isReverse );
251250 }
252251 }
253252
254253 if ($ start > $ dayEnd ) {
254+ $ nextCalendar = $ this ->getDayCalendar ($ start + self ::SCHEDULER_DAY_SECONDS );
255+ $ nextDayStart = strtotime ("{$ nextCalendar ['date ' ]} {$ nextCalendar ['dayStart ' ]}" );
256+
255257 if ($ isReverse ) {
256- $ nextCalendar = $ this ->getDayCalendar ($ start + self ::SCHEDULER_DAY_SECONDS );
257- $ nextDayStart = $ nextCalendar ['dayStart ' ];
258258 $ diff = $ start - $ dayEnd ;
259- $ start = $ nextDayStart + $ diff ;
259+ $ start = $ dayStart - $ diff ;
260260
261- $ start = $ this ->phaseTimeWithCalendarCompute ($ nextDayStart , $ start , $ isReverse );
261+ $ start = $ this ->phaseTimeWithCalendarCompute ($ dayStart , $ start , $ isReverse );
262262 } else {
263263 $ diff = $ start - $ dayEnd ;
264-
265- $ nextCalendar = $ this ->getDayCalendar ($ start + self ::SCHEDULER_DAY_SECONDS );
266- $ nextDayStart = $ nextCalendar ['dayStart ' ];
267- $ nextDayEnd = $ nextCalendar ['dayEnd ' ];
268264 $ nextStart = $ nextDayStart + $ diff ;
269265
270266 $ start = $ this ->phaseTimeWithCalendarCompute ($ nextDayStart , $ nextStart , $ isReverse );
0 commit comments