<?php // +---------------------------------------------------------------------- // | Description: 审批统计 // +---------------------------------------------------------------------- // | Author: Michael_xu | gengxiaoxu@5kcrm.com // +---------------------------------------------------------------------- namespace app\bi\model; use think\Db; use app\admin\model\Common; use app\admin\model\User as UserModel; use app\bi\model\Examine as OaExamineModel; use think\Request; class Examine extends Common { /** * 为了数据库的整洁,同时又不影响Model和Controller的名称 * 我们约定每个模块的数据表都加上相同的前缀,比如CRM模块用crm作为数据表前缀 */ protected $name = 'oa_examine'; protected $createTime = 'create_time'; protected $updateTime = 'update_time'; protected $autoWriteTimestamp = true; private $statusArr = ['0'=>'待审核','1'=>'审核中','2'=>'审核通过','3'=>'已拒绝','4'=>'已撤回']; /** * [getSortByExamine 排序] * @author zhi * @param * @return */ public function getSortByExamine($whereArr) { $count = OaExamineModel::where($whereArr) ->group('create_user_id') ->field('create_user_id,count(*) as count') ->order('count desc') ->select(); return $count; } /** * [getStatistics 审批统计] * * @param $param * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function getStatistics($param) { $userModel = new \app\admin\model\User(); $adminModel = new \app\admin\model\Admin(); $perUserIds = []; //权限范围内userIds $whereData = $adminModel->getWhere($param, '', $perUserIds); //统计条件 $userIds = $whereData['userIds']; //时间 $category_list = db('oa_examine_category') ->where(['status' => 1,'is_deleted' => ['neq',1]]) ->field('category_id,title') ->select(); $fields = ['create_user_id']; foreach ($category_list as $key=>$val) { // 拼接表头标题 $category_list[$key]['title'] = strstr($val['title'],'审批') ? str_replace('审批','次数',$val['title']) : $val['title'].'次数'; $fields['SUM(CASE WHEN category_id = ' . $val['category_id'] . ' THEN 1 ELSE 0 END)'] = 'count_' . $val['category_id']; } $sql = OaExamineModel::field($fields) ->where([ 'create_time' => ['BETWEEN', $whereData['between_time']], 'create_user_id' => ['IN', $userIds], 'check_status' => ['neq', 4] ]) ->group('create_user_id') ->fetchSql() ->select(); $list = queryCache($sql); // $list = array_column($list, null, 'create_user_id'); foreach ($list as $key => $val) { $val['realname'] = $userModel->getUserById($val['create_user_id'])['realname']; $val['id'] = $val['create_user_id']; $list[$key] = $val; } $data = [ 'category_list' => $category_list, 'userList' => $list ]; return $data ? : []; } }