4 changed files with 341 additions and 2 deletions
@ -0,0 +1,141 @@ |
|||||
|
<?php |
||||
|
// +---------------------------------------------------------------------- |
||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台 |
||||
|
// +---------------------------------------------------------------------- |
||||
|
// | 官方网址:https://www.niucloud.com |
||||
|
// +---------------------------------------------------------------------- |
||||
|
// | niucloud团队 版权所有 开源版本可自由商用 |
||||
|
// +---------------------------------------------------------------------- |
||||
|
// | Author: Niucloud Team |
||||
|
// +---------------------------------------------------------------------- |
||||
|
|
||||
|
namespace app\api\controller\apiController; |
||||
|
|
||||
|
use app\Request; |
||||
|
use app\service\api\apiService\AttendanceService; |
||||
|
use core\base\BaseApiService; |
||||
|
|
||||
|
/** |
||||
|
* 员工考勤控制器相关接口 |
||||
|
* Class Personnel |
||||
|
* @package app\api\controller\apiController |
||||
|
*/ |
||||
|
class Attendance extends BaseApiService |
||||
|
{ |
||||
|
|
||||
|
//列表 |
||||
|
public function index(Request $request){ |
||||
|
|
||||
|
$where = [ |
||||
|
'campus_id' => $request->param('campus_id', ''),// |
||||
|
'staff_id' => $request->param('staff_id', ''),// |
||||
|
'attendance_date' => $request->param('attendance_date', ''),// |
||||
|
'status' => $request->param('status', ''),// |
||||
|
'status_arr' => $request->param('status_arr', []),// |
||||
|
]; |
||||
|
|
||||
|
$res = (new AttendanceService())->getList($where); |
||||
|
return success($res); |
||||
|
} |
||||
|
|
||||
|
//员工考勤-编辑(员工打卡/请假/签退) |
||||
|
public function edit(Request $request){ |
||||
|
$campus_id =$request->param('campus_id','');//校区ID |
||||
|
$staff_id =$this->member_id;//人员ID |
||||
|
$attendance_date =$request->param('attendance_date','');//考勤日期 |
||||
|
$remarks =$request->param('remarks','');//备注 |
||||
|
$status =$request->param('status','');//考勤状态: present-出勤, absent-缺勤, late-迟到, leave_early-早退,leave-请假,sign_out-签退 |
||||
|
$longitude = $request->param('longitude','');//经度 |
||||
|
$latitude = $request->param('latitude','');//纬度 |
||||
|
$coordinate = '';//坐标 |
||||
|
if(!empty($longitude) && !empty($latitude)){ |
||||
|
$coordinate = "{$longitude},{$latitude}"; |
||||
|
} |
||||
|
|
||||
|
if(empty($campus_id) || empty($attendance_date) || empty($status)){ |
||||
|
return fail('缺少参数'); |
||||
|
} |
||||
|
if(!in_array($status,['present','absent','late','leave_early','leave','sign_out'])){ |
||||
|
return fail('状态类型不正确'); |
||||
|
} |
||||
|
|
||||
|
//查询数据是否存在,一天一个校区同一个人只能产生一条数据 |
||||
|
$date_h = date('H:i:s'); |
||||
|
|
||||
|
$obj = (new AttendanceService()); |
||||
|
$info = $obj->info([ |
||||
|
'campus_id'=>$campus_id, |
||||
|
'staff_id'=>$staff_id, |
||||
|
'attendance_date'=>$attendance_date, |
||||
|
])['data']; |
||||
|
|
||||
|
//如果是签退的时候就是修改 |
||||
|
if($status == 'sign_out'){ |
||||
|
|
||||
|
if (($info['status'] ?? '') != 'present') { |
||||
|
return fail('未查询到今日签到信息,无法签退'); |
||||
|
} |
||||
|
|
||||
|
//签退的情况 |
||||
|
$where = [ |
||||
|
'id'=>$info['id'] |
||||
|
]; |
||||
|
$data = [ |
||||
|
'check_out_time'=>$date_h,//签退时间 |
||||
|
'coordinate'=>$coordinate,//坐标|经度,纬度 |
||||
|
]; |
||||
|
//执行修改操作 |
||||
|
$res = $obj->editData($where,$data); |
||||
|
}else{ |
||||
|
//如果是签到/请假 |
||||
|
$data = [ |
||||
|
'campus_id'=>$campus_id,//校区ID |
||||
|
'staff_id'=>$staff_id,//人员ID |
||||
|
'attendance_date'=>$attendance_date,//考勤日期 |
||||
|
'coordinate'=>$coordinate,//坐标|经度,纬度 |
||||
|
'status'=>$status,//考勤状态 |
||||
|
]; |
||||
|
//如果是签到的情况 |
||||
|
if($info){ |
||||
|
if($status == 'present' && $info['status'] == 'present'){ |
||||
|
//更新签到数据 |
||||
|
//执行修改操作 |
||||
|
$edit_data = [ |
||||
|
'check_in_time'=>$date_h,//签到时间 |
||||
|
'coordinate'=>$coordinate,//坐标|经度,纬度 |
||||
|
'status'=>$status//考勤状态 |
||||
|
]; |
||||
|
$res = $obj->editData(['id'=>$info['id']],$edit_data); |
||||
|
if(!$res['code']){ |
||||
|
return fail($res['msg']); |
||||
|
} |
||||
|
return success($res['data']); |
||||
|
} |
||||
|
$status_arr = (new \app\model\attendance\Attendance())::STATUS; |
||||
|
$status_name = $status_arr[$info['status']] ?? ''; |
||||
|
if(!$status_name){ |
||||
|
$status_name = '考勤'; |
||||
|
} |
||||
|
return fail("今日已{$status_name}重复操作"); |
||||
|
}else{ |
||||
|
$data['check_in_time'] = $date_h;//签到时间 |
||||
|
if($remarks){ |
||||
|
$data['remarks'] = $remarks; |
||||
|
} |
||||
|
//执行创建操作 |
||||
|
$res = $obj->addData($data); |
||||
|
if(!$res['code']){ |
||||
|
return fail($res['msg']); |
||||
|
} |
||||
|
return success($res['data']); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,156 @@ |
|||||
|
<?php |
||||
|
// +---------------------------------------------------------------------- |
||||
|
// | Niucloud-admin 企业快速开发的多应用管理平台 |
||||
|
// +---------------------------------------------------------------------- |
||||
|
// | 官方网址:https://www.niucloud.com |
||||
|
// +---------------------------------------------------------------------- |
||||
|
// | niucloud团队 版权所有 开源版本可自由商用 |
||||
|
// +---------------------------------------------------------------------- |
||||
|
// | Author: Niucloud Team |
||||
|
// +---------------------------------------------------------------------- |
||||
|
|
||||
|
namespace app\service\api\apiService; |
||||
|
|
||||
|
use app\model\attendance\Attendance; |
||||
|
use core\base\BaseApiService; |
||||
|
|
||||
|
/** |
||||
|
* 考勤管理服务层 |
||||
|
* Class MemberService |
||||
|
* @package app\service\api\member |
||||
|
*/ |
||||
|
class AttendanceService extends BaseApiService |
||||
|
{ |
||||
|
public function __construct() |
||||
|
{ |
||||
|
parent::__construct(); |
||||
|
$this->model = (new Attendance()); |
||||
|
} |
||||
|
|
||||
|
//列表 |
||||
|
public function getList(array $where, string $field = '*') |
||||
|
{ |
||||
|
$page_params = $this->getPageParam();//获取请求参数中的页码+分页数 |
||||
|
$page = $page_params['page']; |
||||
|
$limit = $page_params['limit']; |
||||
|
|
||||
|
$model = $this->model; |
||||
|
|
||||
|
if (!empty($where['campus_id'])) { |
||||
|
$model = $model->where('campus_id', $where['campus_id']); |
||||
|
} |
||||
|
if (!empty($where['staff_id'])) { |
||||
|
$model = $model->where('staff_id', $where['staff_id']); |
||||
|
} |
||||
|
if (!empty($where['attendance_date'])) { |
||||
|
$model = $model->where('attendance_date', $where['attendance_date']); |
||||
|
} |
||||
|
if (!empty($where['status'])) { |
||||
|
$model = $model->where('status', $where['status']); |
||||
|
} |
||||
|
if (!empty($where['status_arr'])) { |
||||
|
$model = $model->whereIn('status', $where['status_arr']); |
||||
|
} |
||||
|
|
||||
|
$res = $model->with([ |
||||
|
'campus', |
||||
|
'personnel', |
||||
|
])->append([ |
||||
|
'status_name' |
||||
|
]) |
||||
|
->order('created_at','desc') |
||||
|
->paginate([ |
||||
|
'list_rows' => $limit, |
||||
|
'page' => $page, |
||||
|
])->toArray(); |
||||
|
return $res; |
||||
|
} |
||||
|
|
||||
|
//查询详情 |
||||
|
public function info(array $where, string $field = '*') |
||||
|
{ |
||||
|
$res = [ |
||||
|
'code' => 0, |
||||
|
'msg' => '操作失败', |
||||
|
'data' => [], |
||||
|
]; |
||||
|
if (empty($where)) { |
||||
|
$res['msg'] = '筛选条件不能唯空'; |
||||
|
return $res; |
||||
|
} |
||||
|
$model = $this->model; |
||||
|
if (!empty($where['id'])) { |
||||
|
$model = $model->where('id', $where['id']); |
||||
|
} |
||||
|
if (!empty($where['campus_id'])) { |
||||
|
$model = $model->where('campus_id', $where['campus_id']); |
||||
|
} |
||||
|
if (!empty($where['staff_id'])) { |
||||
|
$model = $model->where('staff_id', $where['staff_id']); |
||||
|
} |
||||
|
if (!empty($where['attendance_date'])) { |
||||
|
$model = $model->where('attendance_date', $where['attendance_date']); |
||||
|
} |
||||
|
$data = $model->field($field)->find(); |
||||
|
if ($data) { |
||||
|
$res = [ |
||||
|
'code' => 1, |
||||
|
'msg' => '操作成功', |
||||
|
'data' => $data->toArray(), |
||||
|
]; |
||||
|
} else { |
||||
|
$res['msg'] = '暂无数据'; |
||||
|
} |
||||
|
|
||||
|
return $res; |
||||
|
} |
||||
|
|
||||
|
//添加数据 |
||||
|
public function addData(array $data) |
||||
|
{ |
||||
|
|
||||
|
$add = $this->model->create($data); |
||||
|
if ($add) { |
||||
|
$res = [ |
||||
|
'code' => 1, |
||||
|
'msg' => '操作成功', |
||||
|
'data' => [], |
||||
|
]; |
||||
|
} else { |
||||
|
$res = [ |
||||
|
'code' => 0, |
||||
|
'msg' => '操作失败', |
||||
|
'data' => [], |
||||
|
]; |
||||
|
} |
||||
|
return $res; |
||||
|
} |
||||
|
|
||||
|
//编辑数据 |
||||
|
public function editData(array $where, array $data) |
||||
|
{ |
||||
|
|
||||
|
$data['updated_at'] = date('Y-m-d H:i:s'); |
||||
|
$model = $this->model; |
||||
|
if (!empty($where['id'])) { |
||||
|
$model = $model->where('id', $where['id']); |
||||
|
} |
||||
|
$edit = $model->update($data); |
||||
|
if ($edit) { |
||||
|
$res = [ |
||||
|
'code' => 1, |
||||
|
'msg' => '操作成功', |
||||
|
'data' => [], |
||||
|
]; |
||||
|
} else { |
||||
|
$res = [ |
||||
|
'code' => 0, |
||||
|
'msg' => '操作失败', |
||||
|
'data' => [], |
||||
|
]; |
||||
|
} |
||||
|
return $res; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
Loading…
Reference in new issue