System.php 18.4 KB
<?php
namespace app\admin\controller;
use think\Db;
use think\facade\Request;
class System extends Common
{
    /********************************站点管理*******************************/
    //站点设置
    public function system($sys_id=1){
        $table = db('system');
        if(Request::isAjax()) {
            $data = Request::except('file');
            if($table->where('id',1)->update($data)!==false) {
                savecache('System');
                return json(['code' => 1, 'msg' => '站点设置保存成功!', 'url' => url('system/system')]);
            } else {
                return json(array('code' => 0, 'msg' =>'站点设置保存失败!'));
            }
        }else{
            $system = $table->find($sys_id);
            $this->assign('system', json_encode($system,true));
            return $this->fetch();
        }
    }
    public function email(){
        if(Request::isAjax()) {
            $datas = input('post.');
            foreach ($datas as $k=>$v){
               Db::name('config')->where([['name','=',$k],['inc_type','=','smtp']])->update(['value'=>$v]);
            }
            return json(['code' => 1, 'msg' => '邮箱设置成功!', 'url' => url('system/email')]);
        }else{
            $smtp = Db::name('config')->where('inc_type','smtp')->select();
            $info = convert_arr_kv($smtp,'name','value');
            $this->assign('info', json_encode($info,true));
            return $this->fetch();
        }
    }
    public function trySend(){
        $sender = input('email');
        //检查是否邮箱格式
        if (!is_email($sender)) {
            return json(['code' => 0, 'msg' => '测试邮箱码格式有误']);
        }
        $arr = db('config')->where('inc_type','smtp')->select();
        $config = convert_arr_kv($arr,'name','value');
        $content = $config['test_eamil_info'];
        $send = send_email($sender, '测试邮件',$content);
        if ($send) {
            return json(['code' => 1, 'msg' => '邮件发送成功!']);
        } else {
            return json(['code' => 0, 'msg' => '邮件发送失败!']);
        }
    }

