|
|
@@ -9,8 +9,10 @@ use App\LaborApply;
|
|
|
use App\Warehouse;
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
use Illuminate\Database\Eloquent\Collection;
|
|
|
+use Illuminate\Support\Carbon;
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
+use function DeepCopy\deep_copy;
|
|
|
|
|
|
class LaborApplyService
|
|
|
{
|
|
|
@@ -18,6 +20,10 @@ class LaborApplyService
|
|
|
const TIME_OUT_HOUR = 19;
|
|
|
const LABOR_APPLY_STATUS = 'LABOR_APPLY_STATUS';
|
|
|
const LABOR_APPLY_STATUS_TTL = 60 * 30;
|
|
|
+ //到岗日期是申请日期的前一天 为保证数据正确 计算实际人数的时间为到岗日期的后一天 故时间为2
|
|
|
+ const CALCULATION_ARRIVED_MAN_NUM_DEFAULT_SUB_DAYS = 2;
|
|
|
+ //临时工工作时长最小值 低于这个时间的不计入
|
|
|
+ const CALCULATION_ARRIVED_MAN_NUM_MIN_ONLINE_DURATION = 1;
|
|
|
use ServiceAppAop;
|
|
|
|
|
|
protected $modelClass = LaborApply::class;
|
|
|
@@ -140,6 +146,7 @@ class LaborApplyService
|
|
|
'woman_num' => $dispatch_woman_num,
|
|
|
'dispatch_date' => $dispatch_date,
|
|
|
'exceed_max_labor_num_status' => LaborCompanyDispatch::NOT_EXCEED_MAX_LABOR_NUM,//没有超限额
|
|
|
+ 'status' => 1,//创建
|
|
|
];
|
|
|
}
|
|
|
|
|
|
@@ -168,4 +175,54 @@ class LaborApplyService
|
|
|
}
|
|
|
return $builder->get();
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 按照给定的申请日期计算到岗人数
|
|
|
+ *
|
|
|
+ * 查询指定日期的 每个小组的申请人数
|
|
|
+ * 遍历申请数据
|
|
|
+ * 根据申请数据的仓库小组id,日期(申请日期后一天)查询打卡数据,计算人数之和 更新申请表actual_num
|
|
|
+ * @param Carbon|null $apply_date
|
|
|
+ */
|
|
|
+ public function calculationArrivedManNum(Carbon $apply_date = null)
|
|
|
+ {
|
|
|
+ //查询的申请日期
|
|
|
+ if (empty($apply_date)) {
|
|
|
+ $apply_date = now()->subDays(self::CALCULATION_ARRIVED_MAN_NUM_DEFAULT_SUB_DAYS);
|
|
|
+ }
|
|
|
+ //查询指定日期的 每个小组的申请人数
|
|
|
+ $laborApplies = DB::table('labor_applies')
|
|
|
+ ->selectRaw('user_workgroup_id as user_workgroup_id , sum(man_num + woman_num) as apply_num , warehouse_id')
|
|
|
+ ->whereDate('created_at', $apply_date->toDateString())
|
|
|
+ ->groupBy('user_workgroup_id','warehouse_id')
|
|
|
+ ->get();
|
|
|
+ //根据申请数据的仓库小组id,日期(申请日期后一天)
|
|
|
+ $check_in_at = deep_copy($apply_date)->addDay()->toDateString();
|
|
|
+ //遍历申请数据
|
|
|
+ foreach ($laborApplies as $laborApply) {
|
|
|
+ //查询打卡数据,计算人数之和
|
|
|
+ $arrived_num =
|
|
|
+ DB::table('labor_reports')
|
|
|
+ ->selectRaw("count( DISTINCT 'identity_number',identity_number) as num")//根据身份证号去重防止重复入组
|
|
|
+
|
|
|
+ ->where('user_workgroup_id', $laborApply->user_workgroup_id)
|
|
|
+ ->whereDate('check_in_at', $check_in_at)
|
|
|
+ ->where('online_duration', '>=', self::CALCULATION_ARRIVED_MAN_NUM_MIN_ONLINE_DURATION)
|
|
|
+ ->first()->num;
|
|
|
+ //更新申请表actual_num
|
|
|
+ LaborApply::query()
|
|
|
+ ->whereDate('created_at', deep_copy($apply_date)->toDateString())
|
|
|
+ ->where('user_workgroup_id', $laborApply->user_workgroup_id)
|
|
|
+ ->update([
|
|
|
+ 'actual_num' => $arrived_num,
|
|
|
+ 'status' => 4,//任务完结
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ //根据分配时间完结任务 $check_in_at:实际入场日期 就是 dispatch_date
|
|
|
+ LaborCompanyDispatch::query()
|
|
|
+ ->whereDate('dispatch_date', $check_in_at)
|
|
|
+ ->update([
|
|
|
+ 'status' => 3//任务完结
|
|
|
+ ]);
|
|
|
+ }
|
|
|
}
|