From 508603404459c305d3825afc8dc1a0ba284a0c7c Mon Sep 17 00:00:00 2001 From: weiz <736250432@qq.com> Date: Thu, 1 Feb 2024 18:00:29 +0800 Subject: [PATCH] update --- .../controller/oa/FlowApproveController.php | 62 +++++++++ .../controller/oa/FlowRecordController.php | 108 ++++++++++++++++ .../controller/oa/FlowStepController.php | 108 ++++++++++++++++ app/adminapi/lists/oa/FlowApproveLists.php | 77 ++++++++++++ app/adminapi/lists/oa/FlowRecordLists.php | 77 ++++++++++++ app/adminapi/lists/oa/FlowStepLists.php | 77 ++++++++++++ app/adminapi/logic/oa/FlowApproveLogic.php | 69 ++++++++++ app/adminapi/logic/oa/FlowRecordLogic.php | 118 ++++++++++++++++++ app/adminapi/logic/oa/FlowStepLogic.php | 114 +++++++++++++++++ .../validate/oa/FlowApproveValidate.php | 104 +++++++++++++++ .../validate/oa/FlowRecordValidate.php | 108 ++++++++++++++++ app/adminapi/validate/oa/FlowStepValidate.php | 104 +++++++++++++++ app/common.php | 66 ++++++++++ app/common/model/oa/FlowApprove.php | 38 ++++++ app/common/model/oa/FlowRecord.php | 42 +++++++ app/common/model/oa/FlowStep.php | 38 ++++++ 16 files changed, 1310 insertions(+) create mode 100644 app/adminapi/controller/oa/FlowApproveController.php create mode 100644 app/adminapi/controller/oa/FlowRecordController.php create mode 100644 app/adminapi/controller/oa/FlowStepController.php create mode 100644 app/adminapi/lists/oa/FlowApproveLists.php create mode 100644 app/adminapi/lists/oa/FlowRecordLists.php create mode 100644 app/adminapi/lists/oa/FlowStepLists.php create mode 100644 app/adminapi/logic/oa/FlowApproveLogic.php create mode 100644 app/adminapi/logic/oa/FlowRecordLogic.php create mode 100644 app/adminapi/logic/oa/FlowStepLogic.php create mode 100644 app/adminapi/validate/oa/FlowApproveValidate.php create mode 100644 app/adminapi/validate/oa/FlowRecordValidate.php create mode 100644 app/adminapi/validate/oa/FlowStepValidate.php create mode 100644 app/common/model/oa/FlowApprove.php create mode 100644 app/common/model/oa/FlowRecord.php create mode 100644 app/common/model/oa/FlowStep.php diff --git a/app/adminapi/controller/oa/FlowApproveController.php b/app/adminapi/controller/oa/FlowApproveController.php new file mode 100644 index 000000000..e774fd9a5 --- /dev/null +++ b/app/adminapi/controller/oa/FlowApproveController.php @@ -0,0 +1,62 @@ +dataLists(new FlowApproveLists()); + } + + + /** + * @notes 获取日常审批详情 + * @return \think\response\Json + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function detail() + { + $params = (new FlowApproveValidate())->goCheck('detail'); + $result = FlowApproveLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/controller/oa/FlowRecordController.php b/app/adminapi/controller/oa/FlowRecordController.php new file mode 100644 index 000000000..cd5959fe2 --- /dev/null +++ b/app/adminapi/controller/oa/FlowRecordController.php @@ -0,0 +1,108 @@ +dataLists(new FlowRecordLists()); + } + + + /** + * @notes 添加审批记录 + * @return \think\response\Json + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function add() + { + $params = (new FlowRecordValidate())->post()->goCheck('add'); + $result = FlowRecordLogic::add($params); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(FlowRecordLogic::getError()); + } + + + /** + * @notes 编辑审批记录 + * @return \think\response\Json + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function edit() + { + $params = (new FlowRecordValidate())->post()->goCheck('edit'); + $result = FlowRecordLogic::edit($params); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(FlowRecordLogic::getError()); + } + + + /** + * @notes 删除审批记录 + * @return \think\response\Json + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function delete() + { + $params = (new FlowRecordValidate())->post()->goCheck('delete'); + FlowRecordLogic::delete($params); + return $this->success('删除成功', [], 1, 1); + } + + + /** + * @notes 获取审批记录详情 + * @return \think\response\Json + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function detail() + { + $params = (new FlowRecordValidate())->goCheck('detail'); + $result = FlowRecordLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/controller/oa/FlowStepController.php b/app/adminapi/controller/oa/FlowStepController.php new file mode 100644 index 000000000..5eab46967 --- /dev/null +++ b/app/adminapi/controller/oa/FlowStepController.php @@ -0,0 +1,108 @@ +dataLists(new FlowStepLists()); + } + + + /** + * @notes 添加审批步骤 + * @return \think\response\Json + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function add() + { + $params = (new FlowStepValidate())->post()->goCheck('add'); + $result = FlowStepLogic::add($params); + if (true === $result) { + return $this->success('添加成功', [], 1, 1); + } + return $this->fail(FlowStepLogic::getError()); + } + + + /** + * @notes 编辑审批步骤 + * @return \think\response\Json + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function edit() + { + $params = (new FlowStepValidate())->post()->goCheck('edit'); + $result = FlowStepLogic::edit($params); + if (true === $result) { + return $this->success('编辑成功', [], 1, 1); + } + return $this->fail(FlowStepLogic::getError()); + } + + + /** + * @notes 删除审批步骤 + * @return \think\response\Json + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function delete() + { + $params = (new FlowStepValidate())->post()->goCheck('delete'); + FlowStepLogic::delete($params); + return $this->success('删除成功', [], 1, 1); + } + + + /** + * @notes 获取审批步骤详情 + * @return \think\response\Json + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function detail() + { + $params = (new FlowStepValidate())->goCheck('detail'); + $result = FlowStepLogic::detail($params); + return $this->data($result); + } + + +} \ No newline at end of file diff --git a/app/adminapi/lists/oa/FlowApproveLists.php b/app/adminapi/lists/oa/FlowApproveLists.php new file mode 100644 index 000000000..3452be262 --- /dev/null +++ b/app/adminapi/lists/oa/FlowApproveLists.php @@ -0,0 +1,77 @@ +searchWhere) + ->field(['id', 'flow_type_id', 'flow_id', 'content_id', 'content_model', 'create_user']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select() + ->toArray(); + } + + + /** + * @notes 获取日常审批数量 + * @return int + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function count(): int + { + return FlowApprove::where($this->searchWhere)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/lists/oa/FlowRecordLists.php b/app/adminapi/lists/oa/FlowRecordLists.php new file mode 100644 index 000000000..eea423006 --- /dev/null +++ b/app/adminapi/lists/oa/FlowRecordLists.php @@ -0,0 +1,77 @@ +searchWhere) + ->field(['id', 'approve_id', 'step_id', 'check_user_id', 'check_time', 'status', 'content', 'is_invalid']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select() + ->toArray(); + } + + + /** + * @notes 获取审批记录数量 + * @return int + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function count(): int + { + return FlowRecord::where($this->searchWhere)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/lists/oa/FlowStepLists.php b/app/adminapi/lists/oa/FlowStepLists.php new file mode 100644 index 000000000..694ca2b6e --- /dev/null +++ b/app/adminapi/lists/oa/FlowStepLists.php @@ -0,0 +1,77 @@ + ['approve_id'], + ]; + } + + + /** + * @notes 获取审批步骤列表 + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function lists(): array + { + return FlowStep::where($this->searchWhere) + ->field(['id', 'approve_id', 'flow_name', 'flow_step', 'flow_user', 'sort']) + ->limit($this->limitOffset, $this->limitLength) + ->order(['id' => 'desc']) + ->select() + ->toArray(); + } + + + /** + * @notes 获取审批步骤数量 + * @return int + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function count(): int + { + return FlowStep::where($this->searchWhere)->count(); + } + +} \ No newline at end of file diff --git a/app/adminapi/logic/oa/FlowApproveLogic.php b/app/adminapi/logic/oa/FlowApproveLogic.php new file mode 100644 index 000000000..f691f8f3f --- /dev/null +++ b/app/adminapi/logic/oa/FlowApproveLogic.php @@ -0,0 +1,69 @@ +findOrEmpty($params['id']); + //获取审批内容信息 + $content = $data['content_logic']::detail(['id'=>$data['content_id']]); + //获取创建人信息 + $create_user = Admin::field('name,dept_id')->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'); + //获取审核步骤 + $step = FlowStep::field('flow_step,flow_user')->where('approve_id',$data['id'])->order('sort asc')->select()->each(function($item)use($create_user){ + $item['flow_step_text'] = $item->flow_step_text; + if($item['flow_step'] == 0){ + $item['flow_step_text'] = $create_user['name'].'创建'; + $item['flow_user'] = ''; + }else if($item['flow_step'] == 1){ + $item['flow_step_text'] = $item->flow_step_text; + $dept = Dept::field('leader')->where('id',$create_user['dept_id'])->findOrEmpty(); + $flow_user = Admin::field('name')->where('id',$dept['leader'])->findOrEmpty(); + $item['flow_user'] = $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'] = implode(',',$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['create_user_name'] = $create_user['name']; + $data['copy_user'] = implode(',',$copy); + $data['content'] = $content; + $data['step'] = $step; + $data['record'] = $record; + unset($data['flow_id'],$data['content_id'],$data['content_model'],$data['content_logic']); + return $data->toArray(); + } +} \ No newline at end of file diff --git a/app/adminapi/logic/oa/FlowRecordLogic.php b/app/adminapi/logic/oa/FlowRecordLogic.php new file mode 100644 index 000000000..9e80a36f9 --- /dev/null +++ b/app/adminapi/logic/oa/FlowRecordLogic.php @@ -0,0 +1,118 @@ + $params['approve_id'], + 'step_id' => $params['step_id'], + 'check_user_id' => $params['check_user_id'], + 'check_time' => $params['check_time'], + 'status' => $params['status'], + 'content' => $params['content'], + 'is_invalid' => $params['is_invalid'], + ]); + + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + + /** + * @notes 编辑审批记录 + * @param array $params + * @return bool + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + FlowRecord::where('id', $params['id'])->update([ + 'approve_id' => $params['approve_id'], + 'step_id' => $params['step_id'], + 'check_user_id' => $params['check_user_id'], + 'check_time' => $params['check_time'], + 'status' => $params['status'], + 'content' => $params['content'], + 'is_invalid' => $params['is_invalid'], + ]); + + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + + /** + * @notes 删除审批记录 + * @param array $params + * @return bool + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public static function delete(array $params): bool + { + return FlowRecord::destroy($params['id']); + } + + + /** + * @notes 获取审批记录详情 + * @param $params + * @return array + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public static function detail($params): array + { + return FlowRecord::findOrEmpty($params['id'])->toArray(); + } +} \ No newline at end of file diff --git a/app/adminapi/logic/oa/FlowStepLogic.php b/app/adminapi/logic/oa/FlowStepLogic.php new file mode 100644 index 000000000..c146d974a --- /dev/null +++ b/app/adminapi/logic/oa/FlowStepLogic.php @@ -0,0 +1,114 @@ + $params['approve_id'], + 'flow_name' => $params['flow_name'], + 'flow_step' => $params['flow_step'], + 'flow_user' => $params['flow_user'], + 'sort' => $params['sort'], + ]); + + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + + /** + * @notes 编辑审批步骤 + * @param array $params + * @return bool + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public static function edit(array $params): bool + { + Db::startTrans(); + try { + FlowStep::where('id', $params['id'])->update([ + 'approve_id' => $params['approve_id'], + 'flow_name' => $params['flow_name'], + 'flow_step' => $params['flow_step'], + 'flow_user' => $params['flow_user'], + 'sort' => $params['sort'], + ]); + + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + self::setError($e->getMessage()); + return false; + } + } + + + /** + * @notes 删除审批步骤 + * @param array $params + * @return bool + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public static function delete(array $params): bool + { + return FlowStep::destroy($params['id']); + } + + + /** + * @notes 获取审批步骤详情 + * @param $params + * @return array + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public static function detail($params): array + { + return FlowStep::findOrEmpty($params['id'])->toArray(); + } +} \ No newline at end of file diff --git a/app/adminapi/validate/oa/FlowApproveValidate.php b/app/adminapi/validate/oa/FlowApproveValidate.php new file mode 100644 index 000000000..958ed2e01 --- /dev/null +++ b/app/adminapi/validate/oa/FlowApproveValidate.php @@ -0,0 +1,104 @@ + 'require', + 'flow_type_id' => 'require', + 'flow_id' => 'require', + 'content_id' => 'require', + 'content_model' => 'require', + 'create_user' => 'require', + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'flow_type_id' => '审批类型id', + 'flow_id' => '审批流程id', + 'content_id' => '提交内容id', + 'content_model' => '提交内容数据模型', + 'create_user' => '创建人', + ]; + + + /** + * @notes 添加场景 + * @return FlowApproveValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneAdd() + { + return $this->only(['flow_type_id','flow_id','content_id','content_model','create_user']); + } + + + /** + * @notes 编辑场景 + * @return FlowApproveValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneEdit() + { + return $this->only(['id','flow_type_id','flow_id','content_id','content_model','create_user']); + } + + + /** + * @notes 删除场景 + * @return FlowApproveValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return FlowApproveValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + +} \ No newline at end of file diff --git a/app/adminapi/validate/oa/FlowRecordValidate.php b/app/adminapi/validate/oa/FlowRecordValidate.php new file mode 100644 index 000000000..937ec4198 --- /dev/null +++ b/app/adminapi/validate/oa/FlowRecordValidate.php @@ -0,0 +1,108 @@ + 'require', + 'approve_id' => 'require', + 'step_id' => 'require', + 'check_user_id' => 'require', + 'check_time' => 'require', + 'status' => 'require', + 'content' => 'require', + 'is_invalid' => 'require', + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'approve_id' => '审批内容ID', + 'step_id' => '审批步骤ID', + 'check_user_id' => '审批人ID', + 'check_time' => '审批时间', + 'status' => '审批状态 0发起审批1审核通过2审核拒绝3撤销', + 'content' => '审核意见', + 'is_invalid' => '审批失效(1标记为无效)', + ]; + + + /** + * @notes 添加场景 + * @return FlowRecordValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneAdd() + { + return $this->only(['approve_id','step_id','check_user_id','check_time','status','content','is_invalid']); + } + + + /** + * @notes 编辑场景 + * @return FlowRecordValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneEdit() + { + return $this->only(['id','approve_id','step_id','check_user_id','check_time','status','content','is_invalid']); + } + + + /** + * @notes 删除场景 + * @return FlowRecordValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return FlowRecordValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + +} \ No newline at end of file diff --git a/app/adminapi/validate/oa/FlowStepValidate.php b/app/adminapi/validate/oa/FlowStepValidate.php new file mode 100644 index 000000000..4ceeb8e23 --- /dev/null +++ b/app/adminapi/validate/oa/FlowStepValidate.php @@ -0,0 +1,104 @@ + 'require', + 'approve_id' => 'require', + 'flow_name' => 'require', + 'flow_step' => 'require', + 'flow_user' => 'require', + 'sort' => 'require', + ]; + + + /** + * 参数描述 + * @var string[] + */ + protected $field = [ + 'id' => 'id', + 'approve_id' => '审批内容ID', + 'flow_name' => '流程名称', + 'flow_step' => '流程步骤', + 'flow_user' => '审批人', + 'sort' => '排序ID', + ]; + + + /** + * @notes 添加场景 + * @return FlowStepValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneAdd() + { + return $this->only(['approve_id','flow_name','flow_step','flow_user','sort']); + } + + + /** + * @notes 编辑场景 + * @return FlowStepValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneEdit() + { + return $this->only(['id','approve_id','flow_name','flow_step','flow_user','sort']); + } + + + /** + * @notes 删除场景 + * @return FlowStepValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneDelete() + { + return $this->only(['id']); + } + + + /** + * @notes 详情场景 + * @return FlowStepValidate + * @author likeadmin + * @date 2024/02/01 11:26 + */ + public function sceneDetail() + { + return $this->only(['id']); + } + +} \ No newline at end of file diff --git a/app/common.php b/app/common.php index bb5867741..d2a64f589 100755 --- a/app/common.php +++ b/app/common.php @@ -1,6 +1,13 @@ diff($end); return $interval->days; } + +function addApprove($title,$content_id,$content_model,$content_logic,$flow_type_id,$flow_id,$create_user_id){ + $createUser = Admin::field('name')->where('id',$create_user_id)->findOrEmpty(); + //获取审批流程信息 + $flowData = Flow::where('id',$flow_id)->findOrEmpty(); + Db::startTrans(); + try { + //添加审批内容 + $approveRes = FlowApprove::create([ + 'title' => $title, + 'content_id' => $content_id, + 'content_model' => $content_model, + 'content_logic' => $content_logic, + 'flow_type_id' => $flow_type_id, + 'flow_id' => $flow_id, + 'create_user' => $create_user_id, + 'check_status' => 0, + 'current_step' => 0, + 'total_step' => count($flowData['flow_list']) + 1 + ]); + $flowStepData = []; + foreach($flowData['flow_list'] as $k=>$v){ + $flowStepData[] = [ + 'approve_id' => $approveRes->id, + 'flow_name' => $flowData['name'], + 'flow_step' => $v['flow_step'], + 'flow_user' => $v['flow_step'] != 1 ? implode(',',$v['flow_user']) : 0, + 'sort' => $k+1, + ]; + } + array_unshift($flowStepData, [ + 'approve_id' => $approveRes->id, + 'flow_name' => $flowData['name'], + 'flow_step' => 0, + 'flow_user' => 0, + 'sort' => 0, + ]); + //添加审批步骤 + foreach($flowStepData as $v){ + FlowStep::create($v); + } + //添加审批记录 + FlowRecord::create([ + 'approve_id' => $approveRes->id, + 'step_id' => 0, + 'check_user_id' => 0, + 'check_time' => time(), + 'status' => 0, + 'title' => $createUser['name'].'提交了此申请', + 'content' => '提交申请', + 'is_invalid' => 0 + ]); + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + return false; + } +} diff --git a/app/common/model/oa/FlowApprove.php b/app/common/model/oa/FlowApprove.php new file mode 100644 index 000000000..ebdb8189e --- /dev/null +++ b/app/common/model/oa/FlowApprove.php @@ -0,0 +1,38 @@ +column('name','value'); + return $dict[$data['check_status']]; + } +} \ No newline at end of file diff --git a/app/common/model/oa/FlowRecord.php b/app/common/model/oa/FlowRecord.php new file mode 100644 index 000000000..49c1a6c5d --- /dev/null +++ b/app/common/model/oa/FlowRecord.php @@ -0,0 +1,42 @@ +column('name','value'); + return $dict[$data['status']]; + } + + public function getCheckTimeAttr($value){ + return !empty($value) ? date('Y-m-d',$value) : ''; + } +} \ No newline at end of file diff --git a/app/common/model/oa/FlowStep.php b/app/common/model/oa/FlowStep.php new file mode 100644 index 000000000..5628d25a5 --- /dev/null +++ b/app/common/model/oa/FlowStep.php @@ -0,0 +1,38 @@ +column('name','value'); + return !empty($data['flow_step']) ? $dict[$data['flow_step']] : ''; + } +} \ No newline at end of file