Skip to content

Commit d4b34e3

Browse files
committed
fix schedule
1 parent 365901a commit d4b34e3

File tree

2 files changed

+21
-24
lines changed

2 files changed

+21
-24
lines changed

src/ProdScheduler/SchedulerComputeTrait.php

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

src/ProdScheduler/SchedulerConfigTrait.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ private function parseConfig(array $config)
5858
$this->initialPhase = $config['initialPhase'];
5959
$this->listPhase = $config['listPhase'];
6060
$this->EDQ = $config['edq'];
61+
$this->MCTC = $config['mctc'];
6162
$this->list = $this->parseList($config['list']);
6263
$this->defaultDayCalendar = $this->parseCalendar($config['calendar']);
6364
$this->monthCalendar = $this->parseCalendars($config['monthCalendar']);

0 commit comments

Comments
 (0)