+----------------------------------------------------------------------------------------------- */ declare (strict_types = 1); namespace app\home\controller; use app\api\BaseController; use think\facade\Db; use think\facade\View; class Approve extends BaseController { public function index() { $department = $this->did; $module = Db::name('FlowModule')->where(['status'=>1])->select()->toArray(); $whereOr = []; if($this->uid>1){ $map1=[ ['department_ids', '=', ''] ]; $map2=[ ['', 'exp', Db::raw("FIND_IN_SET('{$department}',department_ids)")] ]; $whereOr =[$map1,$map2]; } foreach ($module as &$row) { // 处理每一行数据 $row['list'] = Db::name('FlowCate') ->where([['module_id','=',$row['id']],['status','=',1],['is_list','=',1]]) ->where(function ($query) use($whereOr) { if (!empty($whereOr)){ $query->whereOr($whereOr); } }) ->select()->toArray(); } View::assign('module', $module); return view(); } public function get_list($where,$param) { $tables = Db::name('FlowCate')->field('name,check_table')->where('status',1)->select()->toArray(); $prefix = get_config('database.connections.mysql.prefix'); $sqlParts = []; $sqlCounts = []; $fortable =[]; foreach ($tables as $table) { $dbname = $table['check_table']; if(in_array($dbname,$fortable)){ continue; } $check_name = $table['name']; $tableName = $prefix.$dbname; $sqlPart = "SELECT id,admin_id,did,create_time,check_status,check_flow_id,check_step_sort,check_uids,check_last_uid,check_history_uids,check_copy_uids,check_time,'{$dbname}' as table_name,'{$check_name}' as check_name,'{$check_name}' as invoice_type,'{$check_name}' as types FROM {$tableName} WHERE {$where}"; if($dbname=='invoice' || $dbname=='ticket'){ $sqlPart = "SELECT id,admin_id,did,create_time,check_status,check_flow_id,check_step_sort,check_uids,check_last_uid,check_history_uids,check_copy_uids,check_time,'{$dbname}' as table_name,'{$check_name}' as check_name,invoice_type,'{$check_name}' as types FROM {$tableName} WHERE {$where}"; } if($dbname=='approve'){ $sqlPart = "SELECT id,admin_id,did,create_time,check_status,check_flow_id,check_step_sort,check_uids,check_last_uid,check_history_uids,check_copy_uids,check_time,'{$dbname}' as table_name,'{$check_name}' as check_name,'{$check_name}' as invoice_type,types FROM {$tableName} WHERE {$where}"; } $sqlCount = "SELECT COUNT(*) AS count FROM {$tableName} WHERE {$where}"; // 查询数据库中是否存在该数据表 $is_table = Db::query("SHOW TABLES LIKE '{$tableName}'"); // 判断查询结果 if (!empty($is_table)) { $sqlParts[] = $sqlPart; $sqlCounts[] = $sqlCount; $fortable[] = $table['check_table']; } } // 使用implode将各个部分用UNION ALL连接起来 $unionSql = implode(" UNION ALL ", $sqlParts); $totalCount = 0; foreach ($sqlCounts as $sql) { $count = Db::query($sql)[0]['count']; // 假设每个查询都返回了一个包含'count'键的数组 $totalCount += $count; } // 添加排序和分页逻辑 $page = isset($param['page']) ? $param['page'] : 1; $pageSize = $param['limit']; $offset = ($page - 1) * $pageSize; // 注意:不同的数据库分页语法可能有所不同,这里以MySQL为例 $finalSql = $unionSql . " ORDER BY create_time DESC LIMIT {$offset}, {$pageSize}"; // 执行查询 $result = Db::query($finalSql); // 处理结果 foreach ($result as &$row) { // 处理每一行数据 $row['create_time'] = date('Y-m-d H:i:s',$row['create_time']); $row['admin_name'] = Db::name('Admin')->where('id',$row['admin_id'])->value('name'); $row['department'] = Db::name('Department')->where('id',$row['did'])->value('title'); $row['check_status_str'] = check_status_name($row['check_status']); if($row['check_status']==1 && !empty($row['check_uids'])){ $check_users = Db::name('Admin')->where('id','in',$row['check_uids'])->column('name'); $row['check_users'] = implode(',',$check_users); } else{ $row['check_users']='-'; } if(!empty($row['check_copy_uids'])){ $check_copy_users = Db::name('Admin')->where('id','in',$row['check_copy_uids'])->column('name'); $row['check_copy_users'] = implode(',',$check_copy_users); } else{ $row['check_copy_users']='-'; } $check_name=$row['check_name']; if($row['table_name'] == 'invoice' || $row['table_name']=='ticket'){ if($row['invoice_type']==0){ $check_name=$row['table_name'].'a'; } else{ $check_name=$row['table_name']; } } if($row['table_name'] == 'approve'){ $check_name='approve_'.$row['types']; } $flow_cate = Db::name('FlowCate')->where('name',$check_name)->find(); $row['types_name'] = $flow_cate['title']; $row['view_url'] = $flow_cate['view_url']; $row['add_url'] = $flow_cate['add_url']; } $list=array( 'data'=>$result, 'total'=>$totalCount ); return $list; } //我申请的 public function mylist() { if (request()->isAjax()) { $param = get_params(); $status = isset($param['status']) ? $param['status'] : 0; $uid = $this->uid; $where = "delete_time = 0"; if($status == 1){ $where.= " AND check_status < 2"; } if($status == 2){ $where.= " AND check_status = 2"; } if($status == 3){ $where.= " AND check_status > 2"; } $where.= ' AND admin_id = '.$uid; //关联抄送人 //$where.= " AND FIND_IN_SET('{$uid}',check_copy_uids)"; //关联审核人 //$where.= " AND (FIND_IN_SET('{$uid}',check_uids) or FIND_IN_SET('{$uid}',check_history_uids))"; $list = $this->get_list($where,$param); return table_assign(0, '', $list); } else { return view(); } } public function checklist() { if (request()->isAjax()) { $param = get_params(); $uid = $this->uid; $status = isset($param['status']) ? $param['status'] : 0; $where = "delete_time = 0"; if($status == 0){ $where.= " AND (FIND_IN_SET('{$uid}',check_uids) or FIND_IN_SET('{$uid}',check_history_uids))"; } if($status == 1){ $where.= " AND FIND_IN_SET('{$uid}',check_uids)"; } if($status == 2){ $where.= " AND FIND_IN_SET('{$uid}',check_history_uids)"; } $list = $this->get_list($where,$param); return table_assign(0, '', $list); } else { return view(); } } public function copylist() { if (request()->isAjax()) { $param = get_params(); $status = isset($param['status']) ? $param['status'] : 0; $uid = $this->uid; $where = "delete_time = 0"; if($status == 1){ $where.= " AND check_status < 2"; } if($status == 2){ $where.= " AND check_status = 2"; } if($status == 3){ $where.= " AND check_status > 2"; } //关联抄送人 $where.= " AND FIND_IN_SET('{$uid}', check_copy_uids) > 0"; $list = $this->get_list($where,$param); return table_assign(0, '', $list); } else { return view(); } } //全部审批 public function all() { $auth_approve = isAuth($this->uid,'office_admin','conf_1'); if (request()->isAjax()) { if($auth_approve==0){ return to_assign(1, '无权限访问'); } $param = get_params(); $status = isset($param['status']) ? $param['status'] : 0; $uid = $this->uid; $where = "delete_time = 0"; if($status == 1){ $where.= " AND check_status < 2"; } if($status == 2){ $where.= " AND check_status = 2"; } if($status == 3){ $where.= " AND check_status > 2"; } if(!empty($param['uid'])){ $where.= ' AND admin_id = '.$param['uid']; } $list = $this->get_list($where,$param); return table_assign(0, '', $list); } else { if($auth_approve==0){ throw new \think\exception\HttpException(405, '无权限访问'); } return view(); } } }