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
-
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;
}
}