Skip to content

Commit 291c2c3

Browse files
committed
fix: unset properties
1 parent d4b34e3 commit 291c2c3

File tree

1 file changed

+56
-30
lines changed

1 file changed

+56
-30
lines changed

src/ProdScheduler/SchedulerComputeTrait.php

Lines changed: 56 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)