findOrEmpty($params['id']); if ($data->isEmpty()) return []; //获取创建人信息 $create_user = Admin::field('name')->where('id', $data['create_user'])->findOrEmpty(); //获取审批流程信息 $flow = Flow::field('name,copy_uids')->where('id', $data['flow_id'])->findOrEmpty(); //获取抄送人信息 $copy = Admin::where('id', 'in', $flow['copy_uids'])->column('name'); //当前审核人 $current_check_user = ''; $current_check_user_ids = ''; //获取审核步骤 $step = FlowStep::field('flow_step,flow_user,is_active')->where('approve_id', $data['id'])->order('sort asc')->select()->each(function ($item) use ($create_user, &$current_check_user, &$current_check_user_ids) { $item['flow_step_text'] = $item->flow_step_text; if ($item['flow_step'] == 0) { $item['flow_step_text'] = $create_user['name'] . '创建'; $item['flow_user_name'] = ''; } else { $item['flow_step_text'] = $item->flow_step_text; $flow_user = Admin::where('id', 'in', $item['flow_user'])->column('name'); $item['flow_user_name'] = implode(',', $flow_user); } if ($item['is_active'] == 1) { $current_check_user = $item['flow_user_name']; $current_check_user_ids = explode(',', $item['flow_user']); } })->toArray(); //获取审批记录 $record = FlowRecord::field('title,content,check_time,status')->where('approve_id', $data['id'])->select()->each(function ($item) { $item['status_text'] = $item->status_text; })->toArray(); $data['flow_name'] = $flow['name']; $data['check_status_text'] = $data->check_status_text; $data['current_check_user'] = $current_check_user; $data['current_check_user_ids'] = $current_check_user_ids; $data['create_user_name'] = $create_user['name']; $data['copy_user'] = implode(',', $copy); $data['step'] = $step; $data['record'] = $record; unset($data['flow_id']); return $data->toArray(); } //撤销申请 public static function revoke(array $params, $admin_id): bool { $approve_data = FlowApprove::where('id', $params['id'])->findOrEmpty(); if ($approve_data->isEmpty()) { self::setError('审批信息不存在'); return false; } if ($approve_data['check_status'] != 0) { self::setError('审批信息状态不是待审核状态,不可撤回'); return false; } if ($approve_data['create_user'] != $admin_id) { self::setError('当前登录用户不是该审批信息的创建用户'); return false; } $createUser = Admin::field('name')->where('id', $approve_data['create_user'])->findOrEmpty(); Db::startTrans(); try { $revoke_time = time(); FlowApprove::where('id', $params['id'])->update([ 'check_status' => 4, 'update_time' => $revoke_time, ]); //添加审批数据记录 FlowRecord::create([ 'approve_id' => $params['id'], 'step_id' => 0, 'check_user_id' => 0, 'check_time' => $revoke_time, 'status' => 3, 'title' => $createUser['name'] . '撤销了此申请', 'content' => $params['revoke_reason'], 'is_invalid' => 0 ]); $approve_data['content_model']::where('id', $approve_data['content_id'])->update([ 'approve_check_status' => 4, ]); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } //审核申请 public static function check($params, $admin_id): bool { $str = $params['check_status'] == 1 ? '通过' : '拒绝'; $check_user = Admin::field('name')->where('id', $admin_id)->findOrEmpty(); $approve_data = FlowApprove::where('id', $params['id'])->findOrEmpty(); $approve_status = 0; if ($approve_data->isEmpty()) { self::setError('当前审批信息不存在'); return false; } if ($approve_data['check_status'] == 2 || $approve_data['check_status'] == 3) { self::setError('当前审批信息已审核'); return false; } if ($approve_data['check_status'] == 4) { self::setError('当前审批信息已撤销'); return false; } //获取当前审批信息的审批步骤 $current_step = FlowStep::where('approve_id', $params['id'])->where('is_active', 1)->findOrEmpty(); //获取下一步步骤 $next_step = FlowStep::where('approve_id', $params['id'])->where('sort', $current_step['sort'] + 1)->findOrEmpty(); $current_check_user = explode(',', $current_step['flow_user']); if (!in_array($admin_id, $current_check_user)) { self::setError('当前登录用户不是此审批信息的审核人'); return false; } //判断当前用户是否审核过该条记录 $check_record = FlowRecord::where('approve_id', $params['id'])->where('step_id', $current_step['id'])->where('check_user_id', $admin_id)->where('is_invalid', 0)->findOrEmpty(); if (!$check_record->isEmpty()) { self::setError('你已经审核过该条信息,无需重复审核'); return false; } //审批时间 $check_time = time(); //获取审批流程信息 $flow_data = Flow::where('id', $approve_data['flow_id'])->findOrEmpty(); Db::startTrans(); try { if ($flow_data['check_type'] == 1) { //判断当前审批步骤类型 switch ($current_step['flow_step']) { case 1://当前部门负责人审批 if ($next_step->isEmpty()) { FlowApprove::where('id', $params['id'])->update([ 'check_status' => $params['check_status'] == 1 ? 2 : 3, 'update_time' => $check_time, ]); $approve_status = $params['check_status'] == 1 ? 2 : 3; } else { FlowApprove::where('id', $params['id'])->update([ 'check_status' => $params['check_status'] == 1 ? 1 : 3, 'update_time' => $check_time, ]); //设置下一步 if ($params['check_status'] == 1) { FlowStep::where('id', $current_step['id'])->update(['is_active' => 0]); FlowStep::where('id', $next_step['id'])->update(['is_active' => 1]); } $approve_status = $params['check_status'] == 1 ? 1 : 3; } break; case 2: //指定人或签 //判断当前审核状态 if ($params['check_status'] == 1) { $approve_check_status = $next_step->isEmpty() ? 2 : 1; if (!$next_step->isEmpty()) { FlowStep::where('id', $current_step['id'])->update(['is_active' => 0]); FlowStep::where('id', $next_step['id'])->update(['is_active' => 1]); } } else { //获取当前记录的审核记录数 $check_record_count = FlowRecord::where('approve_id', $params['id'])->where('step_id', $current_step['id'])->where('is_invalid', 0)->where('status', '<>', 0)->count(); //判断当前记录除当前用户外,是否都审批了 if (count($current_check_user) - 1 == $check_record_count) { $approve_check_status = 3; if (!$next_step->isEmpty()) { FlowStep::where('id', $current_step['id'])->update(['is_active' => 0]); FlowStep::where('id', $next_step['id'])->update(['is_active' => 1]); } } else { $approve_check_status = 1; } } FlowApprove::where('id', $params['id'])->update([ 'check_status' => $approve_check_status, 'update_time' => $check_time, ]); $approve_status = $approve_check_status; break; case 3: //指定人会签 if ($params['check_status'] == 2) { $approve_check_status = 3; } else { //获取当前记录的审核记录数 $check_record_count = FlowRecord::where('approve_id', $params['id'])->where('step_id', $current_step['id'])->where('is_invalid', 0)->where('status', '<>', 0)->count(); //判断当前记录除当前用户外,是否都审批了, if (count($current_check_user) - 1 == $check_record_count) { $approve_check_status = 2; if (!$next_step->isEmpty()) { FlowStep::where('id', $current_step['id'])->update(['is_active' => 0]); FlowStep::where('id', $next_step['id'])->update(['is_active' => 1]); } } else { $approve_check_status = 1; } } FlowApprove::where('id', $params['id'])->update([ 'check_status' => $approve_check_status, 'update_time' => $check_time, ]); $approve_status = $approve_check_status; break; } } else { if ($next_step->isEmpty()) { FlowApprove::where('id', $params['id'])->update([ 'check_status' => $params['check_status'] == 1 ? 2 : 3, 'update_time' => $check_time, ]); $approve_status = $params['check_status'] == 1 ? 2 : 3; } else { FlowApprove::where('id', $params['id'])->update([ 'check_status' => $params['check_status'] == 1 ? 1 : 3, 'update_time' => $check_time, ]); $approve_status = $params['check_status'] == 1 ? 1 : 3; //设置下一步 if ($params['check_status'] == 1) { FlowStep::where('id', $current_step['id'])->update(['is_active' => 0]); FlowStep::where('id', $next_step['id'])->update(['is_active' => 1]); } } } //添加审批数据记录 FlowRecord::create([ 'approve_id' => $params['id'], 'step_id' => $current_step['id'], 'check_user_id' => $admin_id, 'check_time' => $check_time, 'status' => $params['check_status'], 'title' => $check_user['name'] . $str . '了此申请', 'content' => $params['check_reason'], 'is_invalid' => 0 ]); $approve_data['content_model']::where('id', $approve_data['content_id'])->update(['approve_check_status' => $approve_status]); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } }