Browse Source

fix(attendance): 修复补卡时请假数据更新问题

- 新增逻辑处理今天有请假情况下的打卡记录更新
- 使用事务确保数据一致性
- 优化了打卡记录插入流程
master
liutong 10 months ago
parent
commit
d9f0cb75aa
  1. 59
      niucloud/app/api/controller/apiController/Attendance.php

59
niucloud/app/api/controller/apiController/Attendance.php

@ -16,6 +16,7 @@ use app\service\admin\campus\CampusService;
use app\service\api\apiService\AttendanceService; use app\service\api\apiService\AttendanceService;
use app\service\api\apiService\CommonService; use app\service\api\apiService\CommonService;
use core\base\BaseApiService; use core\base\BaseApiService;
use think\facade\Db;
/** /**
* 员工考勤控制器相关接口 * 员工考勤控制器相关接口
@ -115,21 +116,51 @@ class Attendance extends BaseApiService
} }
} }
//插入打卡记录 //获取今天请假的数据(leave_end_time>当前时间的 && attendance_date=当前日期的)请假数据,更新leave_end_time=当前时间
$data = [ //请假的id
'campus_id'=>$campus_id ?? 0,// $leave_id_arr = new \app\model\attendance\Attendance();
'staff_id'=>$staff_id,// if($campus_id === '0' || $campus_id === 0 || !empty($campus_id)){
'attendance_date'=>$attendance_date,// $leave_id_arr = $leave_id_arr->where('campus_id',$campus_id);
'check_in_time'=>$date_h,// }
'status'=>$status,// $leave_id_arr = $leave_id_arr->where('staff_id',$staff_id)
'coordinate'=>$coordinate,//坐标|经度,纬度 ->where('status','leave')
'remarks'=>$remarks,// ->where('attendance_date',$attendance_date)
]; ->where('leave_end_time','>=',$date_h)->column('id');
$res = $obj->addData($data);
if(!$res['code']){ Db::startTrans();
return fail($res['msg']); try {
if($leave_id_arr){
$update = \app\model\attendance\Attendance::whereIn('id',$leave_id_arr)->update([
'leave_end_time'=>$date_h,
'updated_at'=>$date_h,
]);
if(!$update){
// Db::rollback();
// return fail('更新请假数据失败');
}
}
//插入打卡记录
$data = [
'campus_id'=>$campus_id ?? 0,//
'staff_id'=>$staff_id,//
'attendance_date'=>$attendance_date,//
'check_in_time'=>$date_h,//
'status'=>$status,//
'coordinate'=>$coordinate,//坐标|经度,纬度
'remarks'=>$remarks,//
];
$res = $obj->addData($data);
Db::commit();
if(!$res['code']){
Db::rollback();
return fail($res['msg']);
}
return success($res['data']);
}catch (\Exception $e){
Db::rollback();
return fail('操作失败');
} }
return success($res['data']);
} }
//判断是签退 //判断是签退
if($status == 'sign_out'){ if($status == 'sign_out'){

Loading…
Cancel
Save