From 4e43a77092c25546ff9202dc5a2288e1f66d39dc Mon Sep 17 00:00:00 2001 From: weiz <736250432@qq.com> Date: Mon, 27 May 2024 12:01:28 +0800 Subject: [PATCH] update --- .../works/bgsp/OaApproveController.php | 22 +- .../works/finance/ExpenseController.php | 211 ++++++++++++++++++ .../logic/works/bgsp/OaFlowTypeLogic.php | 2 +- 3 files changed, 223 insertions(+), 12 deletions(-) diff --git a/app/adminapi/controller/works/bgsp/OaApproveController.php b/app/adminapi/controller/works/bgsp/OaApproveController.php index 0637f813f..53182e992 100644 --- a/app/adminapi/controller/works/bgsp/OaApproveController.php +++ b/app/adminapi/controller/works/bgsp/OaApproveController.php @@ -54,7 +54,7 @@ return $this->fail("参数错误"); } $data = Db::name('oa_approve')->where('id',$params['id'])->find(); - $data['extends'] = !empty($data['extends']) ? json_decode($data['extends'],true) : '{}'; + $data['extends'] = !empty($data['extends']) ? json_decode($data['extends'],true) : []; $data['check_status_text'] = match ($data['check_status']){ 0=>'待审核',1=>'审核中',2=>'审核通过',3=>'审核不通过',4=>'撤销审核' }; @@ -63,7 +63,7 @@ $data['check_admin_users'] = !empty($check_admin_users) ? implode(',',$check_admin_users) : ''; $data['copy_users'] = !empty($copy_users) ? implode(',',$copy_users) : ''; $data['flow_info'] = OaFlow::where('id',$data['flow_id'])->findOrEmpty(); - $data['record'] = Db::name('oa_flow_record')->field('check_user_id,check_time,status,content')->where('action_id',$params['id'])->order('id desc')->select()->each(function($data){ + $data['record'] = Db::name('oa_flow_record')->field('check_user_id,check_time,status,content')->where('action_id',$params['id'])->where('type',1)->order('id desc')->select()->each(function($data){ $data['check_time'] = date('Y-m-d H:i:s',$data['check_time']); $user = Admin::where('id',$data['check_user_id'])->value('name'); $data['check_user_name'] = $user ?? ''; @@ -72,14 +72,14 @@ }; return $data; })->toArray(); - $step = Db::name('oa_flow_step')->field('id,action_id,flow_uids,flow_type')->where('action_id',$params['id'])->order('sort asc')->select()->toArray(); + $step = Db::name('oa_flow_step')->field('id,action_id,flow_uids,flow_type')->where('action_id',$params['id'])->where('type',1)->order('sort asc')->select()->toArray(); foreach ($step as $key => &$val) { $user_id_info = Admin::field('id,name')->where('id','in',$val['flow_uids'])->select()->toArray(); foreach ($user_id_info as $k => &$v) { $v['check_time'] = 0; $v['content'] = ''; $v['status'] = 0; - $check_array = Db::name('oa_flow_record')->where(['check_user_id' => $v['id'],'step_id' => $val['id']])->order('check_time desc')->select()->toArray(); + $check_array = Db::name('oa_flow_record')->where(['check_user_id' => $v['id'],'step_id' => $val['id'],'type'=>1])->order('check_time desc')->select()->toArray(); if(!empty($check_array)){ $checked = $check_array[0]; $v['check_time'] = date('Y-m-d H:i', $checked['check_time']); @@ -161,7 +161,7 @@ ); Db::name('oa_flow_step')->strict(false)->field(true)->insertGetId($flow_step); } - $step_id = Db::name('oa_flow_step')->where('action_id',$aid)->order('id asc')->find(); + $step_id = Db::name('oa_flow_step')->where('action_id',$aid)->where('type',1)->order('id asc')->find(); //添加提交申请记录 $checkData=array( 'action_id' => $aid, @@ -226,9 +226,9 @@ }else{ $param['check_admin_ids'] = $flow_list[0]['flow_uids']; } - $aid = Db::name('oa_approve')->strict(false)->field(true)->insertGetId($param); + Db::name('oa_approve')->where('id',$param['id'])->strict(false)->field(true)->update($param); foreach ($flow_list as $key => &$value){ - $value['action_id'] = $aid; + $value['action_id'] = $param['id']; $value['sort'] = $key; $value['create_time'] = time(); $value['type'] = 1; @@ -236,19 +236,19 @@ Db::name('oa_flow_step')->strict(false)->field(true)->insertAll($flow_list); } else{ - $aid = Db::name('oa_approve')->strict(false)->field(true)->insertGetId($param); + Db::name('oa_approve')->where('id',$param['id'])->strict(false)->field(true)->update($param); $flow_step = array( - 'action_id' => $aid, + 'action_id' => $param['id'], 'flow_uids' => $param['check_admin_ids'], 'create_time' => time(), 'type' => 1, ); Db::name('oa_flow_step')->strict(false)->field(true)->insertGetId($flow_step); } - $step_id = Db::name('oa_flow_step')->where('action_id',$aid)->order('id asc')->find(); + $step_id = Db::name('oa_flow_step')->where('action_id',$param['id'])->order('id asc')->find(); //添加提交申请记录 $checkData=array( - 'action_id' => $aid, + 'action_id' => $param['id'], 'check_user_id' => $this->adminId, 'content' => '提交申请', 'check_time' => time(), diff --git a/app/adminapi/controller/works/finance/ExpenseController.php b/app/adminapi/controller/works/finance/ExpenseController.php index 31e976650..d5ee3c3e6 100644 --- a/app/adminapi/controller/works/finance/ExpenseController.php +++ b/app/adminapi/controller/works/finance/ExpenseController.php @@ -4,10 +4,221 @@ use app\adminapi\controller\BaseAdminController; use app\adminapi\validate\works\finance\ExpenseValidate; + use app\common\model\auth\Admin; + use app\common\model\dept\Dept; + use app\common\model\works\bgsp\OaFlow; + use think\facade\Db; class ExpenseController extends BaseAdminController { public function add(){ $params = (new ExpenseValidate())->post()->goCheck('add'); + $params['income_month'] = strtotime($params['income_month']); + $params['expense_time'] = strtotime($params['expense_time']); + $params['admin_id'] = $this->adminId; + $params['annex'] = !empty($params['annex']) ? json_encode($params['annex']) : null; + $params['check_status'] = 0; + $params['check_step_sort'] = 0; + $params['create_time'] = time(); + $params['detail'] = json_encode($params['detail']); + $flow = Db::name('oa_flow')->where('id',$params['flow_id'])->find(); + if(empty($flow)){ + return $this->fail("审批流程信息不存在"); + } + if($flow['check_type'] == 2){ + if(empty($param['check_admin_ids'])){ + return $this->fail("请选择审核人"); + } + }else{ + if(empty($flow['flow_list'])){ + return $this->fail("当前审批流程未设置完全"); + } + } + if (empty($params['check_admin_ids'])) { + $flow_list = unserialize($flow['flow_list']); + if($flow_list[0]['flow_type'] == 1){ + //获取部门负责人 + $dept = Admin::where('id',$this->adminId)->value('dept_id'); + if(empty($dept)){ + return $this->fail('当前用户未设置部门,请联系管理员'); + } + $leader = Dept::where('id',$dept)->value('leader_id'); + if(empty($leader)){ + return $this->fail('当前部门负责人还未设置,请联系管理员'); + }else{ + $params['check_admin_ids'] = $leader; + } + }else{ + $params['check_admin_ids'] = $flow_list[0]['flow_uids']; + } + $aid = Db::name('oa_expense')->strict(false)->field(true)->insertGetId($params); + foreach ($flow_list as $key => &$value){ + $value['action_id'] = $aid; + $value['sort'] = $key; + $value['create_time'] = time(); + $value['type'] = 2; + } + Db::name('oa_flow_step')->strict(false)->field(true)->insertAll($flow_list); + } + else{ + $aid = Db::name('oa_expense')->strict(false)->field(true)->insertGetId($params); + $flow_step = array( + 'action_id' => $aid, + 'flow_uids' => $params['check_admin_ids'], + 'create_time' => time(), + 'type' => 2 + ); + Db::name('oa_flow_step')->strict(false)->field(true)->insertGetId($flow_step); + } + $step_id = Db::name('oa_flow_step')->where('action_id',$aid)->where('type',2)->order('id asc')->find(); + //添加提交申请记录 + $checkData=array( + 'action_id' => $aid, + 'check_user_id' => $this->adminId, + 'content' => '提交申请', + 'check_time' => time(), + 'create_time' => time(), + 'type' => 2, + 'step_id' => $step_id['id'] + ); + $record_id = Db::name('oa_flow_record')->strict(false)->field(true)->insertGetId($checkData); + return $record_id ? $this->success('ok') : $this->fail('fail'); + } + + public function edit(){ + $params = (new ExpenseValidate())->post()->goCheck('edit'); + $params['income_month'] = strtotime($params['income_month']); + $params['expense_time'] = strtotime($params['expense_time']); + $params['annex'] = !empty($params['annex']) ? json_encode($params['annex']) : null; + $params['check_status'] = 0; + $params['check_step_sort'] = 0; + $params['detail'] = json_encode($params['detail']); + $flow = Db::name('oa_flow')->where('id',$params['flow_id'])->find(); + if(empty($flow)){ + return $this->fail("审批流程信息不存在"); + } + if($flow['check_type'] == 2){ + if(empty($param['check_admin_ids'])){ + return $this->fail("请选择审核人"); + } + }else{ + if(empty($flow['flow_list'])){ + return $this->fail("当前审批流程未设置完全"); + } + } + //删除原来的审核流程和审核记录 + Db::name('oa_flow_step')->where(['action_id'=>$params['id'],'type'=>2])->update(['delete_time'=>time()]); + Db::name('oa_flow_record')->where(['action_id'=>$params['id'],'type'=>2])->update(['delete_time'=>time()]); + if (empty($params['check_admin_ids'])) { + $flow_list = unserialize($flow['flow_list']); + if($flow_list[0]['flow_type'] == 1){ + //获取部门负责人 + $dept = Admin::where('id',$this->adminId)->value('dept_id'); + if(empty($dept)){ + return $this->fail('当前用户未设置部门,请联系管理员'); + } + $leader = Dept::where('id',$dept)->value('leader_id'); + if(empty($leader)){ + return $this->fail('当前部门负责人还未设置,请联系管理员'); + }else{ + $params['check_admin_ids'] = $leader; + } + }else{ + $params['check_admin_ids'] = $flow_list[0]['flow_uids']; + } + Db::name('oa_expense')->where('id',$params['id'])->strict(false)->field(true)->update($params); + foreach ($flow_list as $key => &$value){ + $value['action_id'] = $params['id']; + $value['sort'] = $key; + $value['create_time'] = time(); + $value['type'] = 2; + } + Db::name('oa_flow_step')->strict(false)->field(true)->insertAll($flow_list); + } + else{ + Db::name('oa_expense')->where('id',$params['id'])->strict(false)->field(true)->insertGetId($params); + $flow_step = array( + 'action_id' => $params['id'], + 'flow_uids' => $params['check_admin_ids'], + 'create_time' => time(), + 'type' => 2 + ); + Db::name('oa_flow_step')->strict(false)->field(true)->insertGetId($flow_step); + } + $step_id = Db::name('oa_flow_step')->where('action_id',$params['id'])->where('type',2)->order('id asc')->find(); + //添加提交申请记录 + $checkData=array( + 'action_id' => $params['id'], + 'check_user_id' => $this->adminId, + 'content' => '提交申请', + 'check_time' => time(), + 'create_time' => time(), + 'type' => 2, + 'step_id' => $step_id['id'] + ); + $record_id = Db::name('oa_flow_record')->strict(false)->field(true)->insertGetId($checkData); + return $record_id ? $this->success('ok') : $this->fail('fail'); + } + + public function detail(){ + $params = (new ExpenseValidate())->post()->goCheck('detail'); + $data = Db::name('oa_expense')->where('id',$params['id'])->find(); + $data['check_status_text'] = match ($data['check_status']){ + 0=>'待审核',1=>'审核中',2=>'审核通过',3=>'审核不通过',4=>'撤销审核' + }; + $data['income_month'] = date('Y-m',$data['income_month']); + $data['expense_time'] = date('Y-m-d',$data['expense_time']); + $check_admin_users = Admin::where('id','in',$data['check_admin_ids'])->column('name'); + $copy_users = Admin::where('id','in',$data['copy_uids'])->column('name'); + $data['check_admin_users'] = !empty($check_admin_users) ? implode(',',$check_admin_users) : ''; + $data['copy_users'] = !empty($copy_users) ? implode(',',$copy_users) : ''; + $data['detail'] = json_decode($data['detail'],true); + $data['total_amount'] = 0; + foreach ($data['detail'] as $v){ + $data['total_amount'] += $v['amount']; + } + $data['admin_name'] = Admin::where('id',$data['admin_id'])->value('name'); + $data['flow_info'] = OaFlow::where('id',$data['flow_id'])->findOrEmpty(); + $data['record'] = Db::name('oa_flow_record')->field('check_user_id,check_time,status,content')->where('action_id',$params['id'])->where('type',2)->order('id desc')->select()->each(function($data){ + $data['check_time'] = date('Y-m-d H:i:s',$data['check_time']); + $user = Admin::where('id',$data['check_user_id'])->value('name'); + $data['check_user_name'] = $user ?? ''; + $data['status_text'] = match ($data['status']){ + 0=>'提交',1=>'通过',2=>'拒绝',3=>'撤销' + }; + return $data; + })->toArray(); + $step = Db::name('oa_flow_step')->field('id,action_id,flow_uids,flow_type')->where('action_id',$params['id'])->where('type',2)->order('sort asc')->select()->toArray(); + foreach ($step as $key => &$val) { + $user_id_info = Admin::field('id,name')->where('id','in',$val['flow_uids'])->select()->toArray(); + foreach ($user_id_info as $k => &$v) { + $v['check_time'] = 0; + $v['content'] = ''; + $v['status'] = 0; + $check_array = Db::name('oa_flow_record')->where(['check_user_id' => $v['id'],'step_id' => $val['id'],'type'=>2])->order('check_time desc')->select()->toArray(); + if(!empty($check_array)){ + $checked = $check_array[0]; + $v['check_time'] = date('Y-m-d H:i', $checked['check_time']); + $v['content'] = $checked['content']; + $v['status'] = $checked['status']; + } + } + $check_list = Db::name('oa_flow_record') + ->field('f.*,a.name') + ->alias('f') + ->join('admin a', 'a.id = f.check_user_id', 'left') + ->where(['f.step_id' => $val['id']])->select()->toArray(); + foreach ($check_list as $kk => &$vv) { + $vv['check_time_str'] = date('Y-m-d H:i', $vv['check_time']); + } + $val['user_id_info'] = $user_id_info; + $val['check_list'] = $check_list; + } + $data['steps'] = $step; + return $this->data($data); + } + + public function lists(){ + } } \ No newline at end of file diff --git a/app/adminapi/logic/works/bgsp/OaFlowTypeLogic.php b/app/adminapi/logic/works/bgsp/OaFlowTypeLogic.php index 33f23c281..ea774b07e 100644 --- a/app/adminapi/logic/works/bgsp/OaFlowTypeLogic.php +++ b/app/adminapi/logic/works/bgsp/OaFlowTypeLogic.php @@ -142,7 +142,7 @@ class OaFlowTypeLogic extends BaseLogic public static function all(): array { $data = DictData::field('name,value')->where('type_value', 'oa_approve_cate')->select()->each(function($data){ - $data['children'] = OaFlowType::field('id,title')->where('type',$data['value'])->select()->toArray(); + $data['children'] = OaFlowType::field('id,title,flow_cate')->where('type',$data['value'])->select()->toArray(); })->toArray(); return $data; }