|
@@ -17,8 +17,10 @@ use function DeepCopy\deep_copy;
|
|
|
class LaborApplyService
|
|
class LaborApplyService
|
|
|
{
|
|
{
|
|
|
//超时时间 默认为19:00
|
|
//超时时间 默认为19:00
|
|
|
- const TIME_OUT_HOUR = 19;
|
|
|
|
|
|
|
+ const TIME_OUT_HOUR = 18;
|
|
|
const LABOR_APPLY_STATUS = 'LABOR_APPLY_STATUS';
|
|
const LABOR_APPLY_STATUS = 'LABOR_APPLY_STATUS';
|
|
|
|
|
+ //上次次临时工申请分配的时间
|
|
|
|
|
+ const LATELY_LABOR_COMPANY_DISPATCH_CREATED_AT = 'LATELY_LABOR_COMPANY_DISPATCH_CREATED_AT';
|
|
|
const LABOR_APPLY_STATUS_TTL = 60 * 30;
|
|
const LABOR_APPLY_STATUS_TTL = 60 * 30;
|
|
|
//到岗日期是申请日期的前一天 为保证数据正确 计算实际人数的时间为到岗日期的后一天 故时间为2
|
|
//到岗日期是申请日期的前一天 为保证数据正确 计算实际人数的时间为到岗日期的后一天 故时间为2
|
|
|
const CALCULATION_ARRIVED_MAN_NUM_DEFAULT_SUB_DAYS = 2;
|
|
const CALCULATION_ARRIVED_MAN_NUM_DEFAULT_SUB_DAYS = 2;
|
|
@@ -51,6 +53,14 @@ class LaborApplyService
|
|
|
Cache::put(self::LABOR_APPLY_STATUS, $status, self::LABOR_APPLY_STATUS_TTL);
|
|
Cache::put(self::LABOR_APPLY_STATUS, $status, self::LABOR_APPLY_STATUS_TTL);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public function allocationAppendLaborToLaborCompany()
|
|
|
|
|
+ {
|
|
|
|
|
+ $lately_allocation_at = Cache::get(self::LATELY_LABOR_COMPANY_DISPATCH_CREATED_AT);
|
|
|
|
|
+ $labor_applies = LaborApply::query()
|
|
|
|
|
+ ->where('created_at', '>=', $lately_allocation_at)
|
|
|
|
|
+ ->get();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 生产劳务派遣报表
|
|
* 生产劳务派遣报表
|
|
|
*
|
|
*
|
|
@@ -60,27 +70,37 @@ class LaborApplyService
|
|
|
* 按照仓库查询对应的劳务所 按照优先级排序
|
|
* 按照仓库查询对应的劳务所 按照优先级排序
|
|
|
* 将男女工之和依次分配到 劳务所
|
|
* 将男女工之和依次分配到 劳务所
|
|
|
* 如果分配完成后 发现还有剩下的 则将状态设置为2
|
|
* 如果分配完成后 发现还有剩下的 则将状态设置为2
|
|
|
|
|
+ * @param bool $isAppend
|
|
|
|
|
+ * @return array
|
|
|
*/
|
|
*/
|
|
|
- public function allocationLaborToLaborCompany(): array
|
|
|
|
|
|
|
+ public function allocationLaborToLaborCompany(bool $isAppend=false): array
|
|
|
{
|
|
{
|
|
|
-
|
|
|
|
|
//当前时间小于 1.00 禁止生成数据
|
|
//当前时间小于 1.00 禁止生成数据
|
|
|
if (now()->lte(now()->startOfDay()->addHours(1))) return ['success' => false, 'error_message' => '当前时间禁止生成临时工派遣数据'];
|
|
if (now()->lte(now()->startOfDay()->addHours(1))) return ['success' => false, 'error_message' => '当前时间禁止生成临时工派遣数据'];
|
|
|
|
|
+ //上次分配时间 默认为前一天的18:00
|
|
|
|
|
+ $lately_allocation_at = now()->subDay()->startOfDay()->addHours(self::TIME_OUT_HOUR);
|
|
|
|
|
+ //缓存中有上次的同步时间
|
|
|
|
|
+ if (Cache::has(self::LATELY_LABOR_COMPANY_DISPATCH_CREATED_AT)) {
|
|
|
|
|
+ $lately_allocation_at = Cache::get(self::LATELY_LABOR_COMPANY_DISPATCH_CREATED_AT);
|
|
|
|
|
+ }
|
|
|
//派遣日期 为报表生成日期的后一天
|
|
//派遣日期 为报表生成日期的后一天
|
|
|
$dispatch_date = now()->addDay()->startOfDay()->toDateTimeString();
|
|
$dispatch_date = now()->addDay()->startOfDay()->toDateTimeString();
|
|
|
|
|
|
|
|
- //接口幂等性,删除旧的数据
|
|
|
|
|
- LaborCompanyDispatch::query()->where('dispatch_date', $dispatch_date)->delete();
|
|
|
|
|
-
|
|
|
|
|
//查询全部仓库
|
|
//查询全部仓库
|
|
|
$warehouses = Warehouse::all();
|
|
$warehouses = Warehouse::all();
|
|
|
//给每个仓库计算分配数据 更改申请状态为指派成功
|
|
//给每个仓库计算分配数据 更改申请状态为指派成功
|
|
|
foreach ($warehouses as $warehouse) {
|
|
foreach ($warehouses as $warehouse) {
|
|
|
//查询当日的的申请,将申请的男女工分别加和
|
|
//查询当日的的申请,将申请的男女工分别加和
|
|
|
- $apply_man_nums = DB::table('labor_applies')
|
|
|
|
|
|
|
+ $builder = DB::table('labor_applies')
|
|
|
->selectRaw("sum(man_num) as man_num ,sum(woman_num) as woman_num")
|
|
->selectRaw("sum(man_num) as man_num ,sum(woman_num) as woman_num")
|
|
|
->whereBetween('created_at', [now()->startOfDay(), now()->endOfDay()])
|
|
->whereBetween('created_at', [now()->startOfDay(), now()->endOfDay()])
|
|
|
- ->where('warehouse_id', $warehouse->id)
|
|
|
|
|
|
|
+ ->where('warehouse_id', $warehouse->id);
|
|
|
|
|
+ //如果是追加模式
|
|
|
|
|
+ if ($isAppend) {
|
|
|
|
|
+ //只查询最后一次分配后的申请
|
|
|
|
|
+ $builder->where('created_at', '>=', $lately_allocation_at);
|
|
|
|
|
+ }
|
|
|
|
|
+ $apply_man_nums = $builder
|
|
|
->groupBy('warehouse_id')
|
|
->groupBy('warehouse_id')
|
|
|
->first();
|
|
->first();
|
|
|
if (empty($apply_man_nums)) continue;
|
|
if (empty($apply_man_nums)) continue;
|
|
@@ -102,6 +122,8 @@ class LaborApplyService
|
|
|
'status' => 2,//指派成功
|
|
'status' => 2,//指派成功
|
|
|
]);
|
|
]);
|
|
|
}
|
|
}
|
|
|
|
|
+ //保存分配时间为当前时间
|
|
|
|
|
+ Cache::put(self::LATELY_LABOR_COMPANY_DISPATCH_CREATED_AT, now());
|
|
|
return ['success' => true, 'message' => '生成临时工派遣数据成功'];
|
|
return ['success' => true, 'message' => '生成临时工派遣数据成功'];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -222,7 +244,7 @@ class LaborApplyService
|
|
|
LaborCompanyDispatch::query()
|
|
LaborCompanyDispatch::query()
|
|
|
->whereDate('dispatch_date', $check_in_at)
|
|
->whereDate('dispatch_date', $check_in_at)
|
|
|
->update([
|
|
->update([
|
|
|
- 'status' => 3//任务完结
|
|
|
|
|
|
|
+ 'status' => 4//任务完结
|
|
|
]);
|
|
]);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|