Files
OA/app/home/controller/Approve.php
T
2026-07-23 09:40:36 +08:00

262 lines
8.6 KiB
PHP

<?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();
}
}
}