From c2602efd8ffdbce16f7cbd7c54456afa20d74c64 Mon Sep 17 00:00:00 2001 From: weiz <736250432@qq.com> Date: Sun, 18 Feb 2024 15:23:26 +0800 Subject: [PATCH] update --- app/adminapi/logic/oa/FlowApproveLogic.php | 215 ++++++++++++--------- app/adminapi/logic/oa/FlowLogic.php | 13 +- app/adminapi/validate/oa/FlowValidate.php | 12 +- app/common.php | 20 +- 4 files changed, 139 insertions(+), 121 deletions(-) diff --git a/app/adminapi/logic/oa/FlowApproveLogic.php b/app/adminapi/logic/oa/FlowApproveLogic.php index 025d62285..db3dc6d83 100644 --- a/app/adminapi/logic/oa/FlowApproveLogic.php +++ b/app/adminapi/logic/oa/FlowApproveLogic.php @@ -65,7 +65,7 @@ class FlowApproveLogic extends BaseLogic $data['copy_user'] = implode(',',$copy); $data['step'] = $step; $data['record'] = $record; - unset($data['flow_id'],$data['content_model'],$data['content_logic']); + unset($data['flow_id']); return $data->toArray(); } @@ -118,6 +118,10 @@ class FlowApproveLogic extends BaseLogic $str = $params['check_status'] == 1 ? '通过' : '拒绝'; $check_user = Admin::field('name')->where('id',$admin_id)->findOrEmpty(); $approve_data = FlowApprove::where('id',$params['id'])->findOrEmpty(); + if($approve_data->isEmpty()){ + self::setError('当前审批信息不存在'); + return false; + } if($approve_data['check_status'] == 2 || $approve_data['check_status'] == 3){ self::setError('当前审批信息已审核'); return false; @@ -136,104 +140,71 @@ class FlowApproveLogic extends BaseLogic return false; } //判断当前用户是否审核过该条记录 - $check_record = FlowRecord::where('approve_id',$params['id'])->where('step_id',$current_step['id'])->where('check_user_id',$admin_id)->findOrEmpty(); + $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 { - //判断当前审批步骤类型 - switch($current_step['flow_step']){ - case 1://当前部门负责人审批 - //判断当前审核步骤是否是最后一步; - //1、如果是最后一步,如果当前用户审核通过则将该记录设置为审核通过,如果当前用户未审核通过则则将该记录设置为审核不通过,流程结束 - //2、如果不是最后一步,如果当前用户审核通过则将该记录设置为审核中,流程进入下一步,如果当前用户未审核通过则则将该记录设置为审核不通过,流程结束 - if(($current_step['sort']+1) == $step_count){ - FlowApprove::where('id',$params['id'])->update([ - 'check_status' => $params['check_status'] == 1 ? 2 : 3, - 'update_time' => $check_time, - ]); - }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('approve_id',$params['id'])->where('sort',$current_step['sort']+1)->update(['is_active'=>1]); - } - } - break; - case 2: //指定人或签 - //判断当前记录除当前用户外,是否都审批了, - //1、如果都审批了,则判断其他用户是否有审批通过的 - //1-1、如果其他用户都没有审批通过,则判断当前用户是否审批通过通过,如果当前用户审批通过,则判断当前审核步骤是否是最后一步, - //1-1-1-1、如果是最后一步,则该记录审批通过,流程结束 - //1-1-1-2、如果不是最后一步,则该记录设置为审批中,流程设置为下一步 - //1-1-2、如果当前用户审批不通过,则该记录审批不通过,流程结束 - //1-2、如果其他用户有一位审批通过,则不管当前用户是否审批通过,则判断当前审核步骤是否是最后一步,如果是最后一步,该记录设置为审核通过,如果不是最后一步,该记录设置为审核中,流程设置为下一步 - //2、如果没审批完,则不管当前用户是否审批通过也不管当前审核步骤是否是最后一步,该记录都设置为审批中,不设置下一步操作 - //获取当前记录的审核记录数 - $check_record_count = FlowRecord::where('approve_id',$params['id'])->where('step_id',$current_step['id'])->count(); - //获取但前记录的已经通过的记录 - $check_record_pass = FlowRecord::where('approve_id',$params['id'])->where('step_id',$current_step['id'])->where('status',1)->findOrEmpty(); - //判断当前记录除当前用户外,是否都审批了, - if(count($current_check_user)-1 == $check_record_count){ - //判断有没有审核通过的 - if($check_record_pass->isEmpty()){//没有审核通过的 + if($flow_data['check_type'] == 1){ + //判断当前审批步骤类型 + switch($current_step['flow_step']){ + case 1://当前部门负责人审批 + //判断当前审核步骤是否是最后一步; + //1、如果是最后一步,如果当前用户审核通过则将该记录设置为审核通过,如果当前用户未审核通过则则将该记录设置为审核不通过,流程结束 + //2、如果不是最后一步,如果当前用户审核通过则将该记录设置为审核中,流程进入下一步,如果当前用户未审核通过则则将该记录设置为审核不通过,流程结束 + if(($current_step['sort']+1) == $step_count){ + FlowApprove::where('id',$params['id'])->update([ + 'check_status' => $params['check_status'] == 1 ? 2 : 3, + 'update_time' => $check_time, + ]); + }else{ + FlowApprove::where('id',$params['id'])->update([ + 'check_status' => $params['check_status'] == 1 ? 1 : 3, + 'update_time' => $check_time, + ]); + //设置下一步 if($params['check_status'] == 1){ - if(($current_step['sort']+1) == $step_count){ - $approve_check_status = 2; - }else{ - $approve_check_status = 1; - //设置下一步 - FlowStep::where('id',$current_step['id'])->update(['is_active'=>0]); - FlowStep::where('approve_id',$params['id'])->where('sort',$current_step['sort']+1)->update(['is_active'=>1]); - } - }else{ - $approve_check_status = 3; - } - }else{//有审核通过的 - if(($current_step['sort']+1) == $step_count){ - $approve_check_status = 2; - }else{ - $approve_check_status = 1; - //设置下一步 FlowStep::where('id',$current_step['id'])->update(['is_active'=>0]); FlowStep::where('approve_id',$params['id'])->where('sort',$current_step['sort']+1)->update(['is_active'=>1]); } } - }else{ - //没审批完,该记录都设置为审批中 - $approve_check_status = 1; - } - FlowApprove::where('id',$params['id'])->update([ - 'check_status' => $approve_check_status, - 'update_time' => $check_time, - ]); - break; - case 3: //指定人会签 - //判断当前记录除当前用户外,是否都审批了, - //1、如果都审批了,则判断其他用户是否有未审批通过的 - //1-1、如果其他用户都审批通过,则判断当前用户是否审批通过通过,如果当前用户审批通过,则判断当前审核步骤是否是最后一步, - //1-1-1-1、如果是最后一步,则该记录审批通过,流程结束 - //1-1-1-2、如果不是最后一步,则该记录设置为审批中,流程设置为下一步 - //1-1-2、如果当前用户审批不通过,则该记录审批不通过,流程结束 - //1-2、如果其他用户有一位审批不通过,则不管当前用户是否审批通过,该记录设置为审核不通过,流程结束 - //2、如果没审批完,则判断当前用户是否审批通过,如果当前用户审批通过,则将记录设置为审批中,如果当前用户审批不通过,则将记录设置为审批不通过 - //获取当前记录的审核记录数 - $check_record_count = FlowRecord::where('approve_id',$params['id'])->where('step_id',$current_step['id'])->count(); - //获取但前记录的未通过的记录 - $check_record_not_pass = FlowRecord::where('approve_id',$params['id'])->where('step_id',$current_step['id'])->where('status',2)->findOrEmpty(); - //判断当前记录除当前用户外,是否都审批了, - if(count($current_check_user)-1 == $check_record_count){ - //判断有没有审核不通过的 - if($check_record_not_pass->isEmpty()){//没有审核不通过的 - if($params['check_status'] == 1){ + break; + case 2: //指定人或签 + //判断当前记录除当前用户外,是否都审批了, + //1、如果都审批了,则判断其他用户是否有审批通过的 + //1-1、如果其他用户都没有审批通过,则判断当前用户是否审批通过通过,如果当前用户审批通过,则判断当前审核步骤是否是最后一步, + //1-1-1-1、如果是最后一步,则该记录审批通过,流程结束 + //1-1-1-2、如果不是最后一步,则该记录设置为审批中,流程设置为下一步 + //1-1-2、如果当前用户审批不通过,则该记录审批不通过,流程结束 + //1-2、如果其他用户有一位审批通过,则不管当前用户是否审批通过,则判断当前审核步骤是否是最后一步,如果是最后一步,该记录设置为审核通过,如果不是最后一步,该记录设置为审核中,流程设置为下一步 + //2、如果没审批完,则不管当前用户是否审批通过也不管当前审核步骤是否是最后一步,该记录都设置为审批中,不设置下一步操作 + //获取当前记录的审核记录数 + $check_record_count = FlowRecord::where('approve_id',$params['id'])->where('step_id',$current_step['id'])->count(); + //获取但前记录的已经通过的记录 + $check_record_pass = FlowRecord::where('approve_id',$params['id'])->where('step_id',$current_step['id'])->where('status',1)->findOrEmpty(); + //判断当前记录除当前用户外,是否都审批了, + if(count($current_check_user)-1 == $check_record_count){ + //判断有没有审核通过的 + if($check_record_pass->isEmpty()){//没有审核通过的 + if($params['check_status'] == 1){ + if(($current_step['sort']+1) == $step_count){ + $approve_check_status = 2; + }else{ + $approve_check_status = 1; + //设置下一步 + FlowStep::where('id',$current_step['id'])->update(['is_active'=>0]); + FlowStep::where('approve_id',$params['id'])->where('sort',$current_step['sort']+1)->update(['is_active'=>1]); + } + }else{ + $approve_check_status = 3; + } + }else{//有审核通过的 if(($current_step['sort']+1) == $step_count){ $approve_check_status = 2; }else{ @@ -242,21 +213,75 @@ class FlowApproveLogic extends BaseLogic FlowStep::where('id',$current_step['id'])->update(['is_active'=>0]); FlowStep::where('approve_id',$params['id'])->where('sort',$current_step['sort']+1)->update(['is_active'=>1]); } - }else{ + } + }else{ + //没审批完,该记录都设置为审批中 + $approve_check_status = 1; + } + FlowApprove::where('id',$params['id'])->update([ + 'check_status' => $approve_check_status, + 'update_time' => $check_time, + ]); + break; + case 3: //指定人会签 + //判断当前记录除当前用户外,是否都审批了, + //1、如果都审批了,则判断其他用户是否有未审批通过的 + //1-1、如果其他用户都审批通过,则判断当前用户是否审批通过通过,如果当前用户审批通过,则判断当前审核步骤是否是最后一步, + //1-1-1-1、如果是最后一步,则该记录审批通过,流程结束 + //1-1-1-2、如果不是最后一步,则该记录设置为审批中,流程设置为下一步 + //1-1-2、如果当前用户审批不通过,则该记录审批不通过,流程结束 + //1-2、如果其他用户有一位审批不通过,则不管当前用户是否审批通过,该记录设置为审核不通过,流程结束 + //2、如果没审批完,则判断当前用户是否审批通过,如果当前用户审批通过,则将记录设置为审批中,如果当前用户审批不通过,则将记录设置为审批不通过 + //获取当前记录的审核记录数 + $check_record_count = FlowRecord::where('approve_id',$params['id'])->where('step_id',$current_step['id'])->count(); + //获取但前记录的未通过的记录 + $check_record_not_pass = FlowRecord::where('approve_id',$params['id'])->where('step_id',$current_step['id'])->where('status',2)->findOrEmpty(); + //判断当前记录除当前用户外,是否都审批了, + if(count($current_check_user)-1 == $check_record_count){ + //判断有没有审核不通过的 + if($check_record_not_pass->isEmpty()){//没有审核不通过的 + if($params['check_status'] == 1){ + if(($current_step['sort']+1) == $step_count){ + $approve_check_status = 2; + }else{ + $approve_check_status = 1; + //设置下一步 + FlowStep::where('id',$current_step['id'])->update(['is_active'=>0]); + FlowStep::where('approve_id',$params['id'])->where('sort',$current_step['sort']+1)->update(['is_active'=>1]); + } + }else{ + $approve_check_status = 3; + } + }else{//有审核不通过的 $approve_check_status = 3; } - }else{//有审核不通过的 - $approve_check_status = 3; + }else{ + //没审批完,则判断当前用户是否审批通过,如果当前用户审批通过,则将记录设置为审批中,如果当前用户审批不通过,则将记录设置为审批不通过 + $approve_check_status = $params['check_status'] == 1 ? 1 : 3; } - }else{ - //没审批完,则判断当前用户是否审批通过,如果当前用户审批通过,则将记录设置为审批中,如果当前用户审批不通过,则将记录设置为审批不通过 - $approve_check_status = $params['check_status'] == 1 ? 1 : 3; - } + FlowApprove::where('id',$params['id'])->update([ + 'check_status' => $approve_check_status, + 'update_time' => $check_time, + ]); + break; + } + }else{ + if(($current_step['sort']+1) == $step_count){ FlowApprove::where('id',$params['id'])->update([ - 'check_status' => $approve_check_status, + 'check_status' => $params['check_status'] == 1 ? 2 : 3, 'update_time' => $check_time, ]); - break; + }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('approve_id',$params['id'])->where('sort',$current_step['sort']+1)->update(['is_active'=>1]); + } + } } //添加审批数据记录 FlowRecord::create([ diff --git a/app/adminapi/logic/oa/FlowLogic.php b/app/adminapi/logic/oa/FlowLogic.php index 5fe26e160..2ff54b68c 100644 --- a/app/adminapi/logic/oa/FlowLogic.php +++ b/app/adminapi/logic/oa/FlowLogic.php @@ -42,6 +42,15 @@ class FlowLogic extends BaseLogic */ public static function add(array $params): bool { + if($params['check_type'] == 1){ + foreach ($params['flow_list'] as &$v){ + if($v['flow_step'] == 1){ + $flow_cate_data = FlowType::where('id',$params['flow_cate'])->findOrEmpty(); + $dept_leaders = Dept::where('id','in',$flow_cate_data['department_ids'])->column('leader'); + $v['flow_user'] = $dept_leaders; + } + } + } Db::startTrans(); try { Flow::create([ @@ -49,7 +58,7 @@ class FlowLogic extends BaseLogic 'flow_cate' => $params['flow_cate'], 'check_type' => $params['check_type'], 'remark' => $params['remark'] ?? '', - 'flow_list' => $params['check_type'] != 2 ? json_encode($params['flow_list']) : null, + 'flow_list' => json_encode($params['flow_list']), 'status' => 2, 'copy_uids' => implode(',',$params['copy_uids']), ]); @@ -79,7 +88,7 @@ class FlowLogic extends BaseLogic 'flow_cate' => $params['flow_cate'], 'check_type' => $params['check_type'], 'remark' => $params['remark'] ?? '', - 'flow_list' => $params['check_type'] != 2 ? json_encode($params['flow_list']) : null, + 'flow_list' => json_encode($params['flow_list']), 'status' => $params['status'], 'copy_uids' => implode(',',$params['copy_uids']), ]); diff --git a/app/adminapi/validate/oa/FlowValidate.php b/app/adminapi/validate/oa/FlowValidate.php index 45a8e234f..874c559d2 100644 --- a/app/adminapi/validate/oa/FlowValidate.php +++ b/app/adminapi/validate/oa/FlowValidate.php @@ -38,7 +38,7 @@ class FlowValidate extends BaseValidate 'name' => 'require', 'flow_cate' => 'require|checkFlowCate', 'check_type' => 'require|checkCheckType', - 'flow_list' => 'requireCallback:check_require|checkFlowList', + 'flow_list' => 'require|checkFlowList', 'status' => 'require|checkStatus', 'copy_uids' => 'array|checkCopyUids', ]; @@ -127,14 +127,6 @@ class FlowValidate extends BaseValidate return true; } - public function check_require($value, $data): bool - { - if($data['check_type'] != 2){ - return true; - } - return false; - } - public function checkFlowList($value,$rule,$data): bool|string { if(!is_array($value)){ @@ -167,7 +159,7 @@ class FlowValidate extends BaseValidate } } } - if($data['check_type'] == 3){ + if($data['check_type'] == 2){ foreach($value as $k=>$v){ if(empty($v['flow_step'])){ return '请填写审批步骤名称'; diff --git a/app/common.php b/app/common.php index 9ba0fee2d..e9967144a 100755 --- a/app/common.php +++ b/app/common.php @@ -360,7 +360,8 @@ function daysBetweenDates($start_date,$end_date): bool|int return $interval->days; } -function addApprove($title,$content_id,$content_model,$content_logic,$path,$flow_type_id,$flow_id,$create_user_id){ +function addApprove($title,$content_id,$content_model,$path,$flow_id,$create_user_id): bool +{ $createUser = Admin::field('name,dept_id')->where('id',$create_user_id)->findOrEmpty(); //获取审批流程信息 $flowData = Flow::where('id',$flow_id)->findOrEmpty(); @@ -371,34 +372,25 @@ function addApprove($title,$content_id,$content_model,$content_logic,$path,$flow 'title' => $title, 'content_id' => $content_id, 'content_model' => $content_model, - 'content_logic' => $content_logic, 'path' => $path, - 'flow_type_id' => $flow_type_id, 'flow_id' => $flow_id, 'create_user' => $create_user_id, 'check_status' => 0, ]); $flowStepData = []; foreach($flowData['flow_list'] as $k=>$v){ - //获取部门负责人id - if($v['flow_step'] == 1){ - $dept = Dept::field('leader')->where('id',$createUser['dept_id'])->findOrEmpty(); - $flow_user = !$dept->isEmpty() ? $dept['leader'] : 0; - }else{ - $flow_user = implode(',',$v['flow_user']); - } $flowStepData[] = [ 'approve_id' => $approveRes->id, - 'flow_name' => $flowData['name'], - 'flow_step' => $v['flow_step'], - 'flow_user' => $flow_user, + 'flow_name' => $flowData['check_type'] == 1 ? '' : $v['flow_step'], + 'flow_step' => $flowData['check_type'] == 1 ? $v['flow_step'] : 0, + 'flow_user' => implode(',',$v['flow_user']), 'sort' => $k+1, 'is_active' => $k==0 ? 1 : 0, ]; } array_unshift($flowStepData, [ 'approve_id' => $approveRes->id, - 'flow_name' => $flowData['name'], + 'flow_name' => '', 'flow_step' => 0, 'flow_user' => 0, 'sort' => 0,