cqp преди 2 месеца
родител
ревизия
78dcffaafe
променени са 1 файла, в които са добавени 35 реда и са изтрити 17 реда
  1. 35 17
      app/Service/RdGenerateService.php

+ 35 - 17
app/Service/RdGenerateService.php

@@ -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,
         ]);
     }
+
 }