admin_info = $this->systemLogin(); if ($this->admin_info['id'] != 1){ // 验证权限 $this->checkPermission(); } //转码 防止GBK下用ajax调用时传汉字数据出现乱码 if (($_GET['branch']!='' || $_GET['op']=='ajax') && strtoupper(CHARSET) == 'GBK'){ $_GET = Language::getGBK($_GET); } } /** * 取得当前管理员信息 * * @param * @return 数组类型的返回结果 */ protected final function getAdminInfo(){ return $this->admin_info; } /** * 系统后台登录验证 * * @param * @return array 数组类型的返回结果 */ protected final function systemLogin(){ //取得cookie内容,解密,和系统匹配 $user = unserialize(decrypt(cookie('sys_key'),MD5_KEY)); if (!key_exists('gid',(array)$user) || !isset($user['sp']) || (empty($user['name']) || empty($user['id']))){ @header('Location: index.php?act=login&op=login');exit; }else { $this->systemSetKey($user); } return $user; } /** * 系统后台 会员登录后 将会员验证内容写入对应cookie中 * * @param string $name 用户名 * @param int $id 用户ID * @return bool 布尔类型的返回结果 */ protected final function systemSetKey($user){ setNcCookie('sys_key',encrypt(serialize($user),MD5_KEY),3600,'',null); } /** * 验证当前管理员权限是否可以进行操作 * * @param string $link_nav * @return */ protected final function checkPermission($link_nav = null){ if ($this->admin_info['sp'] == 1) return true; $act = $_GET['act']?$_GET['act']:$_POST['act']; $op = $_GET['op']?$_GET['op']:$_POST['op']; if (empty($this->permission)){ $gadmin = Model('gadmin')->getby_gid($this->admin_info['gid']); $permission = decrypt($gadmin['limits'],MD5_KEY.md5($gadmin['gname'])); $this->permission = $permission = explode('|',$permission); }else{ $permission = $this->permission; } //显示隐藏小导航,成功与否都直接返回 if (is_array($link_nav)){ if (!in_array("{$link_nav['act']}.{$link_nav['op']}",$permission) && !in_array($link_nav['act'],$permission)){ return false; }else{ return true; } } //以下几项不需要验证 $tmp = array('index','dashboard','login','common','cms_base'); if (in_array($act,$tmp)) return true; if (in_array($act,$permission) || in_array("$act.$op",$permission)){ return true; }else{ $extlimit = array('ajax','export_step1'); if (in_array($op,$extlimit) && (in_array($act,$permission) || strpos(serialize($permission),'"'.$act.'.'))){ return true; } //带前缀的都通过 foreach ($permission as $v) { if (!empty($v) && strpos("$act.$op",$v.'_') !== false) { return true;break; } } } showMessage(Language::get('nc_assign_right'),'','html','succ',0); } /** * 取得后台菜单 * * @param string $permission * @return */ protected final function getNav($permission = '',&$top_nav,&$left_nav,&$map_nav){ $act = $_GET['act']?$_GET['act']:$_POST['act']; $op = $_GET['op']?$_GET['op']:$_POST['op']; if ($this->admin_info['sp'] != 1 && empty($this->permission)){ $gadmin = Model('gadmin')->getby_gid($this->admin_info['gid']); $permission = decrypt($gadmin['limits'],MD5_KEY.md5($gadmin['gname'])); $this->permission = $permission = explode('|',$permission); } Language::read('common'); $lang = Language::getLangContent(); $array = require(BASE_PATH.'/include/menu.php'); $array = $this->parseMenu($array); //管理地图 $map_nav = $array['left']; unset($map_nav[0]); $model_nav = "
  • _text_
  • \n"; $top_nav = ''; //顶部菜单 foreach ($array['top'] as $k=>$v) { $v['nav'] = $v['args']; $top_nav .= str_ireplace(array('_args_','_text_','_nav_'),$v,$model_nav); } $top_nav = str_ireplace("\n
    1. list_body
  • \n"; $left_nav = ''; foreach ($array['left'] as $k=>$v) { $left_nav .= str_ireplace(array('_nav_'),array($v['nav']),$model_nav); $model_list = "
  • _text_
  • "; $tmp_list = ''; $current_parent = '';//当前父级key foreach ($v['list'] as $key=>$value) { $model_list_parent = ''; $args = explode(',',$value['args']); if (!empty($value['parent'])){ if (empty($current_parent) || $current_parent != $value['parent']){ $model_list_parent = "
  • {$value['parenttext']}
  • "; } $current_parent = $value['parent']; } $value['op'] = $args[0]; $value['act'] = $args[1]; //$tmp_list .= str_ireplace(array('_args_','_text_','_op_'),$value,$model_list); $tmp_list .= str_ireplace(['_args_','_text_','_opact_','_pkey_'], [$value['args'],$value['text'],$value['op'],$value['act'],$value['parent']], $model_list_parent.$model_list); } $left_nav = str_replace('list_body',$tmp_list,$left_nav); } } /** * 过滤掉无权查看的菜单 * * @param array $menu * @return array */ private final function parseMenu($menu = array()){ if ($this->admin_info['sp'] == 1) return $menu; foreach ($menu['left'] as $k=>$v) { foreach ($v['list'] as $xk=>$xv) { $tmp = explode(',',$xv['args']); //以下几项不需要验证 $except = array('index','dashboard','login','common'); if (in_array($tmp[1],$except)) continue; if (!in_array($tmp[1],$this->permission) && !in_array($tmp[1].'.'.$tmp[0],$this->permission)){ unset($menu['left'][$k]['list'][$xk]); } } if (empty($menu['left'][$k]['list'])) { unset($menu['top'][$k]);unset($menu['left'][$k]); } } return $menu; } /** * 取得顶部小导航 * * @param array $links * @param 当前页 $actived */ protected final function sublink($links = array(), $actived = '', $file='index.php'){ $linkstr = ''; foreach ($links as $k=>$v) { parse_str($v['url'],$array); if (!$this->checkPermission($array)) continue; $href = ($array['op'] == $actived ? null : "href=\"{$file}?{$v['url']}\""); $class = ($array['op'] == $actived ? "class=\"current\"" : null); $lang = L($v['lang']); $linkstr .= sprintf('
  • %s
  • ',$href,$class,$lang); } return ""; } /** * 记录系统日志 * * @param $lang 日志语言包 * @param $state 1成功0失败null不出现成功失败提示 * @param $admin_name * @param $admin_id */ protected final function log($lang = '', $state = 1, $admin_name = '', $admin_id = 0){ if (!C('sys_log') || !is_string($lang)) return; if ($admin_name == ''){ $admin = unserialize(decrypt(cookie('sys_key'),MD5_KEY)); $admin_name = $admin['name']; $admin_id = $admin['id']; } $data = array(); if (is_null($state)){ $state = null; }else{ // $state = $state ? L('nc_succ') : L('nc_fail'); $state = $state ? '' : L('nc_fail'); } $data['content'] = $lang.$state; $data['admin_name'] = $admin_name; $data['createtime'] = time(); $data['admin_id'] = $admin_id; $data['ip'] = getIp(); $data['url'] = $_REQUEST['act'].'&'.$_REQUEST['op']; return Model('admin_log')->insert($data); } /** * 添加到任务队列 * * @param array $goods_array * @param boolean $ifdel 是否删除以原记录 */ protected function addcron($data = array(), $ifdel = false) { $model_cron = Model('cron'); if (isset($data[0])) { // 批量插入 $where = array(); foreach ($data as $k => $v) { if (isset($v['content'])) { $data[$k]['content'] = serialize($v['content']); } // 删除原纪录条件 if ($ifdel) { $where[] = '(type = ' . $data['type'] . ' and exeid = ' . $data['exeid'] . ')'; } } // 删除原纪录 if ($ifdel) { $model_cron->delCron(implode(',', $where)); } $model_cron->addCronAll($data); } else { // 单条插入 if (isset($data['content'])) { $data['content'] = serialize($data['content']); } // 删除原纪录 if ($ifdel) { $model_cron->delCron(array('type' => $data['type'], 'exeid' => $data['exeid'])); } $model_cron->addCron($data); } } protected function scard_type(int $card_type) { if ($card_type == 1) { //中石油 return '中石油'; } elseif ($card_type == 2) { //中石化 return '中石化'; } elseif ($card_type == 4) { //中国移动 return '中国移动'; } elseif ($card_type == 5) { //中国联通 return '中国联通'; } elseif ($card_type == 6) { //中国电信 return '中国电信'; } elseif ($card_type == 7) { //中国电信 return '增值业务'; } else { return 'unknown'; } } protected function quality_format($quality,$card_type) { $oil_text = [ refill\Quality::Normal => '无流水', refill\Quality::Quick => '快充', refill\Quality::CardKey => '卡密', refill\Quality::SlowTwentyFour => '有流水' ]; $phone_text = [ refill\Quality::Normal => '普充', refill\Quality::Quick => '快充', refill\Quality::CardKey => '卡密', refill\Quality::ThirdShop => '三方', refill\Quality::SlowTwentyFour => '慢24', refill\Quality::SlowSix => '慢6', refill\Quality::SlowTwo => '慢2', refill\Quality::SlowFortyEight => '慢48', refill\Quality::SlowSeventyTwo => '慢72', refill\Quality::Fastest => '速充', ]; $text = [ mtopcard\PetroChinaCard => $oil_text, mtopcard\SinopecCard => $oil_text, mtopcard\ChinaMobileCard => $phone_text, mtopcard\ChinaUnicomCard => $phone_text, mtopcard\ChinaTelecomCard => $phone_text ]; return $text[$card_type][$quality] ?? $quality; } protected function elapse_time($seconds) { $minutes = intval($seconds / 60); $second = intval($seconds % 60); if ($minutes >= 60) { $minute = $minutes % 60; $hours = intval($minutes / 60); $result = "{$minute}m{$second}s"; } elseif ($minutes > 0) { $result = "{$minutes}m{$second}s"; } else { $result = "{$second}s"; } if (isset($hours)) { $result = "{$hours}h{$minute}m"; } return $result; } protected function check_fetch_order($order_ids): array { $mod = Model('fetch_order'); $cond['order_id'] = ['in', $order_ids]; $res = $mod->getFetchOrderList($cond); return array_column($res, 'order_id'); } protected function merchants($condition = []) { $items = Model('')->table('merchant')->where($condition)->limit(1000)->order('company_name asc')->select(); foreach ($items as &$item) { $item['pinyin'] = Pinyin::getPinyin(strtolower($item['company_name'])); $item['alpha'] = substr($item['pinyin'],0,1); } $asc = function ($l,$r) { $lp = $l['pinyin']; $rp = $r['pinyin']; if(empty($lp) && empty($rp)) { $lo = $l['name']; $ro = $r['name']; return strcmp($lo,$ro); } else { return strcmp($lp,$rp); } }; usort($items,$asc); return $items; } protected function providers($condition = []) { $items = Model('')->table('refill_provider,store') ->field('refill_provider.*,store.store_name') ->join('inner') ->on('store.store_id=refill_provider.store_id') ->where($condition) ->order('opened asc, name asc') ->limit(1000) ->select(); foreach ($items as &$item) { $item['pinyin'] = Pinyin::getPinyin($item['store_name']); } $asc = function ($l,$r) { $lo = $l['opened']; $ro = $r['opened']; $lp = $l['pinyin']; $rp = $r['pinyin']; if($lo != $ro) { return $lo < $ro ? -1 : 1; } else { return strcmp($lp,$rp); } }; usort($items,$asc); return $items; } protected function credit_save_money($money, $operatetype, $member_id, $bz = '') { $obj_member = Model('member'); $member_id = intval($member_id); $member_info = $obj_member->getMemberInfo(['member_id' => $member_id], '*', true); $admininfo = $this->getAdminInfo(); $bz = $bz == '' ? '管理员更改客户授信' : $bz; switch ($operatetype) { case 'add': $admin_act = "sys_add_money"; $log_msg = "管理员【{$admininfo['name']}】操作会员{$member_id}余额:【{$member_info['member_name']}】,预存款【增加】,金额为{$money}。备注:{$bz}。"; break; case 'del': $admin_act = "sys_del_money"; $log_msg = "管理员【{$admininfo['name']}】操作会员{$member_id}余额:【{$member_info['member_name']}】,预存款【减少】,金额为{$money}。备注:{$bz}。"; break; default: return [false, '调节类型错误']; } $model_pd = Model('predeposit'); //调节预存款 $data = []; $data['member_id'] = $member_info['member_id']; $data['member_name'] = $member_info['member_name']; $data['amount'] = $money; $data['order_sn'] = ''; $data['admin_name'] = $admininfo['name']; $data['pdr_sn'] = ''; $data['lg_desc'] = $bz; $isRefill = $model_pd->isRefill($data['member_id']); $model_pd->changePd($admin_act, $data,$isRefill); $this->log($log_msg, 1); return [true, 'success']; } protected function OrderDataFormat($order_list,$merchant_list) { foreach ($merchant_list as $value) { $merchants[$value['mchid']] = $value; } foreach ($order_list as $order_id => $order) { $order_list[$order_id]['card_type_text'] = $this->scard_type($order['card_type']); $order_list[$order_id]['mch_name'] = $merchants[$order['mchid']]['company_name']; if ($order['notify_time'] > 0) { $diff_time = $order['notify_time'] - $order['order_time']; } else { $diff_time = time() - $order['order_time']; } $order_list[$order_id]['diff_time_text'] = $this->elapse_time($diff_time); $order_list[$order_id]['diff_time'] = $diff_time; $order_list[$order_id]['quality_text'] = $this->quality_format($order['quality'],$order['card_type']); $order_list[$order_id]['org_quality_text'] = $this->quality_format($order['org_quality'],$order['card_type']); } return $order_list; } }