|
@@ -49,12 +49,12 @@ class KqService extends Service
|
|
|
->groupBy('number', DB::raw('FROM_UNIXTIME(crt_time, "%Y-%m-%d")'))
|
|
|
->get()
|
|
|
->toArray();
|
|
|
- $return = $this->fillKqCollectData($list);
|
|
|
+ $return = $this->fillKqCollectData($list, $return);
|
|
|
|
|
|
return [true, $return];
|
|
|
}
|
|
|
|
|
|
- public function fillKqCollectData($data){
|
|
|
+ public function fillKqCollectData($data, $time){
|
|
|
if(empty($data)) return $data;
|
|
|
|
|
|
//这边需要把数据处理成每人的总统计
|
|
@@ -63,11 +63,13 @@ class KqService extends Service
|
|
|
$work_start_time = '09:00:00';
|
|
|
$work_end_time = '18:00:00';
|
|
|
//超过2个小时算加班,并且+1
|
|
|
- $overtime_hour = 1;
|
|
|
- $overtime = '2';
|
|
|
+// $overtime = '2';
|
|
|
+
|
|
|
+ //加班数据
|
|
|
+ $overList = $this->getOverTimeData($data, $time);
|
|
|
|
|
|
foreach ($data as $v){
|
|
|
- if(!isset($total_key[$v['number']])){
|
|
|
+ if(! isset($total_key[$v['number']])){
|
|
|
$total_key[$v['number']] = [
|
|
|
'number' => $v['number'],
|
|
|
'name' => $v['name'],
|
|
@@ -81,14 +83,17 @@ class KqService extends Service
|
|
|
'overtime_time' => 0,
|
|
|
];
|
|
|
}
|
|
|
- //有数据就考勤+1,
|
|
|
+ //有数据 考勤天数加一
|
|
|
$total = $total_key[$v['number']];
|
|
|
$total['kq_day']++;
|
|
|
|
|
|
+ //当天总时长
|
|
|
$kq_time = bcdiv($v['max_crt_time'] - $v['min_crt_time'], 3600,2);
|
|
|
+ if($kq_time < 0) $kq_time = 0;
|
|
|
$kq_time = bcadd($kq_time, $total['kq_time'],2);
|
|
|
$total['kq_time'] = $kq_time;
|
|
|
|
|
|
+ //迟到
|
|
|
$begin_time = strtotime($v['date'].' '.$work_start_time);
|
|
|
if($begin_time < $v['min_crt_time']){
|
|
|
$total['later_day']++;
|
|
@@ -97,6 +102,7 @@ class KqService extends Service
|
|
|
$total['later_time'] = $later_time;
|
|
|
}
|
|
|
|
|
|
+ //早退
|
|
|
$end_time = strtotime($v['date'].' '.$work_end_time);
|
|
|
if($end_time > $v['max_crt_time']){
|
|
|
$total['early_day']++;
|
|
@@ -105,22 +111,59 @@ class KqService extends Service
|
|
|
$total['early_time'] = $early_time;
|
|
|
}
|
|
|
|
|
|
- $overtime = strtotime($v['date'].' '.$work_end_time)+$overtime*3600;
|
|
|
-
|
|
|
- if($overtime < $v['max_crt_time']){
|
|
|
- $total['overtime_day']++;
|
|
|
- $overtime_time = bcdiv($overtime - $v['max_crt_time'], 3600,2);
|
|
|
- $overtime_time = bcadd($overtime_time, $total['overtime_time'],2);
|
|
|
- $total['overtime_time'] = $overtime_time;
|
|
|
- }
|
|
|
+// $overtime = strtotime($v['date'].' '.$work_end_time)+$overtime*3600;
|
|
|
+// if($overtime < $v['max_crt_time']){
|
|
|
+// $total['overtime_day']++;
|
|
|
+// $overtime_time = bcdiv($overtime - $v['max_crt_time'], 3600,2);
|
|
|
+// $overtime_time = bcadd($overtime_time, $total['overtime_time'],2);
|
|
|
+// $total['overtime_time'] = $overtime_time;
|
|
|
+// }
|
|
|
|
|
|
$total_key[$v['number']] = $total;
|
|
|
}
|
|
|
|
|
|
+ foreach ($total_key as $key => $value){
|
|
|
+ //加班
|
|
|
+ $over = $overList[$key];
|
|
|
+ $total_key[$key]['overtime_day'] = $over['overtime_day'] ?? 0;
|
|
|
+ $total_key[$key]['overtime_time'] = $over['overtime_time'] ?? 0;
|
|
|
+ }
|
|
|
+
|
|
|
sort($total_key);
|
|
|
return $total_key;
|
|
|
}
|
|
|
|
|
|
+ public function getOverTimeData($data, $time){
|
|
|
+ $emp = Employee::whereIn('number', array_column($data, 'number'))->select('id')->get()->toArray();
|
|
|
+ $emp_id = array_column($emp,'id');
|
|
|
+ $emp_map = array_column($emp,'number','id');
|
|
|
+ $overList = KqOvertime::where('del_time',0)
|
|
|
+ ->where('start_time','<=',$time[1])
|
|
|
+ ->where('end_time','>=',$time[0])
|
|
|
+ ->where('state', KqOvertime::STATE_TWO)
|
|
|
+ ->whereIn('crt_id',$emp_id)
|
|
|
+ ->get()->toArray();
|
|
|
+
|
|
|
+ $overtime_count = [];
|
|
|
+ foreach ($overList as $value){
|
|
|
+ $number = $emp_map[$value['crt_id']] ?? "";
|
|
|
+ if(! $number) continue;
|
|
|
+ $overtime_time = bcdiv($value['end_time'] - $value['start_time'], 3600,2);
|
|
|
+ if(isset($overtime_count[$number])){
|
|
|
+ $overtime_count[$number]['overtime_day'] += 1;
|
|
|
+ $overtime_time = bcadd($overtime_time, $overtime_count[$number]['overtime_time'],2);
|
|
|
+ $overtime_count[$number]['overtime_day'] = $overtime_time;
|
|
|
+ }else{
|
|
|
+ $overtime_count[$number] = [
|
|
|
+ 'overtime_day' => 1,
|
|
|
+ 'overtime_time' => $overtime_time
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $overtime_count;
|
|
|
+ }
|
|
|
+
|
|
|
public function kqForLeaveEdit($data,$user){
|
|
|
list($status,$msg) = $this->kqForLeaveRule($data, $user, false);
|
|
|
if(! $status) return [$status,$msg];
|