* Date: 2018-4-3 */ namespace app\admin\logic; use think\Model; use think\Db; use think\Page; use think\Request; /** * 逻辑定义 * Class CatsLogic * @package admin\Logic */ load_trait('controller/Jump'); class EyouCmsLogic extends Model { use \traits\controller\Jump; public $request = null; // 当前Request对象实例 public $main_lang = 'cn'; // 后台多语言标识 public $admin_lang = 'cn'; // 后台多语言标识 public $root_dir = ROOT_DIR; /** * 析构函数 */ function __construct() { null === $this->request && $this->request = Request::instance(); $this->main_lang = get_main_lang(); $this->admin_lang = get_admin_lang(); } public function welcome_default(&$assign_data = [], $globalConfig = [], $usersConfig = []) { // 同步导航与内容统计的状态 $this->syn_open_quickmenu($globalConfig, $usersConfig); // 快捷导航 $quickMenu = Db::name('quickentry')->where([ 'type' => 1, 'checked' => 1, 'status' => 1, ])->order('sort_order asc, id asc')->select(); $web_recycle_switch = tpCache('web.web_recycle_switch'); foreach ($quickMenu as $key => $val) { if ($globalConfig['php_servicemeal'] <= 1 && $val['controller'] == 'Shop' && $val['action'] == 'index') { unset($quickMenu[$key]); continue; } if (!empty($web_recycle_switch) && $val['controller'] == 'RecycleBin' && $val['action'] == 'archives_index'){ unset($quickMenu[$key]); continue; } if (is_language() && $this->main_lang != $this->admin_lang) { $controllerArr = ['Weapp','Filemanager','Sitemap','Admin','Member','Seo','Channeltype','Tools']; if (empty($globalConfig['language_split'])) { $controllerArr[] = 'RecycleBin'; } $ctlActArr = ['System@water','System@thumb','System@api_conf']; if (in_array($val['controller'], $controllerArr) || in_array($val['controller'].'@'.$val['action'], $ctlActArr)) { unset($quickMenu[$key]); continue; } } $quickMenu[$key]['vars'] = !empty($val['vars']) ? $val['vars']."&lang=".$this->admin_lang : "lang=".$this->admin_lang; } $assign_data['quickMenu'] = $quickMenu; // 内容统计 $assign_data['contentTotal'] = $this->contentTotalList(); // 服务器信息 $assign_data['sys_info'] = $this->get_sys_info($globalConfig); } /** * 同步受开关控制的导航和内容统计 */ private function syn_open_quickmenu($globalConfig = [], $usersConfig = []) { /*商城中心 - 受本身开关和会员中心开关控制*/ if (!empty($globalConfig['web_users_switch']) && !empty($usersConfig['shop_open'])) { $shop_open = 1; } else { $shop_open = 0; } /*end*/ $saveData = [ [ 'id' => 31, 'status' => !empty($globalConfig['web_users_switch']) ? 1 : 0, 'update_time' => getTime(), ], [ 'id' => 32, 'status' => (1 == $globalConfig['web_weapp_switch']) ? 1 : 0, 'update_time' => getTime(), ], [ 'id' => 33, 'status' => !empty($globalConfig['web_users_switch']) ? 1 : 0, 'update_time' => getTime(), ], [ 'id' => 34, 'status' => $shop_open, 'update_time' => getTime(), ], [ 'id' => 35, 'status' => $shop_open, 'update_time' => getTime(), ], ]; model('Quickentry')->saveAll($saveData); /*处理模型导航和统计*/ $channeltypeRow = Db::name('channeltype')->cache(true,EYOUCMS_CACHE_TIME,"channeltype")->select(); foreach ($channeltypeRow as $key => $val) { $updateData = [ 'groups' => 1, 'vars' => 'channel='.$val['id'], 'status' => $val['status'], 'update_time' => getTime(), ]; Db::name('quickentry')->where([ 'vars' => 'channel='.$val['id'] ])->update($updateData); } /*end*/ } /** * 内容统计 - 数量处理 */ private function contentTotalList() { $shop_open = getUsersConfigData('shop.shop_open'); $archivesTotalRow = null; $quickentryList = Db::name('quickentry')->where([ 'type' => 2, 'checked' => 1, 'status' => 1, ])->order('sort_order asc, id asc')->select(); foreach ($quickentryList as $key => $val) { $code = $val['controller'].'@'.$val['action'].'@'.$val['vars']; $quickentryList[$key]['vars'] = !empty($val['vars']) ? $val['vars']."&lang=".$this->admin_lang : "lang=".$this->admin_lang; if ($code == 'Form@index@') // 留言列表 { $map = [ 'lang' => $this->admin_lang, ]; $quickentryList[$key]['total'] = Db::name('guestbook')->where($map)->count(); } else if (1 == $val['groups']) // 模型内容统计 { if ('Product' == $val['controller']) { if (1 == $shop_open) { $val['controller'] = 'ShopProduct'; } } parse_str($val['vars'], $vars); $admin_info = session('admin_info'); $auth_role_info = !empty($admin_info['auth_role_info']) ? $admin_info['auth_role_info'] : []; if (!empty($auth_role_info['permission']['arctype'])) { /*权限控制 by 小虎哥*/ if (0 < intval($admin_info['role_id'])) { $arctype_channels = Db::name('arctype')->field('current_channel')->where([ 'id' => ['IN', $auth_role_info['permission']['arctype']], ])->group('current_channel')->column('current_channel'); if (!in_array($vars['channel'], $arctype_channels)) { // 移除该模型没有分配栏目权限的模块 if (isset($quickentryList[$key])) { unset($quickentryList[$key]); continue; } } } /*--end*/ } else { /*权限控制 by 小虎哥*/ if (0 < intval($admin_info['role_id'])) { if (isset($quickentryList[$key])) { unset($quickentryList[$key]); continue; } } /*--end*/ } if (null === $archivesTotalRow) { $map = [ 'lang' => $this->admin_lang, 'status' => 1, 'is_del' => 0, ]; $mapNew = "(users_id = 0 OR (users_id > 0 AND arcrank >= 0))"; /*权限控制 by 小虎哥*/ if (0 < intval($admin_info['role_id'])) { if(! empty($auth_role_info)){ if(isset($auth_role_info['only_oneself']) && 1 == $auth_role_info['only_oneself']){ $map['admin_id'] = $admin_info['admin_id']; } } } /*--end*/ $SqlQuery = Db::name('archives')->field('channel, count(aid) as total')->where($map)->where($mapNew)->group('channel')->select(false); $SqlResult = Db::name('sql_cache_table')->where(['sql_md5'=>md5($SqlQuery)])->getField('sql_result'); if (!empty($SqlResult)) { $archivesTotalRow = json_decode($SqlResult, true); } else { $archivesTotalRow = Db::name('archives')->field('channel, count(aid) as total')->where($map)->where($mapNew)->group('channel')->getAllWithIndex('channel'); /*添加查询执行语句到mysql缓存表*/ $SqlCacheTable = [ 'sql_name' => '|model|all|count|', 'sql_result' => json_encode($archivesTotalRow), 'sql_md5' => md5($SqlQuery), 'sql_query' => $SqlQuery, 'add_time' => getTime(), 'update_time' => getTime(), ]; Db::name('sql_cache_table')->insertGetId($SqlCacheTable); /*END*/ } } $val['total'] = !empty($archivesTotalRow[$vars['channel']]['total']) ? intval($archivesTotalRow[$vars['channel']]['total']) : 0; $quickentryList[$key] = $val; } else if ($code == 'AdPosition@index@') // 广告 { $map = [ 'lang' => $this->admin_lang, 'is_del' => 0, ]; $quickentryList[$key]['total'] = Db::name('ad_position')->where($map)->count(); } else if ($code == 'Links@index@') // 友情链接 { $map = [ 'lang' => $this->admin_lang, ]; $quickentryList[$key]['total'] = Db::name('links')->where($map)->count(); } else if ($code == 'Tags@index@') // Tags标签 { $map = [ 'lang' => $this->admin_lang, ]; $quickentryList[$key]['total'] = Db::name('tagindex')->where($map)->count(); } else if ($code == 'Member@users_index@') // 会员 { $map = [ 'lang' => $this->admin_lang, 'is_del' => 0, ]; $quickentryList[$key]['total'] = Db::name('users')->where($map)->count(); } else if ($code == 'Shop@index@') // 订单 { $map = [ 'lang' => $this->admin_lang, ]; $quickentryList[$key]['total'] = Db::name('shop_order')->where($map)->count(); } } return $quickentryList; } /** * 服务器信息 */ private function get_sys_info($globalConfig = []) { $sys_info['os'] = PHP_OS; $sys_info['zlib'] = function_exists('gzclose') ? 'YES' : 'NO(请开启 php.ini 中的php-zlib扩展)';//zlib $sys_info['safe_mode'] = (boolean) ini_get('safe_mode') ? 'YES' : 'NO';//safe_mode = Off $sys_info['timezone'] = function_exists("date_default_timezone_get") ? date_default_timezone_get() : "no_timezone"; $sys_info['curl'] = function_exists('curl_init') ? 'YES' : 'NO(请开启 php.ini 中的php-curl扩展)'; $web_server = $_SERVER['SERVER_SOFTWARE']; if (stristr($web_server, 'apache')) { $web_server = 'apache'; } else if (stristr($web_server, 'nginx')) { $web_server = 'nginx'; } else if (stristr($web_server, 'iis')) { $web_server = 'iis'; } $sys_info['web_server'] = $web_server; $sys_info['phpv'] = phpversion(); $sys_info['ip'] = serverIP(); $sys_info['postsize'] = @ini_get('file_uploads') ? ini_get('post_max_size') :'未知'; $sys_info['fileupload'] = @ini_get('file_uploads') ? ini_get('upload_max_filesize') :'未开启'; $sys_info['max_ex_time'] = @ini_get("max_execution_time").'s'; //脚本最大执行时间 $sys_info['set_time_limit'] = function_exists("set_time_limit") ? true : false; $sys_info['domain'] = request()->host(); $sys_info['memory_limit'] = ini_get('memory_limit'); $sys_info['version'] = file_get_contents(DATA_PATH.'conf/version.txt'); $mysqlinfo = Db::query("SELECT VERSION() as version"); $sys_info['mysql_version'] = $mysqlinfo[0]['version']; if(function_exists("gd_info")){ $gd = gd_info(); $sys_info['gdinfo'] = $gd['GD Version']; }else { $sys_info['gdinfo'] = "未知"; } if (extension_loaded('zip')) { $sys_info['zip'] = "YES"; } else { $sys_info['zip'] = 'NO(请开启 php.ini 中的php-zip扩展)'; } $sys_info['curent_version'] = getCmsVersion(); //当前程序版本 $sys_info['web_name'] = empty($globalConfig['web_name']) ? '' : $globalConfig['web_name']; return $sys_info; } /** * 内置商城欢迎页主题 * @return [type] [description] */ public function welcome_shop(&$assign_data = [], $globalConfig = [], $usersConfig = []) { // 快捷导航 $quickMenu = Db::name('quickentry')->where([ 'type' => 11, 'checked' => 1, 'status' => 1, ])->order('sort_order asc, id asc')->select(); foreach ($quickMenu as $key => $val) { if (empty($val['litpic'])) { unset($quickMenu[$key]); continue; } $quickMenu[$key]['vars'] = !empty($val['vars']) ? $val['vars'] : ''; $quickMenu[$key]['litpic'] = get_default_pic($val['litpic']); } $assign_data['quickMenu'] = $quickMenu; //插件快捷导航 $weappMenuList = Db::name('weapp')->where([ 'status' => 1, 'checked' => 1, ])->order('quick_sort asc, id asc')->select(); foreach ($weappMenuList as $key => $val) { if (!empty($val['config'])){ $val['config'] = json_decode($val['config'],true); if (0 == $val['is_system']){ $val['config']['litpic'] = get_default_pic($val['config']['litpic']); } if (empty($val['config']['management']['href'])) { if (!empty($val['config']['management']['controller']) && !empty($val['config']['management']['action'])) { $val['config']['management']['href'] = url($val['config']['management']['controller'].'/'.$val['config']['management']['action'], $val['config']['management']['param']); } else { $val['config']['management']['href'] = url('Weapp/execute',array('sm'=>$val['config']['code'],'sc'=>$val['config']['code'],'sa'=>'index')); } } $weappMenuList[$key] = $val; } } $assign_data['weappMenuList'] = $weappMenuList; //实时概况 $surveyQuickMenu = Db::name('quickentry')->where([ 'type' => 21, 'checked' => 1, 'status' => 1, ])->order('sort_order asc, id asc')->select(); $statistics_type = get_arr_column($surveyQuickMenu,'statistics_type'); $now_date = date('Y-m-d'); $now_time = strtotime($now_date); $yesterday = $now_time - 86400; //统计 今日/昨日 $statistics_where = $today_statistics_data = $yesterday_statistics_data = []; $statistics_where['type'] = ['in',$statistics_type]; $statistics_where['date'] = ['egt', $yesterday]; $statistics_where['lang'] = $this->admin_lang; $statistics_data = Db::name('statistics_data')->where($statistics_where)->select(); foreach ($statistics_data as $key => $val) { if ($val['date'] < $now_time) { // 昨天统计 $yesterday_statistics_data[$val['type']] = $val; } else if ($val['date'] >= $now_time) { // 今天统计 $today_statistics_data[$val['type']] = $val; } } $total_statistics_data = []; $archives_data = []; if (in_array(1,$statistics_type) || in_array(6,$statistics_type)) { $archives_data = Db::name('archives')->field('sum(click) as click, count(aid) as total')->where(['is_del'=>0,'lang'=>$this->admin_lang])->find(); } if (in_array(1,$statistics_type)){ $total_statistics_data[1] = empty($archives_data['click']) ? 0 : $archives_data['click']; } if (in_array(6,$statistics_type)){ $total_statistics_data[6] = empty($archives_data['total']) ? 0 : $archives_data['total']; } $shop_order_data = []; if (in_array(2,$statistics_type) || in_array(3,$statistics_type)) { $shop_order_data = Db::name('shop_order')->field('sum(order_amount) as order_amount, count(order_id) as total')->where(['order_status' => ['IN', [1, 2, 3]],'lang'=>$this->admin_lang])->find(); } if (in_array(2,$statistics_type)){ $total_statistics_data[2] = empty($shop_order_data['total']) ? 0 : $shop_order_data['total']; } if (in_array(3,$statistics_type)){ $total_statistics_data[3] = empty($shop_order_data['order_amount']) ? 0 : $shop_order_data['order_amount']; } if (in_array(4,$statistics_type)){ $total_statistics_data[4] = Db::name('users')->where(['is_del'=>0,'lang'=>$this->admin_lang])->count('users_id'); } if (in_array(5,$statistics_type)){ $total_statistics_data[5] = Db::name('users_money')->where(['cause_type'=>1,'status' => ['IN', [2, 3]],'lang'=>$this->admin_lang])->sum('money'); } foreach ($surveyQuickMenu as $k => $v) { $v['data'] = [ 'today' => empty($today_statistics_data[$v['statistics_type']]) ? [] : $today_statistics_data[$v['statistics_type']], 'yesterday' => empty($yesterday_statistics_data[$v['statistics_type']]) ? [] : $yesterday_statistics_data[$v['statistics_type']], 'total' => empty($total_statistics_data[$v['statistics_type']]) ? 0 : $total_statistics_data[$v['statistics_type']], ]; $surveyQuickMenu[$k] = $v; } $assign_data['surveyQuickMenu'] = $surveyQuickMenu; $assign_data['current_time'] = date('Y-m-d H:i:s'); $lineChartData = $this->GetLineChartData(); $assign_data['DealNum'] = $lineChartData['num']; $assign_data['DealAmount'] = $lineChartData['amount']; //待办事项统计 $toDoList = []; $toDoList['undelivery'] = Db::name('shop_order')->where(['order_status'=>1,'lang'=>$this->admin_lang])->count('order_id'); $toDoList['service'] = Db::name('shop_order_service')->where(['status'=>1,'lang'=>$this->admin_lang])->count('service_id'); $where = [ 'a.is_del' => 0, 'a.channel' => 2, 'a.stock_count|b.spec_stock' => ['elt', $usersConfig['goods_stock_warning']], 'a.lang' => $this->admin_lang, ]; $toDoList['warning'] = Db::name('archives')->alias('a')->join('product_spec_value b', 'a.aid = b.aid', 'LEFT')->where($where)->group('a.aid')->count('a.aid'); $assign_data['toDoList'] = $toDoList; //pc端前台入口链接 $assign_data['home_url'] = $this->shouye($globalConfig); //小程序码 $weixin_data = tpSetting("OpenMinicode.conf_weixin"); $weixin_data = json_decode($weixin_data, true); $weixin_qrcodeurl = ""; if (!empty($weixin_data['appid'])) { $filepath = UPLOAD_PATH."allimg/20230505/weixin-".md5($weixin_data['appid']).".png"; tp_mkdir(dirname($filepath)); if (file_exists($filepath)) { $weixin_qrcodeurl = "{$this->root_dir}/".$filepath; } } $assign_data['weixin_data'] = $weixin_data; $assign_data['weixin_qrcodeurl'] = $weixin_qrcodeurl; // h5二维码 vendor('wechatpay.phpqrcode.phpqrcode'); $pngurl = $this->request->domain().ROOT_DIR; $h5_qrcodeurl = ""; $filepath = UPLOAD_PATH."allimg/20230505/h5-".md5($pngurl).".png"; tp_mkdir(dirname($filepath)); if (file_exists($filepath)) { $h5_qrcodeurl = "{$this->root_dir}/".$filepath; } else { $qrcode = new \QRcode; $qrcode->png($pngurl, $filepath, 0, 3, 1); $h5_qrcodeurl = "{$this->root_dir}/".$filepath; } $assign_data['h5_qrcodeurl'] = $h5_qrcodeurl; } // 近七日成交量成交额折线图数据 private function GetLineChartData() { $now_day = strtotime(date("Y-m-d")); $min_time = $now_day - (6*86400); $dataNum = $dataAmount = []; $statistics_data = Db::name('statistics_data')->field('date,num,total')->where([ 'type'=>2, 'date'=>['egt', $min_time], 'lang'=>$this->admin_lang, ])->order('date desc')->getAllWithIndex('date'); for ($i = 0;$i<7;$i++){ $time = $now_day - $i*86400; //成交量 $dataNum[$i] = empty($statistics_data[$time]) ? 0 : $statistics_data[$time]['num']; //成交额 $dataAmount[$i] = empty($statistics_data[$time]) ? 0 : $statistics_data[$time]['total']; } $dataNum = array_reverse($dataNum); $dataAmount = array_reverse($dataAmount); return ['num'=>$dataNum,'amount'=>$dataAmount]; } /** * 301跳转首页 */ public function shouye($globalConfig = []) { $inletStr = '/index.php'; $seo_inlet = config('ey_config.seo_inlet'); 1 == intval($seo_inlet) && $inletStr = ''; // --end $home_default_lang = config('ey_config.system_home_default_lang'); $home_url = $this->request->domain().ROOT_DIR.'/index.php'; // 支持子目录 //默认前台语言,链接中不需要带语言参数;非默认前台语言,链接中需要带语言参数 if ($home_default_lang != $this->admin_lang) { $home_url = Db::name('language')->where(['mark'=>$this->admin_lang])->getField('url'); if (empty($home_url)) { $seo_pseudo = !empty($globalConfig['seo_pseudo']) ? $globalConfig['seo_pseudo'] : config('ey_config.seo_pseudo'); if (1 == $seo_pseudo) { $home_url = $this->request->domain().ROOT_DIR.$inletStr; // 支持子目录 if (!empty($inletStr)) { $home_url .= '?'; } else { $home_url .= '/?'; } $home_url .= http_build_query(['lang'=>$this->admin_lang]); } else { $home_url = $this->request->domain().ROOT_DIR.$inletStr.'/'.$this->admin_lang; // 支持子目录 } } } if (stristr($home_url, '?')) { $home_url .= '&clear=1'; } else { $home_url .= '?clear=1'; } return $home_url; } /** * 任务流版欢迎页主题 * @param array &$assign_data [description] * @param array $globalConfig [description] * @param array $usersConfig [description] * @return [type] [description] */ public function welcome_taskflow(&$assign_data = [], $globalConfig = [], $usersConfig = []) { // 服务器信息 $assign_data['sys_info'] = $this->get_sys_info($globalConfig); $weappList = model('weapp')->getWeappList(); $assign_data['weappList'] = $weappList; // 安装【工作任务流】插件才可用 if (!empty($weappList['TaskFlow']) && 1 == $weappList['TaskFlow']['status']) { $Prefix = config('database.prefix'); $taskflowTableInfo = Db::query("SHOW COLUMNS FROM {$Prefix}weapp_task_flow"); $taskflowTableInfo = get_arr_column($taskflowTableInfo, 'Field'); if (!empty($taskflowTableInfo) && !in_array('helper_id', $taskflowTableInfo)){ $sql = "ALTER TABLE `{$Prefix}weapp_task_flow` ADD COLUMN `helper_id` int(11) NOT NULL DEFAULT 0 COMMENT '协助问题的负责人ID' AFTER `auditors_id`;"; $r = @Db::execute($sql); if ($r !== false) { schemaTable('weapp_task_flow'); } } // 当前管理员 $admin_info = getAdminInfo(session('admin_id')); $assign_data['admin_info'] = $admin_info; // 指定查看的管理员id $admin_id = input('admin_id/d', $admin_info['admin_id']); $assign_data['admin_id'] = $admin_id; // 小组成员列表 $admin_list = Db::name('admin') ->alias('a') ->field('a.*, b.name as role_name') ->join('auth_role b','a.role_id = b.id','LEFT') ->where([ 'a.status' => 1, ]) ->select(); $NewAdmin = []; foreach ($admin_list as $k =>$v) { if (0 >= intval($v['role_id'])) { $v['role_name'] = !empty($v['parent_id']) ? '超级管理员' : '创始人'; } $v['pen_name'] = !empty($v['true_name']) ? $v['true_name'] : $v['pen_name']; $v['pen_name'] = !empty($v['pen_name']) ? $v['pen_name'] : $v['user_name']; $admin_list[$k] = $v; $NewAdmin[$k]['name'] = $v['pen_name']; $NewAdmin[$k]['value'] = $v['admin_id']; } $assign_data['admin_list'] = $admin_list; $assign_data['NewAdmin'] = $NewAdmin; $taskFlowData = $this->taskFlowData(); $assign_data['taskFlowData'] = $taskFlowData; //任务流统计 $row = Db::name('weapp_task_flow')->field('initiator_id,handler_id,auditors_id,helper_id,task_status,is_draft')->where([ 'initiator_id|handler_id|auditors_id|helper_id' => $admin_id, ])->order('task_status asc, task_id desc')->select(); $countRow = ['all'=>0, 'my'=>0, 'test'=>0, 'done'=>0, 'draft'=>0]; foreach ($row as $key => $val) { if (1 == $val['is_draft']) { if (in_array($admin_id, [$val['initiator_id']])) { $countRow['draft']++; } } else { if ($admin_id == $val['initiator_id']) { //发起任务 $countRow['my']++; } // if (4 == $val['task_status'] && in_array($admin_id, [$val['initiator_id'], $val['handler_id'], $val['auditors_id']])) { //待测试 // $countRow['test']++; // } if (5 == $val['task_status']) { //已完成 if (in_array($admin_id, [$val['handler_id'], $val['auditors_id']])) { $countRow['done']++; } } else { //我的任务 if ( in_array($admin_id, [$val['handler_id']]) || (4 == $val['task_status'] && in_array($admin_id, [$val['auditors_id']])) || (2 == $val['task_status'] && in_array($admin_id, [$val['helper_id']])) ) { $countRow['all']++; //我的任务 } } } } $assign_data['countRow'] = $countRow; //任务流 默认是当前管理员的处理人任务 $task_where = [ 'a.is_draft' => 0, 'a.task_status' => ['NOTIN', [5]], ]; $task_where[] = Db::raw(" (a.handler_id = '{$admin_id}' OR (a.auditors_id = '{$admin_id}' AND a.task_status = 4) OR (a.helper_id = '{$admin_id}' AND a.task_status = 2)) "); $task_list = Db::name('weapp_task_flow') ->field('a.*') ->alias('a') ->where($task_where) ->orderRaw("FIND_IN_SET(a.task_status, '2,6,1,3,4,5') ASC, a.helper_id desc, a.task_id desc") ->limit(8)->select(); $task_admin_ids = []; foreach ($task_list as $key => $val) { array_push($task_admin_ids, $val['initiator_id']); array_push($task_admin_ids, $val['handler_id']); array_push($task_admin_ids, $val['auditors_id']); array_push($task_admin_ids, $val['helper_id']); } $week_time = mktime(0, 0 , 0,date("m"),date("d")-date("w")+1,date("Y")); $task_admin_list = Db::name('admin')->field('admin_id,user_name,pen_name,true_name,head_pic')->where(['admin_id'=>['IN',$task_admin_ids]])->getAllWithIndex('admin_id'); foreach ($task_list as $key => $val) { if (!empty($val['project_id']) && !empty($taskFlowData['project_list'][$val['project_id']]['name'])) { $val['task_title'] = '【'.$taskFlowData['project_list'][$val['project_id']]['name'].'】'.$val['task_title']; }else { $val['task_title'] = '【其他】' . $val['task_title']; } $val['status_name'] = $this->taskFlowStatus($val['task_status'], 'text', $val['helper_id']); $val['status_bg'] = $this->taskFlowStatus($val['task_status'], 'bg', $val['helper_id']); $val['level_name'] = $this->taskFlowLevel($val['task_level']); $val['level_bg'] = $this->taskFlowLevel($val['task_level'], 'bg'); if ($val['task_status'] == 3) { $new_time = $val['update_time']; } else if ($val['task_status'] == 4) { $new_time = $val['update_time']; } else if ($val['task_status'] == 5) { $new_time = $val['update_time']; } else { $new_time = $val['add_time']; } if ($new_time > $week_time) { $new_time = '本周'; } else { $new_time = MyDate('Y-m-d', $new_time); } $val['new_time'] = $new_time; if (!empty($val['initiator_id'])) { $val['initiator_info'] = !empty($task_admin_list[$val['initiator_id']]) ? $task_admin_list[$val['initiator_id']] : $task_admin_list[1]; } if (!empty($val['handler_id'])) { $val['handler_info'] = !empty($task_admin_list[$val['handler_id']]) ? $task_admin_list[$val['handler_id']] : $task_admin_list[1]; } if (!empty($val['auditors_id'])) { $val['auditors_info'] = !empty($task_admin_list[$val['auditors_id']]) ? $task_admin_list[$val['auditors_id']] : $task_admin_list[1]; } if (!empty($val['helper_id'])) { $val['helper_info'] = !empty($task_admin_list[$val['helper_id']]) ? $task_admin_list[$val['helper_id']] : $task_admin_list[1]; if (2 == $val['task_status']) { $val['handler_info'] = $val['helper_info']; } } $task_list[$key] = $val; } $assign_data['task_list'] = $task_list; } /*----------------业务统计 start-------------*/ $surveyQuickMenu = Db::name('quickentry')->where([ 'type' => 31, 'checked' => 1, 'status' => 1, ])->order('sort_order asc, id asc')->select(); $statistics_type = get_arr_column($surveyQuickMenu,'statistics_type'); $now_date = date('Y-m-d'); $now_time = strtotime($now_date); $yesterday = $now_time - 86400; //统计 今日/昨日 $statistics_where = $today_statistics_data = $yesterday_statistics_data = []; $statistics_where['type'] = ['in',$statistics_type]; $statistics_where['date'] = ['egt', $yesterday]; $statistics_where['lang'] = $this->admin_lang; $statistics_data = Db::name('statistics_data')->where($statistics_where)->select(); foreach ($statistics_data as $key => $val) { if ($val['date'] < $now_time) { // 昨天统计 $yesterday_statistics_data[$val['type']] = $val; } else if ($val['date'] >= $now_time) { // 今天统计 $today_statistics_data[$val['type']] = $val; } } $total_statistics_data = []; $archives_data = []; if (in_array(1,$statistics_type) || in_array(6,$statistics_type)) { $archives_data = Db::name('archives')->field('sum(click) as click, count(aid) as total')->where(['is_del'=>0,'lang'=>$this->admin_lang])->find(); } if (in_array(1,$statistics_type)){ $total_statistics_data[1] = empty($archives_data['click']) ? 0 : $archives_data['click']; } if (in_array(6,$statistics_type)){ $total_statistics_data[6] = empty($archives_data['total']) ? 0 : $archives_data['total']; } $shop_order_data = []; if (in_array(2,$statistics_type) || in_array(3,$statistics_type)) { $shop_order_data = Db::name('shop_order')->field('sum(order_amount) as order_amount, count(order_id) as total')->where(['order_status' => ['IN', [1, 2, 3]],'lang'=>$this->admin_lang])->find(); } if (in_array(2,$statistics_type)){ $total_statistics_data[2] = empty($shop_order_data['total']) ? 0 : $shop_order_data['total']; } if (in_array(3,$statistics_type)){ $total_statistics_data[3] = empty($shop_order_data['order_amount']) ? 0 : $shop_order_data['order_amount']; } if (in_array(4,$statistics_type)){ $total_statistics_data[4] = Db::name('users')->where(['is_del'=>0,'lang'=>$this->admin_lang])->count('users_id'); } if (in_array(5,$statistics_type)){ $total_statistics_data[5] = Db::name('users_money')->where(['cause_type'=>1,'status' => ['IN', [2, 3]],'lang'=>$this->admin_lang])->sum('money'); } if (in_array(7,$statistics_type)){ // 发布文章总数 $total_statistics_data[7] = Db::name('archives')->where(['arcrank'=>['egt', 0],'status' => 1,'is_del' => 0,'lang'=>$this->admin_lang])->count(); } if (in_array(8,$statistics_type)){ // tag总数 / 今日数 $total_statistics_data[8] = Db::name('tagindex')->where(['id'=>['gt',0],'lang'=>$this->admin_lang])->count(); $today_statistics_data[8]['total'] = Db::name('tagindex')->whereTime('add_time', 'today')->where(['lang'=>$this->admin_lang])->count(); } if (in_array(9,$statistics_type)){ // 待审文档总数 $total_statistics_data[9] = Db::name('archives')->where(['arcrank'=>['eq', -1],'status' => 1,'is_del' => 0,'lang'=>$this->admin_lang])->count(); $today_statistics_data[9]['total'] = Db::name('archives')->whereTime('add_time', 'today')->where(['arcrank'=>['eq', -1],'status' => 1,'is_del' => 0,'lang'=>$this->admin_lang])->count(); } foreach ($surveyQuickMenu as $k => $v) { $v['data'] = [ 'today' => empty($today_statistics_data[$v['statistics_type']]) ? [] : $today_statistics_data[$v['statistics_type']], 'yesterday' => empty($yesterday_statistics_data[$v['statistics_type']]) ? [] : $yesterday_statistics_data[$v['statistics_type']], 'total' => empty($total_statistics_data[$v['statistics_type']]) ? [] : $total_statistics_data[$v['statistics_type']], ]; $v['url'] = empty($v['url']) ? url($v['controller'].'/'.$v['action'], [$v['vars']]) : $v['url']; $surveyQuickMenu[$k] = $v; } $assign_data['surveyQuickMenu'] = $surveyQuickMenu; $assign_data['current_time'] = date('Y-m-d H:i:s'); /*----------------业务统计 end-------------*/ } //ajax获取任务流数据 public function get_task_list() { if (IS_AJAX_POST){ $admin_id = input('post.admin_id/d', session('admin_id')); $task_status = input('post.task_status/s'); //任务流统计 $row = Db::name('weapp_task_flow')->field('initiator_id,handler_id,auditors_id,helper_id,task_status,is_draft')->where([ 'initiator_id|handler_id|auditors_id|helper_id' => $admin_id, ])->order('task_status asc, task_id desc')->select(); $countRow = ['all'=>0, 'my'=>0, 'test'=>0, 'done'=>0, 'draft'=>0]; foreach ($row as $key => $val) { if (1 == $val['is_draft']) { if (in_array($admin_id, [$val['initiator_id']])) { $countRow['draft']++; } } else { if ($admin_id == $val['initiator_id']) { //发起任务 $countRow['my']++; } // if (4 == $val['task_status'] && in_array($admin_id, [$val['initiator_id'], $val['handler_id'], $val['auditors_id']])) { //待测试 // $countRow['test']++; // } if (5 == $val['task_status']) { //已完成 if (in_array($admin_id, [$val['handler_id'], $val['auditors_id']])) { $countRow['done']++; } } else { //我的任务 if ( in_array($admin_id, [$val['handler_id']]) || (4 == $val['task_status'] && in_array($admin_id, [$val['auditors_id']])) || (2 == $val['task_status'] && in_array($admin_id, [$val['helper_id']])) ) { $countRow['all']++; //我的任务 } } } } //任务流列表 $task_where = []; $task_where['a.is_draft'] = 0; if ('my' == $task_status) { $task_where['a.initiator_id'] = $admin_id; $orderby = "FIND_IN_SET(a.task_status, '2,6,1,3,4,5') ASC, a.helper_id desc, a.task_id desc"; }elseif ('test' == $task_status) { $task_where['a.auditors_id'] = $admin_id; $task_where['a.task_status'] = 4; $orderby = "a.task_id desc"; }elseif ('done' == $task_status) { $task_where['a.handler_id|a.auditors_id'] = $admin_id; $task_where['a.task_status'] = 5; $orderby = "a.update_time desc"; }elseif ('draft' == $task_status) { $task_where['a.initiator_id'] = $admin_id; $task_where['a.is_draft'] = 1; $orderby = "a.task_id desc"; }else{ $task_where['a.handler_id|a.auditors_id|a.helper_id'] = $admin_id; $task_where['a.task_status'] = ['NOTIN', [5]]; $task_where[] = Db::raw(" (a.handler_id = '{$admin_id}' OR (a.auditors_id = '{$admin_id}' AND a.task_status = 4) OR (a.helper_id = '{$admin_id}' AND a.task_status = 2)) "); $orderby = "FIND_IN_SET(a.task_status, '2,6,1,3,4,5') ASC, a.helper_id desc, a.task_id desc"; } $count = Db::name('weapp_task_flow')->alias('a')->where($task_where)->count('a.task_id'); $pager = new Page($count, 8);// 实例化分页类 传入总记录数和每页显示的记录数 $task_list = Db::name('weapp_task_flow') ->field('a.*') ->alias('a') ->where($task_where) ->orderRaw($orderby) ->limit($pager->firstRow.','.$pager->listRows) ->select(); $task_admin_ids = []; foreach ($task_list as $key => $val) { array_push($task_admin_ids, $val['initiator_id']); array_push($task_admin_ids, $val['handler_id']); array_push($task_admin_ids, $val['auditors_id']); array_push($task_admin_ids, $val['helper_id']); } $task_admin_list = Db::name('admin')->field('admin_id,user_name,pen_name,true_name,head_pic')->where(['admin_id'=>['IN',$task_admin_ids]])->getAllWithIndex('admin_id'); $taskFlowData = $this->taskFlowData(); foreach ($task_list as $key => $val) { if (!empty($val['project_id']) && !empty($taskFlowData['project_list'][$val['project_id']]['name'])) { $val['task_title'] = '【'.$taskFlowData['project_list'][$val['project_id']]['name'].'】'.$val['task_title']; }else { $val['task_title'] = '【其他】' . $val['task_title']; } $val['status_name'] = $this->taskFlowStatus($val['task_status'], 'text', $val['helper_id']); $val['status_bg'] = $this->taskFlowStatus($val['task_status'], 'bg', $val['helper_id']); $val['level_name'] = $this->taskFlowLevel($val['task_level']); $val['level_bg'] = $this->taskFlowLevel($val['task_level'], 'bg'); if (!empty($val['initiator_id'])) { $val['initiator_info'] = !empty($task_admin_list[$val['initiator_id']]) ? $task_admin_list[$val['initiator_id']] : $task_admin_list[1]; $val['initiator_info']['head_pic'] = get_head_pic($val['initiator_info']['head_pic'], true); $val['initiator_info']['pen_name'] = !empty($val['initiator_info']['true_name']) ? $val['initiator_info']['true_name'] : $val['initiator_info']['pen_name']; empty($val['initiator_info']['pen_name']) && $val['initiator_info']['pen_name'] = $val['initiator_info']['user_name']; } if (!empty($val['handler_id'])) { $val['handler_info'] = !empty($task_admin_list[$val['handler_id']]) ? $task_admin_list[$val['handler_id']] : $task_admin_list[1]; $val['handler_info']['head_pic'] = get_head_pic($val['handler_info']['head_pic'], true); $val['handler_info']['pen_name'] = !empty($val['handler_info']['true_name']) ? $val['handler_info']['true_name'] : $val['handler_info']['pen_name']; empty($val['handler_info']['pen_name']) && $val['handler_info']['pen_name'] = $val['handler_info']['user_name']; } if (!empty($val['auditors_id'])) { $val['auditors_info'] = !empty($task_admin_list[$val['auditors_id']]) ? $task_admin_list[$val['auditors_id']] : $task_admin_list[1]; $val['auditors_info']['head_pic'] = get_head_pic($val['auditors_info']['head_pic'], true); $val['auditors_info']['pen_name'] = !empty($val['auditors_info']['true_name']) ? $val['auditors_info']['true_name'] : $val['auditors_info']['pen_name']; empty($val['auditors_info']['pen_name']) && $val['auditors_info']['pen_name'] = $val['auditors_info']['user_name']; } if (!empty($val['helper_id'])) { $val['helper_info'] = !empty($task_admin_list[$val['helper_id']]) ? $task_admin_list[$val['helper_id']] : $task_admin_list[1]; $val['helper_info']['head_pic'] = get_head_pic($val['helper_info']['head_pic'], true); $val['helper_info']['pen_name'] = !empty($val['helper_info']['true_name']) ? $val['helper_info']['true_name'] : $val['helper_info']['pen_name']; empty($val['helper_info']['pen_name']) && $val['helper_info']['pen_name'] = $val['helper_info']['user_name']; if (2 == $val['task_status']) { $val['handler_info'] = $val['helper_info']; } } $task_list[$key] = $val; } $html = ''; $week_time = mktime(0, 0 , 0,date("m"),date("d")-date("w")+1,date("Y")); foreach ($task_list as $key => $val) { if ($val['task_status'] == 3) { $new_time = $val['update_time']; } else if ($val['task_status'] == 4) { $new_time = $val['update_time']; } else if ($val['task_status'] == 5) { $new_time = $val['update_time']; } else { $new_time = $val['add_time']; } if ($new_time > $week_time) { $new_time = '本周'; } else { $new_time = MyDate('Y-m-d', $new_time); } $html .=<< {$val['status_name']} {$val['task_title']} {$val['level_name']} {$val['initiator_info']['pen_name']} {$val['handler_info']['pen_name']} {$val['auditors_info']['pen_name']} {$new_time} EOF; } $hasMorePage = $pager->nowPage >= $pager->totalPages ? 0 : 1; // 是否有下一页 $nextpage = $pager->nowPage + 1; if ($nextpage > $pager->totalPages) { $nextpage = $pager->totalPages; } $this->success('success', null, ['countRow'=>$countRow,'html'=>$html,'nextpage'=>$nextpage,'hasMorePage'=>$hasMorePage]); } $this->error('请求错误!'); } // 任务流配置 private function taskFlowData(){ $data = Db::name('weapp')->where('code', 'TaskFlow')->getField('data'); $data = json_decode($data, true); return $data; } //任务流任务状态 private function taskFlowStatus($value = 1, $type = 'text', $helper_id = 0){ if ('text' == $type) { $arr = [ '1' => '待处理', '2' => '处理中', '3' => '驳回处理', '4' => '验收中', '5' => '已完成', '6' => '暂停中', ]; $str = $arr[$value]; if (2 == $value && !empty($helper_id)) { $str = '协助中'; } } else if ('bg' == $type) { $arr = [ '1' => 'blue', '2' => 'orange', '3' => 'red', '4' => 'yellow', '5' => 'green', '6' => 'suspend', ]; $str = $arr[$value]; if (2 == $value && !empty($helper_id)) { $str = 'helper'; } } return $str; } //任务流任务等级 private function taskFlowLevel($value= 1, $type = 'text'){ if ('text' == $type) { $arr = [ '1' => '不重要', '2' => '严重', '3' => '主要', '4' => '次要', '5' => '不重要', ]; } else if ('bg' == $type) { $arr = [ '1' => 'green', '2' => 'red', '3' => 'blue', '4' => 'teal', '5' => 'green', ]; } return $arr[$value]; } }