diff --git a/app/adminapi/controller/works/finance/ExpenseController.php b/app/adminapi/controller/works/finance/ExpenseController.php index 254422d73..7af4831aa 100644 --- a/app/adminapi/controller/works/finance/ExpenseController.php +++ b/app/adminapi/controller/works/finance/ExpenseController.php @@ -26,7 +26,7 @@ return $this->fail("审批流程信息不存在"); } if($flow['check_type'] == 2){ - if(empty($param['check_admin_ids'])){ + if(empty($params['check_admin_ids'])){ return $this->fail("请选择审核人"); } }else{ @@ -188,7 +188,7 @@ }; 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(); + $step = Db::name('oa_flow_step')->field('id,action_id,flow_uids,flow_type,sort')->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) { @@ -207,7 +207,7 @@ ->field('f.*,a.name') ->alias('f') ->join('admin a', 'a.id = f.check_user_id', 'left') - ->where(['f.step_id' => $val['id']])->select()->toArray(); + ->where(['f.step_id' => $val['id']])->where('f.status','>',0)->select()->toArray(); foreach ($check_list as $kk => &$vv) { $vv['check_time_str'] = date('Y-m-d H:i', $vv['check_time']); } @@ -239,7 +239,7 @@ 6=> [['check_status','=',2],['pay_admin_id','>',0],['pay_time','>',0]], //审批通过,已打款 }; }else{ - $where[] = ['check_status','in','1,2,3,4']; + $where[] = ['check_status','in','0,1,2,3,4']; } $lists = Db::name('oa_expense')->field('id,code,income_month,expense_time,admin_id,check_admin_ids,check_status,pay_admin_id,pay_time,create_time,detail')->where('admin_id',$this->adminId)->where($where) ->page($page_no, $page_size)->order('id desc')->select()->each(function($data){ diff --git a/app/adminapi/controller/works/finance/IncomeController.php b/app/adminapi/controller/works/finance/IncomeController.php new file mode 100644 index 000000000..e2713dfc1 --- /dev/null +++ b/app/adminapi/controller/works/finance/IncomeController.php @@ -0,0 +1,94 @@ +request->get(['start_time','end_time','status','page_no','page_size']); + $page_no = !empty($params['page_no']) ? $params['page_no'] : 1; + $page_size = !empty($params['page_size']) ? $params['page_size'] : 15; + $where = []; + if(!empty($params['start_time']) && !empty($params['end_time'])){ + if(strtotime($params['end_time']) <= strtotime($params['start_time'])){ + return $this->fail('结束时间不等小于开始时间'); + } + $where[] = ['create_time','between',[strtotime($params['start_time']),strtotime($params['end_time'])]]; + } + if(!empty($params['status'])){ + $where[] = match ($params['status']){ + 1=> ['is_cash','=',0], //未到账 + 2=> ['is_cash','=',1], //部分到账 + 3=> [['is_cash','=',2]], //全部到账 + }; + }else{ + $where[] = ['is_cash','in','0,1,2']; + } + $lists = Db::name('oa_invoice')->field('id,is_cash,enter_amount,enter_time,type,invoice_title,amount,invoice_type,admin_id,create_time,code,open_time')->where('check_status',5)->where($where) + ->page($page_no, $page_size)->order('id desc')->select()->each(function($data){ + $admin = Admin::field('name,dept_id')->where('id',$data['admin_id'])->findOrEmpty(); + $dept = Dept::where('id',$admin['dept_id'])->value('name'); + $check_admin_users = Admin::where('id','in',$data['check_admin_ids'])->column('name'); + $data['user_name'] = $admin['name']; + $data['dept_name'] = $dept ?? ''; + $data['check_admin_users'] = !empty($check_admin_users) ? implode(',',$check_admin_users) : ''; + $data['create_time'] = date('Y-m-d H:i:s',$data['create_time']); + $data['type_text'] = match ($data['type']){ + 1=>'企业',2=>'个人' + }; + $data['invoice_type_text'] = match ($data['invoice_type']){ + 1=>'增值税专用发票',2=>'普通发票',3=>'专用发票' + }; + $data['is_cash_text'] = match ($data['is_cash']){ + 0=>'未到账',1=>'部分到账',2=>'全部到账' + }; + $data['open_time'] = !empty($data['open_time']) ? date('Y-m-d H:i:s',$data['open_time']) : ''; + $data['enter_time'] = !empty($data['enter_time']) ? date('Y-m-d H:i:s',$data['enter_time']) : ''; + $data['open_admin_name'] = Admin::where('id',$data['open_admin_id'])?->value('name'); + return $data; + })->toArray(); + $count = Db::name('oa_invoice')->where($where)->where('admin_id',$this->adminId)->count(); + return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size')); + } + + public function add(){ + $params = $this->request->post(['invoice_id','detail']); + if(empty($params['invoice_id']) || empty($params['detail'])){ + return $this->fail('参数错误'); + } + $invoice = Db::name('oa_invoice')->where('id',$params['invoice_id'])->find(); + if(empty($invoice)){ + return $this->fail('开票信息不存在'); + } + if(!is_array($params['detail'])){ + return $this->fail('到账记录数据格式错误'); + } + $income_amount = 0; + foreach($params['detail'] as $k=>$v){ + if(empty($v['enter_time']) || !strtotime($v['enter_time'])){ + return $this->fail('到账记录第'.($k+1).'行到账日期为空'); + } + if(empty($v['amount'])){ + return $this->fail('到账记录第'.($k+1).'行到帐金额为空'); + } + $income_amount += $v['amount']; + } + if($income_amount > (bcsub($invoice['amount'],$invoice['enter_amount'],2))){ + return $this->fail('到账金额大于发票金额,不允许保存'); + } + Db::startTrans(); + try { + + Db::commit(); + return $this->success('ok'); + } catch (\Exception $e) { + Db::rollback(); + return $this->fail(); + } + } + } \ No newline at end of file diff --git a/app/adminapi/controller/works/finance/InvoiceController.php b/app/adminapi/controller/works/finance/InvoiceController.php index f51dfabc8..094ea3fda 100644 --- a/app/adminapi/controller/works/finance/InvoiceController.php +++ b/app/adminapi/controller/works/finance/InvoiceController.php @@ -6,6 +6,7 @@ use app\adminapi\validate\works\finance\InvoiceValidate; use app\common\model\auth\Admin; use app\common\model\dept\Dept; + use app\common\model\works\bgsp\OaFlow; use think\facade\Db; class InvoiceController extends BaseAdminController @@ -22,7 +23,7 @@ return $this->fail("审批流程信息不存在"); } if($flow['check_type'] == 2){ - if(empty($param['check_admin_ids'])){ + if(empty($params['check_admin_ids'])){ return $this->fail("请选择审核人"); } }else{ @@ -156,6 +157,591 @@ } public function lists(){ + $params = $this->request->get(['start_time','end_time','status','page_no','page_size']); + $page_no = !empty($params['page_no']) ? $params['page_no'] : 1; + $page_size = !empty($params['page_size']) ? $params['page_size'] : 15; + $where = []; + if(!empty($params['start_time']) && !empty($params['end_time'])){ + if(strtotime($params['end_time']) <= strtotime($params['start_time'])){ + return $this->fail('结束时间不等小于开始时间'); + } + $where[] = ['create_time','between',[strtotime($params['start_time']),strtotime($params['end_time'])]]; + } + if(!empty($params['status'])){ + $where[] = match ($params['status']){ + 1=> ['check_status','=',0], //待审核 + 2=> ['check_status','=',1], //审核中 + 3=> [['check_status','=',2]], //审批通过,待开具 + 4=> ['check_status','=',3], //审核不通过 + 5=> ['check_status','=',4], //撤销审核 + 6=> [['check_status','=',5]], //审批通过,已开具 + 7=> [['check_status','=',10]], //已作废 + }; + }else{ + $where[] = ['check_status','in','0,1,2,3,4,5,10']; + } + $lists = Db::name('oa_invoice')->field('id,type,invoice_subject,amount,invoice_type,check_status,admin_id,create_time,check_admin_ids,open_admin_id,open_time,code')->where('admin_id',$this->adminId)->where($where) + ->page($page_no, $page_size)->order('id desc')->select()->each(function($data){ + $admin = Admin::field('name,dept_id')->where('id',$data['admin_id'])->findOrEmpty(); + $dept = Dept::where('id',$admin['dept_id'])->value('name'); + $check_admin_users = Admin::where('id','in',$data['check_admin_ids'])->column('name'); + $data['user_name'] = $admin['name']; + $data['dept_name'] = $dept ?? ''; + $data['check_admin_users'] = !empty($check_admin_users) ? implode(',',$check_admin_users) : ''; + $data['create_time'] = date('Y-m-d H:i:s',$data['create_time']); + $data['check_status_text'] = match ($data['check_status']){ + 0=>'待审核',1=>'审核中,待开具',2=>'审核通过',3=>'审核不通过',4=>'撤销审核',5=>'已开具',10=>'已作废' + }; + $data['type_text'] = match ($data['type']){ + 1=>'企业',2=>'个人' + }; + $data['invoice_type_text'] = match ($data['invoice_type']){ + 1=>'增值税专用发票',2=>'普通发票',3=>'专用发票' + }; + $data['open_time'] = !empty($data['open_time']) ? date('Y-m-d H:i:s',$data['open_time']) : ''; + $data['open_admin_name'] = Admin::where('id',$data['open_admin_id'])?->value('name'); + return $data; + })->toArray(); + $count = Db::name('oa_invoice')->where($where)->where('admin_id',$this->adminId)->count(); + return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size')); + } + public function detail(){ + $params = (new InvoiceValidate())->post()->goCheck('detail'); + $data = Db::name('oa_invoice')->where('id',$params['id'])->find(); + $admin = Admin::field('name,dept_id')->where('id',$data['admin_id'])->findOrEmpty(); + $dept = Dept::where('id',$admin['dept_id'])->value('name'); + $check_admin_users = Admin::where('id','in',$data['check_admin_ids'])->column('name'); + $data['user_name'] = $admin['name']; + $data['dept_name'] = $dept ?? ''; + $data['check_admin_users'] = !empty($check_admin_users) ? implode(',',$check_admin_users) : ''; + $data['create_time'] = date('Y-m-d H:i:s',$data['create_time']); + $data['check_status_text'] = match ($data['check_status']){ + 0=>'待审核',1=>'审核中,待开具',2=>'审核通过',3=>'审核不通过',4=>'撤销审核',5=>'已开具',10=>'已作废' + }; + $data['type_text'] = match ($data['type']){ + 1=>'企业',2=>'个人' + }; + $data['invoice_type_text'] = match ($data['invoice_type']){ + 1=>'增值税专用发票',2=>'普通发票',3=>'专用发票' + }; + $data['open_time'] = !empty($data['open_time']) ? date('Y-m-d H:i:s',$data['open_time']) : ''; + $data['open_admin_name'] = Admin::where('id',$data['open_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',3)->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,sort')->where('action_id',$params['id'])->where('type',3)->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'=>3])->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']])->where('f.status','>',0)->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 copy(){ + $params = $this->request->get(['start_time','end_time','page_no','page_size']); + $page_no = !empty($params['page_no']) ? $params['page_no'] : 1; + $page_size = !empty($params['page_size']) ? $params['page_size'] : 15; + $map = []; + if(!empty($params['start_time']) && !empty($params['end_time'])){ + if(strtotime($params['end_time']) <= strtotime($params['start_time'])){ + return $this->fail('结束时间不等小于开始时间'); + } + $map[] = ['create_time','between',[strtotime($params['start_time']),strtotime($params['end_time'])]]; + } + //查询条件 + $map = []; + $map[] = ['f.check_status', '=', 2]; + $map[] = ['', 'exp', Db::raw("FIND_IN_SET('{$this->adminId}',f.copy_uids)")]; + + $lists = Db::name('oa_invoice') + ->field('f.*,a.name as user_name,d.name as dept_name') + ->alias('f') + ->join('admin a', 'a.id = f.admin_id', 'left') + ->join('dept d', 'd.id = a.dept_id', 'left') + ->where($map) + ->order('f.id desc') + ->group('f.id') + ->page($page_no, $page_size)->select() + ->each(function($item){ + if($item['check_status']<2 && !empty($item['check_admin_ids'])){ + $check_user = Db::name('admin')->where('id','in',$item['check_admin_ids'])->column('name'); + $item['check_admin_users'] = implode(',',$check_user); + } + $item['create_time'] = date('Y-m-d H:i:s',$item['create_time']); + $item['check_status_text'] = match ($item['check_status']){ + 0=>'待审核',1=>'审核中,待开具',2=>'审核通过',3=>'审核不通过',4=>'撤销审核',5=>'已开具',10=>'已作废' + }; + $item['type_text'] = match ($item['type']){ + 1=>'企业',2=>'个人' + }; + $item['invoice_type_text'] = match ($item['invoice_type']){ + 1=>'增值税专用发票',2=>'普通发票',3=>'专用发票' + }; + $item['open_time'] = !empty($item['open_time']) ? date('Y-m-d H:i:s',$item['open_time']) : ''; + $item['open_admin_name'] = Admin::where('id',$item['open_admin_id'])?->value('name'); + return $item; + })->toArray(); + $count = Db::name('oa_invoice') + ->field('f.*,a.name as user_name,d.name as dept_name') + ->alias('f') + ->join('admin a', 'a.id = f.admin_id', 'left') + ->join('dept d', 'd.id = a.dept_id', 'left') + ->where($map)->count(); + return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size')); + } + + public function deal_with(){ + $params = $this->request->get(); + $status = !empty($params['status']) ? $params['status'] : 0; + //查询条件 + $map1 = []; + $map2 = []; + $map1[] = ['', 'exp', Db::raw("FIND_IN_SET('{$this->adminId}',f.check_admin_ids)")]; + $map2[] = ['', 'exp', Db::raw("FIND_IN_SET('{$this->adminId}',f.flow_admin_ids)")]; + + $page_no = !empty($params['page_no']) ? $params['page_no'] : 1; + $page_size = !empty($params['page_size']) ? $params['page_size'] : 15; + $lists = []; + $count = 0; + if($status == 0){ + $lists = Db::name('oa_invoice') + ->field('f.*,a.name as user_name,d.name as dept_name') + ->alias('f') + ->join('admin a', 'a.id = f.admin_id', 'left') + ->join('dept d', 'd.id = a.dept_id', 'left') + ->whereOr([$map1,$map2]) + ->order('f.id desc') + ->group('f.id') + ->page($page_no, $page_size)->select() + ->each(function($item){ + if($item['check_status']<2 && !empty($item['check_admin_ids'])){ + $check_user = Db::name('admin')->where('id','in',$item['check_admin_ids'])->column('name'); + $item['check_admin_users'] = implode(',',$check_user); + } + $item['create_time'] = date('Y-m-d H:i:s',$item['create_time']); + $item['check_status_text'] = match ($item['check_status']){ + 0=>'待审核',1=>'审核中,待开具',2=>'审核通过',3=>'审核不通过',4=>'撤销审核',5=>'已开具',10=>'已作废' + }; + $item['type_text'] = match ($item['type']){ + 1=>'企业',2=>'个人' + }; + $item['invoice_type_text'] = match ($item['invoice_type']){ + 1=>'增值税专用发票',2=>'普通发票',3=>'专用发票' + }; + $item['open_time'] = !empty($item['open_time']) ? date('Y-m-d H:i:s',$item['open_time']) : ''; + $item['open_admin_name'] = Admin::where('id',$item['open_admin_id'])?->value('name'); + return $item; + })->toArray(); + $count = Db::name('oa_invoice') + ->field('f.*,a.name as user_name,d.name as dept_name') + ->alias('f') + ->join('admin a', 'a.id = f.admin_id', 'left') + ->join('dept d', 'd.id = a.dept_id', 'left') + ->whereOr([$map1,$map2])->count(); + } + + if($status == 1){ + $lists = Db::name('oa_invoice') + ->field('f.*,a.name as user_name,d.name as dept_name') + ->alias('f') + ->join('admin a', 'a.id = f.admin_id', 'left') + ->join('dept d', 'd.id = a.dept_id', 'left') + ->where($map1) + ->order('f.id desc') + ->group('f.id') + ->page($page_no, $page_size)->select() + ->each(function($item){ + if($item['check_status']<2 && !empty($item['check_admin_ids'])){ + $check_user = Db::name('admin')->where('id','in',$item['check_admin_ids'])->column('name'); + $item['check_admin_users'] = implode(',',$check_user); + } + $item['create_time'] = date('Y-m-d H:i:s',$item['create_time']); + $item['check_status_text'] = match ($item['check_status']){ + 0=>'待审核',1=>'审核中,待开具',2=>'审核通过',3=>'审核不通过',4=>'撤销审核',5=>'已开具',10=>'已作废' + }; + $item['type_text'] = match ($item['type']){ + 1=>'企业',2=>'个人' + }; + $item['invoice_type_text'] = match ($item['invoice_type']){ + 1=>'增值税专用发票',2=>'普通发票',3=>'专用发票' + }; + $item['open_time'] = !empty($item['open_time']) ? date('Y-m-d H:i:s',$item['open_time']) : ''; + $item['open_admin_name'] = Admin::where('id',$item['open_admin_id'])?->value('name'); + return $item; + })->toArray(); + $count = Db::name('oa_invoice') + ->field('f.*,a.name as user_name,d.name as dept_name') + ->alias('f') + ->join('admin a', 'a.id = f.admin_id', 'left') + ->join('dept d', 'd.id = a.dept_id', 'left') + ->where($map1)->count(); + } + if($status == 2){ + $lists = Db::name('oa_invoice') + ->field('f.*,a.name as user_name,d.name as dept_name') + ->alias('f') + ->join('admin a', 'a.id = f.admin_id', 'left') + ->join('dept d', 'd.id = a.dept_id', 'left') + ->where($map2) + ->order('f.id desc') + ->group('f.id') + ->page($page_no, $page_size)->select() + ->each(function($item, $key){ + if($item['check_status']<2 && !empty($item['check_admin_ids'])){ + $check_user = Db::name('admin')->where('id','in',$item['check_admin_ids'])->column('name'); + $item['check_admin_users'] = implode(',',$check_user); + } + $item['create_time'] = date('Y-m-d H:i:s',$item['create_time']); + $item['check_status_text'] = match ($item['check_status']){ + 0=>'待审核',1=>'审核中,待开具',2=>'审核通过',3=>'审核不通过',4=>'撤销审核',5=>'已开具',10=>'已作废' + }; + $item['type_text'] = match ($item['type']){ + 1=>'企业',2=>'个人' + }; + $item['invoice_type_text'] = match ($item['invoice_type']){ + 1=>'增值税专用发票',2=>'普通发票',3=>'专用发票' + }; + $item['open_time'] = !empty($item['open_time']) ? date('Y-m-d H:i:s',$item['open_time']) : ''; + $item['open_admin_name'] = Admin::where('id',$item['open_admin_id'])?->value('name'); + return $item; + })->toArray(); + $count = Db::name('oa_invoice') + ->field('f.*,a.name as user_name,d.name as dept_name') + ->alias('f') + ->join('admin a', 'a.id = f.admin_id', 'left') + ->join('dept d', 'd.id = a.dept_id', 'left') + ->where($map2)->count(); + } + return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size')); + } + + public function check(){ + $params = $this->request->post(['id','check','content','check_node','check_admin_ids']); + if(empty($params['id'])){ + return $this->fail('缺少数据主键'); + } + if(empty($params['check']) || !in_array($params['check'],[1,2,3])){ + return $this->fail('审核参数错误'); + } + if(empty($params['content'])){ + return $this->fail('请填写审核意见'); + } + $data = Db::name('oa_invoice')->where('id',$params['id'])->find(); + if(empty($data)){ + return $this->fail('数据信息不存在'); + } + //撤销 + if($params['check'] == 3){ + if($data['admin_id'] != $this->adminId){ + return $this->fail('你不是该申请的发起者,无权撤销'); + } + //撤销审核,数据操作 + $params['check_status'] = 4; + $params['check_admin_ids'] =''; + $params['check_step_sort'] = 0; + $res = Db::name('oa_invoice')->strict(false)->field('check_step_sort,check_status,check_admin_ids')->update($params); + if($res){ + $checkData=array( + 'action_id' => $params['id'], + 'step_id' => 0, + 'check_user_id' => $this->adminId, + 'type' => 3, + 'check_time' => time(), + 'status' => $params['check'], + 'content' => $params['content'], + 'create_time' => time() + ); + Db::name('oa_flow_record')->strict(false)->field(true)->insertGetId($checkData); + return $this->success('ok'); + }else{ + return $this->fail('fail'); + } + } + //拒绝 + if($params['check'] == 2){ + //当前审核节点详情 + $step = Db::name('oa_flow_step')->where(['action_id'=>$params['id'],'sort'=>$data['check_step_sort'],'type'=>3])->find(); + $check_admin_ids = explode(",", strval($data['check_admin_ids'])); + if (!in_array($this->adminId, $check_admin_ids)){ + return $this->fail('您没权限审核该审批'); + } + //拒绝审核,数据操作 + $params['check_status'] = 3; + $params['last_admin_id'] = $this->adminId; + $params['flow_admin_ids'] = $data['flow_admin_ids'].$this->adminId.','; + $params['check_admin_ids'] = ''; + if($step['flow_type'] == 4){ + //获取上一步的审核信息 + $prev_step = Db::name('oa_flow_step')->where(['action_id'=>$params['id'],'sort'=>($data['check_step_sort']-1),'type'=>3])->find(); + if($prev_step){ + //存在上一步审核 + $params['check_step_sort'] = $prev_step['sort']; + $params['check_admin_ids'] = $prev_step['flow_uids']; + $params['check_status'] = 1; + } + else{ + //不存在上一步审核,审核初始化步骤 + $params['check_step_sort'] = 0; + $params['check_admin_ids'] = ''; + $params['check_status'] = 0; + } + } + $res = Db::name('oa_invoice')->strict(false)->field('check_step_sort,check_status,last_admin_id,flow_admin_ids,check_admin_ids')->update($params); + if($res){ + $checkData=array( + 'action_id' => $params['id'], + 'step_id' => $step['id'], + 'check_user_id' => $this->adminId, + 'type' => 3, + 'check_time' => time(), + 'status' => $params['check'], + 'content' => $params['content'], + 'create_time' => time() + ); + Db::name('oa_flow_record')->strict(false)->field(true)->insertGetId($checkData); + return $this->success('ok'); + } + else{ + return $this->fail('fail'); + } + } + //通过 + if($params['check'] == 1){ + //当前审核节点详情 + $step = Db::name('oa_flow_step')->where(['action_id'=>$params['id'],'sort'=>$data['check_step_sort'],'type'=>3])->find(); + $check_admin_ids = explode(",", strval($data['check_admin_ids'])); + if (!in_array($this->adminId, $check_admin_ids)){ + return $this->fail('您没权限审核该审批'); + } + //多人会签审批 + if($step['flow_type'] == 3){ + //查询当前会签记录数 + $check_count = Db::name('oa_flow_record')->where(['action_id'=>$params['id'],'step_id'=>$step['id'],'type'=>3])->count(); + //当前会签记应有记录数 + $flow_count = explode(',', $step['flow_uids']); + if(($check_count+1) >=count($flow_count)){ + $next_step = Db::name('oa_flow_step')->where(['action_id'=>$params['id'],'sort'=>($data['check_step_sort']+1),'type'=>3])->find(); + if($next_step){ + //存在下一步审核 + if($next_step['flow_type'] == 1){ + //获取部门负责人 + $dept = Admin::where('id',$data['admin_id'])->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'] = $next_step['flow_uids']; + } + $params['check_step_sort'] = $data['check_step_sort']+1; + $params['check_status'] = 1; + }else{ + //不存在下一步审核,审核结束 + $params['check_status'] = 2; + $params['check_admin_ids'] =''; + } + }else{ + $params['check_status'] = 1; + $params['check_admin_ids'] = $step['flow_uids']; + } + }else if($step['flow_type'] == 0){ + //自由人审批 + if($params['check_node'] == 2){ + $next_step = $data['check_step_sort']+1; + $flow_step = array( + 'action_id' => $params['id'], + 'sort' => $next_step, + 'type' => 3, + 'flow_uids' => $params['check_admin_ids'], + 'create_time' => time() + ); + $fid = Db::name('oa_flow_step')->strict(false)->field(true)->insertGetId($flow_step); + //下一步审核步骤 + $params['check_step_sort'] = $next_step; + $params['check_status'] = 1; + } + else{ + //不存在下一步审核,审核结束 + $params['check_status'] = 2; + $params['check_admin_ids'] =''; + } + }else{ + $next_step = Db::name('oa_flow_step')->where(['action_id'=>$params['id'],'sort'=>($data['check_step_sort']+1),'type'=>3])->find(); + if($next_step){ + //存在下一步审核 + if($next_step['flow_type'] == 1){ + //获取部门负责人 + $dept = Admin::where('id',$data['admin_id'])->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'] = $next_step['flow_uids']; + } + $params['check_step_sort'] = $data['check_step_sort']+1; + $params['check_status'] = 1; + } + else{ + //不存在下一步审核,审核结束 + $params['check_status'] = 2; + $params['check_admin_ids'] =''; + } + } + if($params['check_status'] == 1 && empty($params['check_admin_ids'])){ + return $this->fail('找不到下一步的审批人,该审批流程设置有问题,请联系HR或者管理员'); + } + //审核通过数据操作 + $params['last_admin_id'] = $this->adminId; + $params['flow_admin_ids'] = $data['flow_admin_ids'].$this->adminId.','; + $res = Db::name('oa_invoice')->strict(false)->field('check_step_sort,check_status,last_admin_id,flow_admin_ids,check_admin_ids')->update($params); + if($res){ + $checkData=array( + 'action_id' => $params['id'], + 'step_id' => $step['id'], + 'check_user_id' => $this->adminId, + 'type' => 3, + 'check_time' => time(), + 'status' => $params['check'], + 'content' => $params['content'], + 'create_time' => time() + ); + Db::name('oa_flow_record')->strict(false)->field(true)->insertGetId($checkData); + return $this->success('ok'); + } + else{ + return $this->fail('fail'); + } + } + return $this->fail(); + } + + public function lists2(){ + $params = $this->request->get(['start_time','end_time','status','page_no','page_size']); + $page_no = !empty($params['page_no']) ? $params['page_no'] : 1; + $page_size = !empty($params['page_size']) ? $params['page_size'] : 15; + $where = []; + if(!empty($params['start_time']) && !empty($params['end_time'])){ + if(strtotime($params['end_time']) <= strtotime($params['start_time'])){ + return $this->fail('结束时间不等小于开始时间'); + } + $where[] = ['create_time','between',[strtotime($params['start_time']),strtotime($params['end_time'])]]; + } + if(!empty($params['status'])){ + $where[] = match ($params['status']){ + 1=> [['check_status','=',2],['pay_admin_id','=',0],['pay_time','=',0]], //审批通过,待打款 + 2=> [['check_status','=',2],['pay_admin_id','>',0],['pay_time','>',0]], //审批通过,已打款 + }; + }else{ + $where[] = ['check_status','=',2]; + } + if(!empty($params['status'])){ + $where[] = match ($params['status']){ + 1=> ['check_status','=',2], //审批通过,待开具 + 2=> ['check_status','=',5], //审批通过,已开具 + 3=> [['check_status','=',10]], //已作废 + }; + }else{ + $where[] = ['check_status','in','2,5,10']; + } + $lists = Db::name('oa_invoice')->field('id,type,invoice_subject,amount,invoice_type,check_status,admin_id,create_time,check_admin_ids,open_admin_id,open_time,code')->where('admin_id',$this->adminId)->where($where) + ->page($page_no, $page_size)->order('id desc')->select()->each(function($data){ + $admin = Admin::field('name,dept_id')->where('id',$data['admin_id'])->findOrEmpty(); + $dept = Dept::where('id',$admin['dept_id'])->value('name'); + $check_admin_users = Admin::where('id','in',$data['check_admin_ids'])->column('name'); + $data['user_name'] = $admin['name']; + $data['dept_name'] = $dept ?? ''; + $data['check_admin_users'] = !empty($check_admin_users) ? implode(',',$check_admin_users) : ''; + $data['create_time'] = date('Y-m-d H:i:s',$data['create_time']); + $data['check_status_text'] = match ($data['check_status']){ + 0=>'待审核',1=>'审核中,待开具',2=>'审核通过',3=>'审核不通过',4=>'撤销审核',5=>'已开具',10=>'已作废' + }; + $data['type_text'] = match ($data['type']){ + 1=>'企业',2=>'个人' + }; + $data['invoice_type_text'] = match ($data['invoice_type']){ + 1=>'增值税专用发票',2=>'普通发票',3=>'专用发票' + }; + $data['open_time'] = !empty($data['open_time']) ? date('Y-m-d H:i:s',$data['open_time']) : ''; + $data['open_admin_name'] = Admin::where('id',$data['open_admin_id'])?->value('name'); + return $data; + })->toArray(); + $count = Db::name('oa_invoice')->where($where)->where('admin_id',$this->adminId)->count(); + return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size')); + } + + public function invoice(){ + $params = (new InvoiceValidate())->post()->goCheck('invoice'); + $data = Db::name('oa_invoice')->where('id',$params['id'])->find(); + if(empty($data)){ + return $this->success('申请信息不存在'); + } + if($data['check_status'] !== 2){ + return $this->success('当前申请未审核通过'); + } + $update_data = [ + 'code' => $params['code'], + 'open_time' => strtotime($params['open_time']), + 'open_admin_id' => $this->adminId, + 'delivery' => $params['delivery'] ?? '', + 'check_status' => 5, + ]; + $res = Db::name('oa_invoice')->where('id',$params['id'])->update($update_data); + return $res ? $this->success('ok') : $this->fail('fail'); + } + + public function voids(){ + $params = (new InvoiceValidate())->post()->goCheck('detail'); + $data = Db::name('oa_invoice')->where('id',$params['id'])->find(); + if(empty($data)){ + return $this->success('申请信息不存在'); + } + if($data['check_status'] !== 2){ + return $this->success('当前申请未审核通过'); + } + $res = Db::name('oa_invoice')->where('id',$params['id'])->update(['check_status'=>10]); + return $res ? $this->success('ok') : $this->fail('fail'); } } \ No newline at end of file diff --git a/app/adminapi/validate/works/finance/InvoiceValidate.php b/app/adminapi/validate/works/finance/InvoiceValidate.php index e385f077c..efd3636cc 100644 --- a/app/adminapi/validate/works/finance/InvoiceValidate.php +++ b/app/adminapi/validate/works/finance/InvoiceValidate.php @@ -10,6 +10,7 @@ protected $rule = [ 'id' => 'require', 'code' => 'require', + 'open_time' => 'require|dateFormat:Y-m-d', 'cash_type' => 'require|in:1,2,3,4,5,6,7', 'is_cash' => 'require|in:0,1,2', 'amount' => 'require|float', @@ -99,9 +100,9 @@ * @author likeadmin * @date 2024/05/24 14:16 */ - public function scenePay() + public function sceneInvoice() { - return $this->only(['id']); + return $this->only(['id','code','open_time','delivery']); } public function checkFlow($value): bool|string {