    /**
     * 获取日志列表
     */
    public function log(){
        $identity = Db::query("SELECT identity FROM `xt-member-two-LINE`.xt_dc_dz_log_action GROUP BY identity");
        if(Request::isAjax()){
            $data = Request::except('file');
            $key      = input('post.key') ? input('post.key') : "";

            $key      = $data['key'] ?  " a.`name` LIKE '%".$data['key']."%'"    : '1=1';

            $nickname = $data['nickname'] ? " AND a.nickname LIKE '%".$data['nickname']."%'" : '';

            $data_time= $data['time'] ? explode(' - ', $data['time']) : array(date("Y-m-d 00:00:00"),date("Y-m-d H:i:s"));
            $time     = $data_time ? "AND a.cdate BETWEEN '".$data_time[0]."' AND '".$data_time[1]."'" : '';

            $iden     = ($data['iden'] && $data['iden']!=-1) ? " AND a.identity = ".$data['iden'] : "";

            $channel  = ($data['channel'] && $data['channel']!=-1)  ? " AND rel.type_id = ".$data['channel'] : "";

            $log_info = Db::query("SELECT
                                        a.*,
                                        h.field,
                                        h.old,
                                        h.new,
                                        h.differ,
                                        rel.type_id
                                    FROM
                                        `xt-member-two-LINE`.xt_dc_dz_log_action AS a
                                        LEFT JOIN `xt-member-two-LINE`.xt_dc_dz_log_history AS h ON a.id = h.aid
                                        LEFT JOIN `xt-member-two-LINE`.xt_dc_dz_seller_type_rel AS rel ON a.sid = rel.sid 
                                    WHERE
                                        $key
                                        $nickname
                                        $iden 
                                        $channel
                                        $time
                                    order by
                                        a.cdate desc
                                    LIMIT ".$data['page'].",".$data['limit']."");
            $total  = Db::query("SELECT
                                        count(1) as total
                                    FROM
                                        `xt-member-two-LINE`.xt_dc_dz_log_action AS a
                                        LEFT JOIN `xt-member-two-LINE`.xt_dc_dz_log_history AS h ON a.id = h.aid
                                        LEFT JOIN `xt-member-two-LINE`.xt_dc_dz_seller_type_rel AS rel ON a.sid = rel.sid 
                                    WHERE
                                        $key
                                        $nickname
                                        $iden 
                                        $channel
                                        $time");
            foreach ($log_info as $key => $value) {
                switch ($value['device']) {
                    case '1':
                        $log_info[$key]['device'] = '小程序(C端)';
                        break;
                    case '2':
                        $log_info[$key]['device'] = '小程序(B端)';
                        break;
                    case '3':
                        $log_info[$key]['device'] = '铱方';
                        break;
                    case '4':
                        $log_info[$key]['device'] = '极钛';
                        break;
                    case '5':
                        $log_info[$key]['device'] = '酷比';
                        break;
                    case '6':
                        $log_info[$key]['device'] = '华为';
                        break;
                    default:
                        # code...
                        break;
                }
                switch ($value['field']) {
                    case 'status':
                        $log_info[$key]['old'] = lang('log')[$value['old']];
                        $log_info[$key]['new'] = lang('log')[$value['new']];
                        break;
                    case 'ddate':
                        $log_info[$key]['old'] = date("Y-m-d H:i:s",$value['old']);
                        $log_info[$key]['new'] = date("Y-m-d H:i:s",$value['new']);
                        break;
                    case 'action':
                        $log_info[$key]['old'] = $value['old']==0 ? '未发短信' : ($value['old']==1 ? '已发短信' : '已回访');
                        $log_info[$key]['new'] = $value['new']==0 ? '未发短信' : ($value['new']==1 ? '已发短信' : '已回访');
                        break;
                    default:
                        # code...
                        break;
                }
                //跳转页面逻辑判断
                //规则:
                //1、如果field字段存在 则直接显示变更前,变更后
                //2、如果预定ID为0
                $haystack = array('Android.Reserve.SetReserveInfo','App.Customer.SetReserveInfo');
                if(array_key_exists($value['field'],lang('log'))){
                    $log_info[$key]['field'] = lang('log')[$value['field']];
                }elseif($value['rid']==0){
                    $log_info[$key]['field'] = lang('log')['seller'];
                }elseif(in_array($value['action'], $haystack)){
                    if($value['comment']){
                        $log_info[$key]['field'] = lang('log')['add_rid'];
                        $log_info[$key]['old']   = '<a href=/admin/system/detail?id='.$value["id"].'&tag=1 target="_blank" style="color:blue;">查看详情</a>';
                        $log_info[$key]['new']   = '<a href=/admin/system/detail?id='.$value["id"].'&tag=1 target="_blank"style="color:blue;">查看详情</a>'; 
                    }else{
                        $log_info[$key]['field'] = lang('log')['edi_rid'];
                        $log_info[$key]['old']   = '<a href=/admin/system/differ?id='.$value["id"].' target="_blank"style="color:blue;">查看详情</a>';
                        $log_info[$key]['new']   = '<a href=/admin/system/differ?id='.$value["id"].' target="_blank"style="color:blue;">查看详情</a>';
                    }
                }else{
                    $log_info[$key]['field'] = lang('log')['edi_rid'];
                    $log_info[$key]['old']   = '<a href=/admin/system/differ?id='.$value["id"].' target="_blank"style="color:blue;">查看详情</a>';
                    $log_info[$key]['new']   = '<a href=/admin/system/differ?id='.$value["id"].' target="_blank"style="color:blue;">查看详情</a>';
                }
            }
            return ['code'=>0,'msg'=>'获取成功!','data'=>$log_info,'count'=>$total[0]['total'],'rel'=>1];
        }

        $idn = array();
        foreach (array_column($identity, 'identity') as $key => $value) {
            switch ($value) {
                case '0':
                    $idn[$value] = '顾客';
                    break;
                case '1':
                    $idn[$value] = '运营';
                    break;
                case '2':
                    $idn[$value] = '代理商';
                    break;
                case '3':
                    $idn[$value] = '商家人员';
                    break;
                default:
                    # code...
                    break;
            }
        }
        $tmp = array();
        while (list($key, $val) = each($idn)) {
            $tmp[] = array('key'=>$key,'val'=>$val);
        }
        $this->assign('identity', $tmp);
        return $this->fetch();
    }

    public function differ(){
        $data = Request::except('file');
        if($data['id']){
            $log_info = Db::query("SELECT
                                        a.*,
                                        h.field,
                                        h.old,
                                        h.new,
                                        h.differ,
                                        rel.type_id
                                    FROM
                                        `xt-member-two-LINE`.xt_dc_dz_log_action AS a
                                        LEFT JOIN `xt-member-two-LINE`.xt_dc_dz_log_history AS h ON a.id = h.aid
                                        LEFT JOIN `xt-member-two-LINE`.xt_dc_dz_seller_type_rel AS rel ON a.sid = rel.sid 
                                    WHERE
                                        a.id = ".$data['id']);
            $log_info = $log_info[0];
            if($log_info['comment']){
                $log_info['comment'] = json_decode($log_info['comment'],true);
                if($log_info['comment']['room_demand']){
                    $log_info['comment']['room_demand'] = json_decode($log_info['comment']['room_demand'],true);
                }
            }
            if($log_info['old']){
                $log_info['old'] = json_decode($log_info['old'],true);
                if($log_info['old']['tableinfo']){
                    $log_info['old']['tableinfo'] = json_decode($log_info['old']['tableinfo'],true);
                }
            }
            if($log_info['new']){
                $log_info['new'] = json_decode($log_info['new'],true);
                if($log_info['new']['tableinfo']){
                    $log_info['new']['tableinfo'] = json_decode($log_info['new']['tableinfo'],true);
                }
            }
            $old = json_encode($log_info['old'],JSON_UNESCAPED_UNICODE);
            $new = json_encode($log_info['new'],JSON_UNESCAPED_UNICODE);
        }
        $this->assign('html', $log_info);
        $this->assign('new', $new);
        $this->assign('old', $old);
        return $this->fetch();
    }

    public function detail(){
        $data = Request::except('file');
        if($data['id']){
            $log_info = Db::query("SELECT
                                        a.*,
                                        h.field,
                                        h.old,
                                        h.new,
                                        h.differ,
                                        rel.type_id
                                    FROM
                                        `xt-member-two-LINE`.xt_dc_dz_log_action AS a
                                        LEFT JOIN `xt-member-two-LINE`.xt_dc_dz_log_history AS h ON a.id = h.aid
                                        LEFT JOIN `xt-member-two-LINE`.xt_dc_dz_seller_type_rel AS rel ON a.sid = rel.sid 
                                    WHERE
                                        a.id = ".$data['id']);
            $log_info = $log_info[0];
            if($log_info['comment']){
                $log_info['comment'] = json_decode($log_info['comment'],true);
                if($log_info['comment']['row']['tableinfo']){
                    $log_info['comment']['row']['tableinfo'] = json_decode($log_info['comment']['row']['tableinfo'],true);
                }
            }
            switch ($log_info['device']) {
                case '1':
                    $log_info['device'] = '小程序(C端)';
                    break;
                case '2':
                    $log_info['device'] = '小程序(B端)';
                    break;
                case '3':
                    $log_info['device'] = '铱方';
                    break;
                case '4':
                    $log_info['device'] = '极钛';
                    break;
                case '5':
                    $log_info['device'] = '酷比';
                    break;
                case '6':
                    $log_info['device'] = '华为';
                    break;
                default:
                    # code...
                    break;
            }
            if(array_key_exists($log_info['action'],lang('log'))){
                if($data['tag']==1){
                    $log_info['action'] = lang('log')[$log_info['action']][0];
                }else{
                    $log_info['action'] = lang('log')[$log_info['action']][1];
                }
            }
            $log_info['rname'] = $log_info['comment']['row']['rname'] ? $log_info['comment']['row']['rname'] : '';
            $log_info['sex'] = $log_info['comment']['row']['sex']==1 ? '先生' : ($log_info['comment']['row']['sex']==2 ? '女士' : '公司');
            $log_info['phone'] = $log_info['comment']['row']['phone'] ? $log_info['comment']['row']['phone'] : '';
            $log_info['cusman'] = $log_info['comment']['row']['cusman'] ? $log_info['comment']['row']['cusman'] : '';
            $log_info['ddate'] = $log_info['comment']['row']['ddate'] ? date("Y-m-d H:i:s",$log_info['comment']['row']['ddate']) : '';
            $log_info['cdate'] = $log_info['comment']['row']['cdate'] ? date("Y-m-d H:i:s",$log_info['comment']['row']['cdate']) : '';
            $log_info['status'] = lang('log')[$log_info['comment']['row']['status']];
            $log_info['ddate_solt'] = $log_info['comment']['row']['ddate_solt'] ? $log_info['comment']['row']['ddate_solt'] : '';
            $log_info['is_set_ddate'] = $log_info['comment']['row']['is_set_ddate'] ==1 ? '是' : '否';

        }
        $this->assign('html', $log_info);
        return $this->fetch();
    }

    //阿里云日志log
    public function aliyunlog(){
        //基础参数
        /* 使用autoloader类自动加载所有需要的PHP模块。注意使用合适的路径指向autoloader类所在文件*/
        $DOCUMENT_ROOT = str_replace('public','',$_SERVER['DOCUMENT_ROOT']);
        require_once $DOCUMENT_ROOT.'vendor/aliyunlog/Log_Autoload.php';
        //require_once realpath(dirname(__FILE__) . '/../Log_Autoload.php');
        $endpoint = 'cn-beijing.log.aliyuncs.com';      // 选择与上面步骤创建project所属区域匹配的Endpoint
        $accessKeyId = 'LTAI4Fivq9UqCkAnCgDKqMBC';              // 使用你的阿里云访问密钥AccessKeyId
        $accessKey = 'AdmOpP2LzbbbY6N9BaGnIE3UBzI62E';  // 使用你的阿里云访问密钥AccessKeySecret
        $project = '101-dc-api-log';                        // 上面步骤创建的项目名称
        $logstore = 'info-log';                       // 上面步骤创建的日志库名称
        $client = new \Aliyun_Log_Client($endpoint, $accessKeyId, $accessKey);

        if(Request::isAjax()) {
            $data = Request::except('file');
            #查询日志数据
            $topic          =   "";
            $total_query_str=   '* | select count(1) as count';
            $key_query_str  =   '';
            $from           =   time()-2592000;
            $to             =   time();
            $total          =   NULL;
            $key_query      =   NULL;
            while (is_null($total) || (! $total->isCompleted()))
            {
                $total      = new \Aliyun_Log_Models_GetLogsRequest($project, $logstore, $from, $to, $topic, $total_query_str, 0, 0, true);
                $total      = $client->getLogs($total);
                
            }

            while (is_null($key_query) || (! $key_query->isCompleted()))
            {
                $key_query  = new \Aliyun_Log_Models_GetLogsRequest($project, $logstore, $from, $to, $topic, $key_query_str, $data['limit'], $data['page'], true);
                $key_query  = $client->getLogs($key_query);
            }
            $result = array();
            $count  = 0;
            try {
                foreach($total -> getLogs() as $log)
                {
                    foreach($log -> getContents() as $key => $value){
                        $count = $value;  //总数
                    }
                }
                foreach($key_query -> getLogs() as $k=>$v)
                {
                    foreach($v -> getContents() as $key => $value){
                        $result['list'][$k][$key] = $value;
                    }
                }
            } catch (Aliyun_Log_Exception $ex) {
                logVarDump($ex);
            } catch (Exception $ex) {
                logVarDump($ex);
            }
            return ['code'=>0,'msg'=>'获取成功!','data'=>$result['list'],'count'=>$count,'rel'=>1];
        }
        return $this->fetch();
    }

    //PHP stdClass Object转array  
    
    public function objectToArray($e){
        $e=(array)$e;
        foreach($e as $k=>$v){
            if( gettype($v)=='resource' ) return;
            if( gettype($v)=='object' || gettype($v)=='array' )
                $e[$k]=(array)self::objectToArray($v);
        }
        return $e;
    }

}