|
|
@@ -157,20 +157,37 @@ class RdGenerateService extends Service
|
|
|
*/
|
|
|
protected function createRd(int $itemId, int $dayTime, int $minutes, int $employeeId)
|
|
|
{
|
|
|
- $startHour = 8;
|
|
|
- $startMin = 0;
|
|
|
- $maxMinutes = 510; // 每天最大分钟数 (含午休)
|
|
|
-
|
|
|
- // 加午休 30 分钟
|
|
|
- $workMinutes = min($minutes + 30, $maxMinutes);
|
|
|
- $realMinutes = $workMinutes - 30; // 实际研发工时分钟数
|
|
|
+ $dayStart = Carbon::createFromTimestamp($dayTime)->setTime(8, 0);
|
|
|
+ $lunchStart = Carbon::createFromTimestamp($dayTime)->setTime(11, 30);
|
|
|
+ $lunchEnd = Carbon::createFromTimestamp($dayTime)->setTime(12, 0);
|
|
|
+ $dayEnd = Carbon::createFromTimestamp($dayTime)->setTime(16, 30);
|
|
|
+
|
|
|
+ // 上午可用分钟
|
|
|
+ $morningMinutes = $lunchStart->diffInMinutes($dayStart);
|
|
|
+ // 下午可用分钟
|
|
|
+ $afternoonMinutes = $dayEnd->diffInMinutes($lunchEnd);
|
|
|
+
|
|
|
+ // 确保总工时不会超过全天可用分钟
|
|
|
+ $minutes = min($minutes, $morningMinutes + $afternoonMinutes);
|
|
|
+
|
|
|
+ // 决定工时分配到上午和下午
|
|
|
+ if ($minutes <= $morningMinutes) {
|
|
|
+ $start = $dayStart->copy()->addMinutes(mt_rand(0, $morningMinutes - $minutes));
|
|
|
+ $end = $start->copy()->addMinutes($minutes);
|
|
|
+ } elseif ($minutes <= $afternoonMinutes) {
|
|
|
+ $start = $lunchEnd->copy()->addMinutes(mt_rand(0, $afternoonMinutes - $minutes));
|
|
|
+ $end = $start->copy()->addMinutes($minutes);
|
|
|
+ } else {
|
|
|
+ // 分两段:上午尽量满,剩余在下午
|
|
|
+ $start = $dayStart->copy();
|
|
|
+ $end = $lunchEnd->copy()->addMinutes($minutes - $morningMinutes);
|
|
|
+ }
|
|
|
|
|
|
- // 随机结束时间 08:00~16:30
|
|
|
- $endTime = Carbon::createFromTimestamp($dayTime)
|
|
|
- ->setTime($startHour, $startMin)
|
|
|
- ->addMinutes($workMinutes);
|
|
|
+ // 调整到整5分钟
|
|
|
+ $start->minute = ceil($start->minute / 5) * 5;
|
|
|
+ $end->minute = ceil($end->minute / 5) * 5;
|
|
|
|
|
|
- // 随机 crt_time 16:30 ~ 17:00
|
|
|
+ // crt_time 16:30 ~ 17:00
|
|
|
$crtTime = Carbon::createFromTimestamp($dayTime)
|
|
|
->setTime(16, 30)
|
|
|
->addSeconds(mt_rand(0, 30*60))
|
|
|
@@ -183,11 +200,11 @@ class RdGenerateService extends Service
|
|
|
'crt_time' => $crtTime,
|
|
|
'order_time' => $dayTime,
|
|
|
'item_id' => $itemId,
|
|
|
- 'start_time_hour' => $startHour,
|
|
|
- 'start_time_min' => $startMin,
|
|
|
- 'end_time_hour' => $endTime->hour,
|
|
|
- 'end_time_min' => $endTime->minute,
|
|
|
- 'total_hours' => $realMinutes,
|
|
|
+ 'start_time_hour' => $start->hour,
|
|
|
+ 'start_time_min' => $start->minute,
|
|
|
+ 'end_time_hour' => $end->hour,
|
|
|
+ 'end_time_min' => $end->minute,
|
|
|
+ 'total_hours' => $minutes,
|
|
|
'order_number' => $orderNumber,
|
|
|
'type' => 1
|
|
|
]);
|
|
|
@@ -200,4 +217,5 @@ class RdGenerateService extends Service
|
|
|
'upd_time' => $crtTime,
|
|
|
]);
|
|
|
}
|
|
|
+
|
|
|
}
|