kefu/application/service/controller/Chart.php

197 lines
6.6 KiB
PHP

<?php
/**
* 数据中心
* Date 2019.04.19
* @author chf
*/
namespace app\service\controller;
class Chart extends Base
{
/**
* 数据统计
* @return [type] [description]
*/
public function index()
{
$sldb = db('service_log');
$rldb = db('recharge_log');
$kf_id = session('l_user_id');
$now_date = date('Y-m-d');
// 初始化数据
$data['is_talking'] = 0;
$data['success_in'] = 0;
$data['reception_total'] = 0;
$data['order_num'] = 0;
$data['order_num_total'] = 0;
$data['money_total'] = 0;
$data['money_total_total'] = 0;
// 生成从 8点 到 22点的时间数组
$dateLine = array_map(function($vo){
if($vo < 10){
return '0' . $vo;
}else{
return $vo;
}
}, range(8, 22));
// 初始化数据
$line = [];
foreach($dateLine as $key=>$vo){
$v = is_string($vo) ? substr($vo, 1, 1) : $vo;
// 每个时间段的订单
$order_num = $rldb
->where('kf_id', $kf_id)
->where('date', '>=', strtotime($now_date.' '. $vo < 10 ? '0' . $v .':00:00' : $vo . ':00:00'))
->where('date', '<', strtotime($now_date.' '.$vo < 10 ? '0' . ($v + 1) .':00:00' : ($vo + 1) . ':00:00'))
->count();
// 每个时间段的金币
$money_total = $rldb
->where('kf_id', $kf_id)
->where('date', '>=', strtotime($now_date.' '. $vo < 10 ? '0' . $v .':00:00' : $vo . ':00:00'))
->where('date', '<', strtotime($now_date.' '.$vo < 10 ? '0' . ($v + 1) .':00:00' : ($vo + 1) . ':00:00'))
->sum('money');
$line[$vo]['is_talking'] = 0;
$line[$vo]['order_num'] = isset($line[$vo]['order_num']) ? $line[$vo]['order_num'] + $order_num : $order_num;
$line[$vo]['money_total'] = isset($line[$vo]['money_total']) ? $line[$vo]['money_total'] + $money_total : $money_total;
}
// 对时间线进行赋值
$where['kf_id'] = $kf_id;
$where['start_time'] = ['egt', strtotime($now_date)];
$dbData = $sldb->where($where)->select();
// 今日会话量
$data['success_in'] = count($dbData);
// 总计会话量
$data['reception_total'] = $sldb->where('kf_id', $kf_id)->count();
// 订单数量
$data['order_num'] = $rldb->where('kf_id', $kf_id)->where('date', '>=', strtotime($now_date))->count();
$data['order_num_total'] = $rldb->where('kf_id', $kf_id)->count();
// 充值金额
$data['money_total'] = $rldb->where('kf_id', $kf_id)->where('date', '>=', strtotime($now_date))->sum('money');
$data['money_total_total'] = $rldb->where('kf_id', $kf_id)->sum('money');
// var_dump($line);
foreach($dbData as $k=>$v){
// 结束时间
if ($v['end_time'] == 0) {
$data['is_talking'] += 1;
}
$date_list = getdate($v['start_time']);
$v['add_hour'] = $date_list['hours'];
$check_is_time_line = array_key_exists($v['add_hour'], $line);
if(!$check_is_time_line) continue;
$line[$v['add_hour']]['is_talking'] += 1;
}
$showData = [];
foreach($line as $key=>$vo){
$showData['is_talking'][] = $vo['is_talking'];
$showData['order_num'][] = $vo['order_num'];
$showData['money_total'][] = $vo['money_total'];
}
// dump($line);return;
$this->assign([
'data' => $data,
'show_data' => json_encode($showData)
]);
return $this->fetch('index');
}
/**
* 入账列表
*/
public function incomeList()
{
$mdb = db('money_log');
$kf_id = session('l_user_id');
// 返回视图
if(!request()->isAjax()) return $this->fetch('chart/incomeList');
// 分页请求
$param = input('get.');
// 查询条件
$where = ['passivity' => "k_{$kf_id}", 'type' => 1];
//获取总条数
$count = $mdb->count();
// $count=count($list);
//获取每页显示的条数
$limit = $param['limit'];
//获取当前页数
$page = $param['page'];
//计算出从那条开始查询
$start = ($page-1)*$limit;
$list = $mdb
->where($where)
->limit($start, $limit)
->order('date desc')
->select();
// 对列表进行处理
foreach ($list as &$vo) {
// 在线状态
$vo['date'] = date('Y-m-d', strtotime($vo['date']));
$vo['type_name'] = $vo['type'] == 1 ? '入账+' : '出账-';
}
$result = resultJson(0, '获取成功', $list);
$result['count'] = $count;
return $result;
}
/**
* 出账列表
*/
public function expenditureList()
{
$mdb = db('recharge_log');
$ptdb = db('payment_type');
$kf_id = session('l_user_id');
// 返回视图
if(!request()->isAjax()) return $this->fetch('chart/expenditureList');
// 分页请求
$param = input('get.');
// 查询条件
$where = ['kf_id' => $kf_id, 'status' => 1];
//获取总条数
$count = $mdb->count();
// $count=count($list);
//获取每页显示的条数
$limit = $param['limit'];
//获取当前页数
$page = $param['page'];
//计算出从那条开始查询
$start = ($page-1)*$limit;
$list = $mdb
->where($where)
->limit($start, $limit)
->order('date desc')
->select();
// 支付类型
$pay_type = $ptdb->where('status', 1)->select();
$pay_type_arr = [];
foreach ($pay_type as $vo) {
$pay_type_arr[$vo['id']] = $vo['type_name'];
}
// 对列表进行处理
foreach ($list as &$vo) {
// 在线状态
$vo['date'] = date('Y-m-d', $vo['date']);
$vo['type_name'] = '出账-';
$uinfo = json_decode($vo['u_data'], true);
$vo['user_info'] = "用户名: {$uinfo['user_name']}, 用户id: {$vo['u_id']}";
$vo['pay_type_name'] = isset($pay_type_arr[$vo['pay_type']]) ? $pay_type_arr[$vo['pay_type']] : '暂无';
}
$result = resultJson(0, '获取成功', $list);
$result['count'] = $count;
return $result;
}
}