request->user['user_id'] ?? 0; $id = input('id/d');//待审核记录ID if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { // 工地负责人才能查看 return $this->json(4003, '无查看权限'); } if (!$item = CheckLog::findById($id)) { return $this->json(4004, '记录不存在'); } $item = arrayNullToString($item->toArray()); $fields = Account::needCheckFields(); array_push($fields, 'id', 'role', 'work_at', 'worksite_id'); $user = Account::findById($item['account_id'], $fields)->toArray(); $user = arrayNullToString($user); $positionList = Position::column('name', 'id'); $item['position_name'] = $positionList[$item['position']] ?? ''; $user['position_name'] = $positionList[$user['position']] ?? ''; // user角色为工人时,需要判断当前人是否是该工地的负责人 if (!empty($user) && $user['role'] == Account::COMMON_ON) { $managerIds = AccountWorksite::where('worksite_id', $user['worksite_id'])->column('account_id'); if (!in_array($accountId, $managerIds)) { return $this->json(4003, '无查看权限2'); } } $item['account'] = $user; return $this->json(0, 'success', $item); } catch (Exception $e) { return $this->json(4000, '没有相关的用户记录'.$e->getMessage()); } } // 审核列表(员工资料提交的审核) public function checkList(): Json { $page = input('page/d', 1); $size = input('size/d', 20); $keyword = input('keyword/s'); $status = input('status/d', 0);//状态 0=待审核 1=已审核(包含1通过 -1不通过) $accountId = $this->request->user['user_id'] ?? 0; if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { return $this->json(4003, '无查看权限'); } $where = []; if (!empty($keyword)) { $where[] = ['cl.real_name|cl.mobile', 'like', '%'.$keyword.'%']; } if ($status == 0) { $where[] = ['cl.status', '=', 0]; } else { $where[] = ['cl.status', 'in', [1, -1]]; } // 负责工地 $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); $where[] = ['cl.worksite_id', 'in', $worksiteIds]; $query = CheckLog::alias('cl') ->leftJoin('account a', 'a.id = cl.account_id') ->leftJoin('position p', 'p.id = cl.position') ->field('cl.id,cl.real_name,cl.status,cl.created_at,p.name as position_name') ->where($where); $total = $query->count(); $res = [ 'total' => $total, 'current' => $page ?: 1, 'size' => $size ?: 20, 'list' => new Collection(), ]; if ($total > 0) { $res['list'] = $query->page($page, $size)->order('cl.id', 'desc')->select(); $res['list']->each(function ($item) { $item->created_at = date('Y年m月d日 H:i:s', strtotime($item->created_at)); }); $res['list'] = arrayNullToString($res['list']->toArray()); } return $this->json(0, 'success', $res); } /** * 审核资料(工人信息注册或二次修改审核) * * @return Json */ public function checkInfo(): Json { try { $accountId = $this->request->user['user_id'] ?? 0; $type = input('type/d', 1);//类型 1=通过 0=不通过 $id = input('id/d');//待审核记录ID $reason = input('reason/s');//不通过原因 if (!in_array($type, [0, 1])) { return $this->json(4001, '审核参数错误'); } if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { // 工地负责人才能操作 return $this->json(4003, '无此权限'); } if (!$item = CheckLog::findById($id)) { return $this->json(4004, '记录不存在'); } if ($item['status'] != CheckLog::COMMON_OFF) { return $this->json(4002, '状态错误'); } $user = Account::getUser($item['account_id']); // user角色为工人时,需要判断当前人是否是该工地的负责人 if (!empty($user) && $user['role'] == Account::COMMON_ON) { $managerIds = AccountWorksite::where('worksite_id', $user['worksite_id'])->column('account_id'); if (!in_array($accountId, $managerIds)) { return $this->json(4003, '无此权限2'); } } // 审核不通过 if ($type == 0) { Account::where('id', $item['account_id'])->save(['checking' => Account::COMMON_OFF]); $item->save(['status' => -1, 'refund_reason' => $reason]); return $this->json(); } $now = date('Y-m-d H:i:s'); $update = $item->toArray(); if ($update['is_register'] == CheckLog::COMMON_ON) { $update['role'] = CheckLog::COMMON_ON; $update['work_at'] = $now; } $update['checking'] = Account::COMMON_OFF; unset($update['id']); unset($update['account_id']); unset($update['is_register']); unset($update['status']); unset($update['created_at']); unset($update['check_at']); unset($update['refund_reason']); Account::where('id', $item['account_id'])->save($update); $item->save(['status' => 1, 'check_at' => $now]); return $this->json(); } catch (Exception $e) { return $this->json(4000, '没有相关的用户记录'.$e->getMessage()); } } // 打卡记录 public function clockList(): Json { $page = input('page/d', 1); $size = input('size/d', 20); $status = input('status/d', 0);//状态 0=待审核 1=已审核(包含1通过 -1不通过) $accountId = $this->request->user['user_id'] ?? 0; if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { return $this->json(4003, '无权限'); } $where = []; if ($status == 0) { $where[] = ['cl.status', '=', 0]; } else { $where[] = ['cl.status', 'in', [1, -1]]; } // 负责工地 $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); $where[] = ['cl.worksite_id', 'in', $worksiteIds]; $query = \app\model\ClockLog::alias('cl') ->leftJoin('account a', 'a.id = cl.account_id') ->leftJoin('worksite w', 'w.id = cl.worksite_id') ->field('cl.*,w.name as worksite_name,a.real_name as worker_name') ->where($where); $total = $query->count(); $res = [ 'total' => $total, 'current' => $page ?: 1, 'size' => $size ?: 20, 'list' => new Collection(), ]; if ($total > 0) { $res['list'] = $query->page($page, $size)->order('cl.id', 'desc')->select(); $res['list']->each(function ($item) { $item->type_text = $item->type == 'in' ? '上班' : '下班'; switch ($item->status) { case 0: $item->status_text = '待确认'; break; case 1: $item->status_text = '已确认'; break; case -1: $item->status_text = '不通过'; break; } unset($item->check_by); unset($item->check_at); unset($item->account_id); unset($item->create_time); unset($item->type); unset($item->worksite_id); }); $res['list'] = arrayNullToString($res['list']->toArray()); } return $this->json(0, 'success', $res); } /** * 审核打卡 支持批量 * * @return Json */ public function checkClock(): Json { try { $accountId = $this->request->user['user_id'] ?? 0; $type = input('type/d', 1);//类型 1=通过 0=不通过 $ids = input('id/s');//待审核记录ID 多个用逗号分割 $ids = explode(',', $ids); $ids = array_filter($ids); if (!in_array($type, [0, 1])) { return $this->json(4001, '审核参数错误'); } if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { // 工地负责人才能操作 return $this->json(4003, '无此权限'); } $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); if (ClockLog::whereIn('id', $ids)->whereNotIn('worksite_id', $worksiteIds)->count() > 0) { return $this->json(4003, '部分记录不在您权限操作的范围'); } ClockLog::whereIn('id', $ids)->where('status', ClockLog::COMMON_OFF)->update([ 'status' => $type == 1 ? 1 : -1, 'check_at' => date('Y-m-d H:i:s'), 'check_by' => $accountId ]); return $this->json(); } catch (Exception $e) { return $this->json(5000, '审核失败'.$e->getMessage()); } } // 加班记录 public function overtimeList(): Json { $page = input('page/d', 1); $size = input('size/d', 20); $status = input('status/d', 0);//状态 0=待审核 1=已审核(包含1通过 -1不通过) $accountId = $this->request->user['user_id'] ?? 0; if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { return $this->json(4003, '无权限'); } $where = []; if ($status == 0) { $where[] = ['cl.status', '=', 0]; } else { $where[] = ['cl.status', 'in', [1, -1]]; } // 负责工地 $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); $where[] = ['cl.worksite_id', 'in', $worksiteIds]; $query = \app\model\OvertimeLog::alias('cl') ->leftJoin('account a', 'a.id = cl.account_id') ->leftJoin('worksite w', 'w.id = cl.worksite_id') ->field('cl.*,w.name as worksite_name,a.real_name as worker_name') ->where($where); $total = $query->count(); $res = [ 'total' => $total, 'current' => $page ?: 1, 'size' => $size ?: 20, 'list' => new Collection(), ]; if ($total > 0) { $res['list'] = $query->page($page, $size)->order('cl.id', 'desc')->select(); $res['list']->each(function ($item) { switch ($item->status) { case 0: $item->status_text = '待确认'; break; case 1: $item->status_text = '已确认'; break; case -1: $item->status_text = '不通过'; break; } $item->create_time = date('Y年m月d日 H:i:s', $item->create_time); $item->worktime = date('Y年m月d日', strtotime($item->day)); unset($item->check_by); unset($item->check_at); unset($item->account_id); unset($item->created_at); unset($item->type); unset($item->day); unset($item->day_text); unset($item->worksite_id); unset($item->is_statistic ); }); $res['list'] = arrayNullToString($res['list']->toArray()); } return $this->json(0, 'success', $res); } /** * 审核加班 支持批量 * * @return Json */ public function checkOvertime(): Json { try { $accountId = $this->request->user['user_id'] ?? 0; $type = input('type/d', 1);//类型 1=通过 0=不通过 $ids = input('id/s');//待审核记录ID 多个用逗号分割 $ids = explode(',', $ids); $ids = array_filter($ids); if (!in_array($type, [0, 1])) { return $this->json(4001, '审核参数错误'); } if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { // 工地负责人才能操作 return $this->json(4003, '无此权限'); } $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); if (OvertimeLog::whereIn('id', $ids)->whereNotIn('worksite_id', $worksiteIds)->count() > 0) { return $this->json(4003, '部分记录不在您权限操作的范围'); } OvertimeLog::whereIn('id', $ids)->where('status', ClockLog::COMMON_OFF)->update([ 'status' => $type == 1 ? 1 : -1, 'check_at' => date('Y-m-d H:i:s'), 'check_by' => $accountId, ]); return $this->json(); } catch (Exception $e) { return $this->json(5000, '审核失败'.$e->getMessage()); } } // 工资记录MOCK public function payListMock(): Json { $page = input('page/d', 1); $size = input('size/d', 20); $status = input('status/d', -1); $date = input('data/s', ''); $accountId = $this->request->user['user_id'] ?? 0; $where = []; if (!empty($keyword)) { $where[] = ['w.name', 'like', '%'.$keyword.'%']; } if ($status >= 0) { $where[] = ['w.status', '=', $status]; } if (!empty($date)) { $date = str_replace('_', '', $date); $where[] = ['cl.time', '=', $date]; } $where[] = ['cl.account_id', '=', $accountId]; // $query = \app\model\ClockLog::alias('cl') // ->leftJoin('worksite w', 'w.id = cl.worksite_id') // ->field('cl.*,w.name as worksite_name') // ->where($where); // // $total = $query->count(); $total = 20; $res = [ 'total' => $total, 'current' => $page ?: 1, 'size' => $size ?: 20, 'info' => [], 'list' => new Collection(), ]; if ($total > 0) { $res['info'] = [ 'amount' => 999999,//工资总金额 'base_amount' => 20000,//基本工资 'overtime_amount' => 20000,//加班工资 'not_amount' => 20000,//未发放 'done_amount' => 20000,//已发放 ]; $res['list'] = [ [ 'name' => '张珊珊', 'status' => 0, 'status_text' => '待发放', 'base_amount' => 7500, 'overtime_amount' => 0, 'amount' => 7500, ], [ 'name' => '李珊珊', 'status' => 0, 'status_text' => '待发放', 'base_amount' => 7500, 'overtime_amount' => 0, 'amount' => 7500, ], [ 'name' => '王珊珊', 'status' => 0, 'status_text' => '待发放', 'base_amount' => 7500, 'overtime_amount' => 0, 'amount' => 7500, ], [ 'name' => '张珊珊', 'status' => 0, 'status_text' => '待发放', 'base_amount' => 7500, 'overtime_amount' => 0, 'amount' => 7500, ], [ 'name' => '刘珊珊', 'status' => 0, 'status_text' => '待发放', 'base_amount' => 7500, 'overtime_amount' => 0, 'amount' => 7500, ], [ 'name' => '谢珊珊', 'status' => 0, 'status_text' => '待发放', 'base_amount' => 7500, 'overtime_amount' => 0, 'amount' => 7500, ], [ 'name' => '吴珊珊', 'status' => 0, 'status_text' => '待发放', 'base_amount' => 7500, 'overtime_amount' => 0, 'amount' => 7500, ], ]; } return $this->json(0, 'success', $res); } // 工资记录 public function payList(): Json { $page = input('page/d', 1); $size = input('size/d', 20); $status = input('status/d', -1); $date = input('date/s', ''); $accountId = $this->request->user['user_id'] ?? 0; $where = []; if (!empty($date)) { $date = str_replace('_', '', $date); $where[] = ['pml.time', '=', $date]; } $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); $total = 0; $res = [ 'total' => $total, 'current' => $page ?: 1, 'size' => $size ?: 20, 'info' => [], 'list' => new Collection(), ]; if (empty($worksiteIds)) { return $this->json(0, 'success', $res); } // 当前明确说明 负责人和工地是一对一关系 $where[] = ['pml.worksite_id', '=', $worksiteIds[0]]; $query = \app\model\PayMonthLog::alias('pml') // ->leftJoin('account a', 'a.id = pml.account_id') ->where($where); // 汇总信息 $info = $query->fieldRaw('sum(pml.amount) as amount, sum(pml.base_amount) as base_amount, sum(pml.overtime_amount) as overtime_amount')->find()->toArray(); // 已发放工资 $doneAmount = $query->where('pml.status', 1)->fieldRaw('sum(pml.amount) as amount')->find()->toArray(); $res['info'] = [ 'amount' => $info['amount'] ?? 0, 'base_amount' => $info['base_amount'] ?? 0, 'overtime_amount' => $info['overtime_amount'] ?? 0, 'done_amount' => $doneAmount['amount'] ?? 0, 'not_amount' => Math::sub($info['amount'] ?? 0, $doneAmount['amount'] ?? 0), ]; if ($status >= 0) { $where[] = ['pml.status', '=', $status]; } $query = \app\model\PayMonthLog::alias('pml') ->leftJoin('account a', 'a.id = pml.account_id') ->where($where); $total = $query->count(); $res['total'] = $total; if ($total > 0) { $res['list'] = $query->field('pml.id,pml.status,pml.amount,pml.base_amount,pml.overtime_amount,a.real_name as name')->page($page, $size)->order('pml.id', 'desc')->select(); $res['list']->each(function ($item) { $item->status_text = $item->status == 1 ? '已发放' : '待发放'; }); } return $this->json(0, 'success', $res); } // 工人列表 public function workerList(): Json { $page = input('page/d', 1); $size = input('size/d', 20); $keyword = input('keyword/s'); $accountId = $this->request->user['user_id'] ?? 0; if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { return $this->json(4003, '无查看权限'); } $where = []; if (!empty($keyword)) { $where[] = ['a.real_name|a.mobile', 'like', '%'.$keyword.'%']; } // 负责工地 $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); $where[] = ['a.worksite_id', 'in', $worksiteIds]; $where[] = ['a.role', '=', Account::ROLE_WORKER]; $query = Account::alias('a') ->leftJoin('worksite w', 'a.worksite_id = w.id') ->field('a.id,a.real_name,a.work_at,w.name as worksite_name') ->where($where); $total = $query->count(); $res = [ 'total' => $total, 'current' => $page ?: 1, 'size' => $size ?: 20, 'list' => new Collection(), ]; if ($total > 0) { $list = $query->page($page, $size)->order('a.id', 'desc')->select(); $accountList = $list->column('id'); $starList = Db::query("SELECT `star`,`account_id` FROM `bee_account_star` WHERE `id` IN (SELECT max(id) FROM `bee_account_star` WHERE FIND_IN_SET(account_id, ?) GROUP BY `account_id`)", [implode(',', $accountList)]); $starArr = []; foreach ($starList as $l) { $starArr[$l['account_id']] = $l['star']; } $res['list'] = $list; $res['list']->each(function ($item) use ($starArr) { $item->star = $starArr[$item->id] ?? 0; }); $res['list'] = arrayNullToString($res['list']->toArray()); } return $this->json(0, 'success', $res); } /** * 工人评定 * * @return Json */ public function star(): Json { try { $accountId = $this->request->user['user_id'] ?? 0; $star = input('star/d', 5);//星级 默认5 $id = input('id/s'); if (!in_array($star, [1, 2, 3, 4, 5])) { return $this->json(4001, '参数错误'); } if (!$account = Account::findById($accountId, ['id, role, worksite_id'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { // 工地负责人才能操作 return $this->json(4003, '无此权限'); } $ym = date('Ym'); if (AccountStar::where('ym', $ym)->where('type', AccountStar::TYPE_WORKER)->where('account_id', $id)->count() > 0) { return $this->json(4001, '本月已评'); } AccountStar::create([ 'type' => AccountStar::TYPE_WORKER, 'star' => $star, 'account_id' => $id, 'worksite_id' => $account['worksite_id'], 'year' => date('Y'), 'month' => date('m'), 'ym' => $ym, 'operated_by' => $accountId, 'created_at' => date('Y-m-d H:i:s'), ]); return $this->json(); } catch (Exception $e) { return $this->json(5000, '评定失败'.$e->getMessage()); } } /** * 审核离职 支持批量 * * @return Json */ public function checkDimission(): Json { try { $accountId = $this->request->user['user_id'] ?? 0; $reason = input('reason/s', ''); $type = input('type/d', 1);//类型 1=通过 0=不通过 $ids = input('id/s');//待审核记录ID 多个用逗号分割 $ids = explode(',', $ids); $ids = array_filter($ids); if (!in_array($type, [0, 1])) { return $this->json(4001, '审核参数错误'); } if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { // 工地负责人才能操作 return $this->json(4003, '无此权限'); } $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); if (AccountDimission::whereIn('id', $ids)->whereNotIn('worksite_id', $worksiteIds)->count() > 0) { return $this->json(4003, '部分记录不在您权限操作的范围'); } AccountDimission::whereIn('id', $ids)->where('status', AccountDimission::COMMON_OFF)->update([ 'status' => $type == 1 ? 1 : -1, 'operated_at' => date('Y-m-d H:i:s'), 'operated_by' => $accountId, 'refuse_reason' => $reason, ]); // 账号更新 $accountIds = AccountDimission::whereIn('id', $ids)->column('account_id'); Account::whereIn('id', $accountIds)->where('role', Account::ROLE_WORKER)->update([ 'role' => Account::ROLE_NORMAL, 'worksite_id' => Account::COMMON_OFF, 'checking' => Account::COMMON_OFF, ]); return $this->json(); } catch (Exception $e) { return $this->json(5000, '审核失败'.$e->getMessage()); } } // 离职审核列表 public function dimissionCheckList(): Json { $page = input('page/d', 1); $size = input('size/d', 20); $keyword = input('keyword/s'); $status = input('status/d', 0);//状态 0=待审核 1=已审核(包含1通过 -1不通过) $accountId = $this->request->user['user_id'] ?? 0; if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { return $this->json(4003, '无查看权限'); } $where = []; if (!empty($keyword)) { $where[] = ['cl.real_name|cl.mobile', 'like', '%'.$keyword.'%']; } if ($status == 0) { $where[] = ['cl.status', '=', 0]; } else { $where[] = ['cl.status', 'in', [1, -1]]; } // 负责工地 $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); $where[] = ['cl.worksite_id', 'in', $worksiteIds]; $query = AccountDimission::alias('cl') ->leftJoin('account a', 'a.id = cl.account_id') ->leftJoin('worksite w', 'w.id = cl.worksite_id') ->leftJoin('position p', 'p.id = a.position') ->field('cl.id,a.real_name,cl.status,cl.created_at,p.name as position_name,a.work_at,w.name as worksite_name') ->where($where); $total = $query->count(); $res = [ 'total' => $total, 'current' => $page ?: 1, 'size' => $size ?: 20, 'list' => new Collection(), ]; if ($total > 0) { $res['list'] = $query->page($page, $size)->order('cl.id', 'desc')->select(); // $res['list']->each(function ($item) { // $item->created_at = date('Y年m月d日 H:i:s', strtotime($item->created_at)); // }); $res['list'] = arrayNullToString($res['list']->toArray()); } return $this->json(0, 'success', $res); } // 保存|编辑公告 public function saveNotice(): Json { $status = input('status/d', 0); $content = input('content/s'); $accountId = $this->request->user['user_id'] ?? 0; if (!$account = Account::findById($accountId, ['id, role, worksite_id'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { // 工地负责人才能操作 return $this->json(4003, '无此权限'); } if (!$worksite = Worksite::findById($account['worksite_id'])) { return $this->json(4004, '工地异常'); } $update = [ 'status' => $status, 'content' => $content, ]; $oldNotice = json_decode($worksite['notice'], true); if ($oldNotice) { $update['version'] = $oldNotice['content'] == $content ? $oldNotice['version'] : time(); } else { $update['version'] = time(); } $worksite->save([ 'notice' => json_encode($update, JSON_UNESCAPED_UNICODE) ]); return $this->json(); } // 补卡记录 public function replenishList(): Json { $page = input('page/d', 1); $size = input('size/d', 20); $status = input('status/d', 0);//状态 0=待审核 1=已审核(包含1通过 -1不通过) $accountId = $this->request->user['user_id'] ?? 0; if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { return $this->json(4003, '无权限'); } $where = []; if ($status == 0) { $where[] = ['cl.status', '=', 0]; } else { $where[] = ['cl.status', 'in', [1, -1]]; } // 负责工地 $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); $where[] = ['cl.worksite_id', 'in', $worksiteIds]; $where[] = ['cl.is_replenish', '=', ClockLog::COMMON_ON]; $query = \app\model\ClockLog::alias('cl') ->leftJoin('account a', 'a.id = cl.account_id') ->leftJoin('worksite w', 'w.id = cl.worksite_id') ->field('cl.*,w.name as worksite_name,a.real_name as worker_name') ->where($where); $total = $query->count(); $res = [ 'total' => $total, 'current' => $page ?: 1, 'size' => $size ?: 20, 'list' => new Collection(), ]; if ($total > 0) { $res['list'] = $query->page($page, $size)->order('cl.id', 'desc')->select(); $res['list']->each(function ($item) { switch ($item->status) { case 0: $item->status_text = '待确认'; break; case 1: $item->status_text = '已确认'; break; case -1: $item->status_text = '不通过'; break; } $item->create_time = date('Y年m月d日 H:i:s', $item->create_time); $typeText = ClockLog::typeText()[$item->type] ?? ''; $dayText = date('Y年m月d日', strtotime($item->day)); $item->day_text = $dayText; $item->type_text = $typeText; $item->desc = "补打$dayText $typeText 打卡"; unset($item->check_by); unset($item->check_at); unset($item->account_id); unset($item->created_at); unset($item->worksite_id); unset($item->is_statistic); unset($item->need_statistic); unset($item->indexs); unset($item->handle_count); unset($item->is_replenish); unset($item->role); unset($item->type); }); $res['list'] = arrayNullToString($res['list']->toArray()); } return $this->json(0, 'success', $res); } /** * 审核补卡 支持批量 * * @return Json */ public function checkReplenish(): Json { try { $accountId = $this->request->user['user_id'] ?? 0; $type = input('type/d', 1);//类型 1=通过 0=不通过 $ids = input('id/s');//待审核记录ID 多个用逗号分割 $ids = explode(',', $ids); $ids = array_filter($ids); if (!in_array($type, [0, 1])) { return $this->json(4001, '审核参数错误'); } if (!$account = Account::findById($accountId, ['id, role'])) { return $this->json(6001, '请先登录'); } if ($account['role'] <= Account::COMMON_ON) { // 工地负责人才能操作 return $this->json(4003, '无此权限'); } $worksiteIds = AccountWorksite::where('account_id', $accountId)->column('worksite_id'); if (ClockLog::whereIn('id', $ids)->whereNotIn('worksite_id', $worksiteIds)->count() > 0) { return $this->json(4003, '部分记录不在您权限操作的范围'); } ClockLog::whereIn('id', $ids)->where('status', ClockLog::COMMON_OFF)->update([ 'status' => $type == 1 ? 1 : -1, 'check_at' => date('Y-m-d H:i:s'), 'check_by' => $accountId, ]); return $this->json(); } catch (Exception $e) { return $this->json(5000, '审核失败'.$e->getMessage()); } } }