| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- <?php
- /**
- +-----------------------------------------------------------------------------------------------
- * GouGuOPEN [ 左手研发,右手开源,未来可期!]
- +-----------------------------------------------------------------------------------------------
- * @Copyright (c) 2021~2024 http://www.gouguoa.com All rights reserved.
- +-----------------------------------------------------------------------------------------------
- * @Licensed 勾股OA,开源且可免费使用,但并不是自由软件,未经授权许可不能去除勾股OA的相关版权信息
- +-----------------------------------------------------------------------------------------------
- * @Author 勾股工作室 <hdm58@qq.com>
- +-----------------------------------------------------------------------------------------------
- */
- 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();
- }
- }
- }
|