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