Pārlūkot izejas kodu

临时工申请系统 修改分配规则

ANG YU 4 gadi atpakaļ
vecāks
revīzija
2977ee9d02
1 mainītis faili ar 38 papildinājumiem un 36 dzēšanām
  1. 38 36
      app/Services/LaborApplyService.php

+ 38 - 36
app/Services/LaborApplyService.php

@@ -108,6 +108,8 @@ class LaborApplyService
             if (empty($apply_man_nums)) continue;
             //按照仓库查询对应的劳务所
             $companies = $this->getCompanies($warehouse);
+            //没有找到劳务所直接跳出
+            if (empty($companies)) continue;
             //需要的男工人数
             $man_num = $apply_man_nums->man_num;
             //需要的女工人数
@@ -116,7 +118,7 @@ class LaborApplyService
             $laborCompanyDispatchInsertArray = $this->buildLaborCompanyDispatchInsertArray($companies, $man_num, $woman_num, $dispatch_date);
             //插入分配数据
             LaborCompanyDispatch::query()->insert($laborCompanyDispatchInsertArray);
-
+            //更新申请状态
             LaborApply::query()
                 ->whereBetween('created_at', [now()->startOfDay(), now()->endOfDay()])
                 ->where('warehouse_id', $warehouse->id)
@@ -153,41 +155,9 @@ class LaborApplyService
             ];
         }
         //分配男工
-        //将需要的工人 依次分配给劳务公司 不管劳务公司能否承担这个人 假设都分配给他(-1)    不能的标记一下不分配 能的就真分配
-        while ($man_num > 0) {
-            foreach ($laborCompanyDispatchInsertArray as &$laborCompanyDispatchInsertItem) {
-                //当前 要分配到该劳务的男工数量
-                $current_man_num = ($laborCompanyDispatchInsertItem['man_num'] ?? 0) + 1;
-                //该劳务公司最大的分配人数
-                $company_can_apply_man_num = $companies->find($laborCompanyDispatchInsertItem['labor_company_id'])->man_num;
-                //超了
-                if ($current_man_num > $company_can_apply_man_num) {
-                    //设置状态为超量
-                    $laborCompanyDispatchInsertItem['exceed_max_labor_num_status'] = LaborCompanyDispatch::EXCEED_MAX_LABOR_NUM;
-                } else {
-                    //赋值给插入的数组
-                    $laborCompanyDispatchInsertItem['man_num'] = $current_man_num;
-                }
-                //需要分配的人数 -1
-                //不管人数超了还是没超 都要-1
-                $man_num--;
-            }
-            unset($laborCompanyDispatchInsertItem);
-        }
-
-        while ($woman_num > 0) {
-            foreach ($laborCompanyDispatchInsertArray as &$laborCompanyDispatchInsertItem) {
-                $current_woman_num = ($laborCompanyDispatchInsertItem['woman_num'] ?? 0) + 1;
-                $company_can_apply_woman_num = $companies->find($laborCompanyDispatchInsertItem['labor_company_id'])->woman_num;
-                if ($current_woman_num > $company_can_apply_woman_num) {
-                    $laborCompanyDispatchInsertItem['exceed_max_labor_num_status'] = LaborCompanyDispatch::EXCEED_MAX_LABOR_NUM;
-                } else {
-                    $laborCompanyDispatchInsertItem['woman_num'] = $current_woman_num;
-                }
-                $woman_num--;
-            }
-            unset($laborCompanyDispatchInsertItem);
-        }
+        $this->dispatchWorker($man_num, $laborCompanyDispatchInsertArray, $companies, 'man_num');
+        //分配女工
+        $this->dispatchWorker($woman_num, $laborCompanyDispatchInsertArray, $companies, 'woman_num');
         return $laborCompanyDispatchInsertArray;
     }
 
@@ -250,4 +220,36 @@ class LaborApplyService
                 'status' => 4//任务完结
             ]);
     }
+
+    /**
+     * 将需要的工人 依次分配给劳务公司 不管劳务公司能否承担这个人 假设都分配给他(-1)    不能的标记一下不分配 能的就真分配
+     * @param $need_workers int 需要的人数
+     * @param array $laborCompanyDispatchInsertArray 插入的分配数据
+     * @param Collection $companies 劳务公司
+     * @param string $key 性别 man | woman
+     */
+    private function dispatchWorker(int $need_workers, array &$laborCompanyDispatchInsertArray, Collection $companies, string $key)
+    {
+        while ($need_workers > 0) {
+            foreach ($laborCompanyDispatchInsertArray as &$laborCompanyDispatchInsertItem) {
+                if ($need_workers <= 0) continue;
+                //当前 要分配到该劳务的男工数量
+                $current_worker_num = ($laborCompanyDispatchInsertItem[$key] ?? 0) + 1;
+                //该劳务公司最大的分配人数
+                $company_can_apply_worker_num = $companies->find($laborCompanyDispatchInsertItem['labor_company_id'])[$key];
+                //超了
+                if ($current_worker_num > $company_can_apply_worker_num) {
+                    //设置状态为超量
+                    $laborCompanyDispatchInsertItem['exceed_max_labor_num_status'] = LaborCompanyDispatch::EXCEED_MAX_LABOR_NUM;
+                } else {
+                    //赋值给插入的数组
+                    $laborCompanyDispatchInsertItem[$key] = $current_worker_num;
+                }
+                //需要分配的人数 -1
+                //不管人数超了还是没超 都要-1
+                $need_workers--;
+            }
+            unset($laborCompanyDispatchInsertItem);
+        }
+    }
 }