224 lines
8.9 KiB
PHP
224 lines
8.9 KiB
PHP
<?php
|
|
|
|
namespace app\adminapi\controller\works\finance;
|
|
|
|
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(){
|
|
|
|
}
|
|
} |