初始化项目:添加后端代码、ThinkPHP框架、前端资源
This commit is contained in:
@@ -0,0 +1,260 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\controller\data;
|
||||
|
||||
use app\common\controller\Backend;
|
||||
/**
|
||||
* 订单数据
|
||||
*/
|
||||
class Order extends Backend
|
||||
{
|
||||
|
||||
/**
|
||||
* Course模型对象
|
||||
* @var \app\admin\model\order\Course
|
||||
*/
|
||||
protected $model = null;
|
||||
|
||||
public function _initialize()
|
||||
{
|
||||
parent::_initialize();
|
||||
$this->model = new \app\admin\model\order\Order;
|
||||
$this->trafficModel = new \app\admin\model\data\Traffic();
|
||||
$this->timeModel = new \app\admin\model\data\Time();
|
||||
}
|
||||
|
||||
|
||||
public function total()
|
||||
{
|
||||
$time = $this->request->post('time/a',0);
|
||||
$unit = $this->request->post('unit','');
|
||||
|
||||
$data = [
|
||||
'order_pay_user_count'=>0,
|
||||
'order_pay_price'=>0,
|
||||
'order_user_count'=>0,
|
||||
'order_price'=>0,
|
||||
'user_average_price'=>0,
|
||||
'visiter'=>0
|
||||
];
|
||||
|
||||
if(!$time){
|
||||
$this->success('获取成功', $data);
|
||||
}
|
||||
if(count($time) == 1){
|
||||
$time = $time[0];
|
||||
}
|
||||
|
||||
$time = $this->timeModel->getFilterStartEndTime($time,$unit);
|
||||
$orderData = $this->model
|
||||
->where(['createtime'=>['between',[$time['start'],$time['end']]]])
|
||||
->field([
|
||||
"sum(real_price) as real_price_sum",
|
||||
"count(user_id) as user_count"
|
||||
])
|
||||
->group("user_id")
|
||||
->find();
|
||||
|
||||
$data['order_user_count'] = $orderData['user_count'];
|
||||
$data['order_price'] = $orderData['real_price_sum'];
|
||||
|
||||
|
||||
$payOrderData = $this->model
|
||||
->where([
|
||||
'status'=>['in',\app\common\constant\order\Status::getSuccessOrderStatus()],
|
||||
'createtime'=>['between',[$time['start'],$time['end']]]
|
||||
])
|
||||
->field([
|
||||
"sum(real_price) as pay_real_price_sum",
|
||||
"count(user_id) as pay_user_count"
|
||||
])
|
||||
->group("user_id")
|
||||
->find();
|
||||
|
||||
$data['order_pay_user_count'] = $payOrderData['pay_user_count'];
|
||||
$data['order_pay_price'] = $payOrderData['pay_real_price_sum'];
|
||||
|
||||
if($payOrderData['pay_real_price_sum'] && $payOrderData['pay_user_count']){
|
||||
$data['user_average_price'] = number_format($payOrderData['pay_real_price_sum'] / $payOrderData['pay_user_count'],2);
|
||||
}
|
||||
|
||||
$data['visiter'] = $this->trafficModel->where([
|
||||
'createtime'=>['between',[$time['start'],$time['end']]]
|
||||
])->group('ip')->count();
|
||||
|
||||
$this->success('获取成功', $data);
|
||||
}
|
||||
|
||||
public function section(){
|
||||
$time = $this->request->post('time/a',0);
|
||||
$unit = $this->request->post('unit','');
|
||||
if(!$time){
|
||||
$this->success('获取成功', []);
|
||||
}
|
||||
if(count($time) == 1){
|
||||
$time = $time[0];
|
||||
}
|
||||
$time = $this->timeModel->getFilterStartEndTime($time,$unit);
|
||||
$result = $this->model
|
||||
->field([
|
||||
"CASE
|
||||
WHEN real_price BETWEEN 0 AND 50 THEN '0-50'
|
||||
WHEN real_price BETWEEN 51 AND 100 THEN '51-100'
|
||||
WHEN real_price BETWEEN 101 AND 200 THEN '101-200'
|
||||
WHEN real_price BETWEEN 201 AND 500 THEN '201-500'
|
||||
WHEN real_price BETWEEN 501 AND 1000 THEN '501-1000'
|
||||
WHEN real_price BETWEEN 1001 AND 1500 THEN '1001-1500'
|
||||
WHEN real_price > 1500 THEN '>1500'
|
||||
END AS price_range",
|
||||
"COUNT(*) AS order_count"
|
||||
])
|
||||
->where([
|
||||
'createtime'=>['between',[$time['start'],$time['end']]]
|
||||
])
|
||||
->where('status', 'in', \app\common\constant\order\Status::getSuccessOrderStatus())
|
||||
->group('price_range')
|
||||
->select();
|
||||
|
||||
$temp = [];
|
||||
foreach ($result as $item){
|
||||
$temp[$item['price_range']] = [
|
||||
'order_count'=>$item['order_count']
|
||||
];
|
||||
}
|
||||
|
||||
$ranges = ['0-50','51-100','101-200','201-500','501-1000','1001-1500'];
|
||||
|
||||
foreach ($ranges as $range){
|
||||
if(!isset($temp[$range])){
|
||||
$data[$range] = ['order_count'=>0];
|
||||
}else{
|
||||
$data[$range] = $temp[$range];
|
||||
}
|
||||
}
|
||||
|
||||
$this->success('获取成功', $data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 交易趋势统计
|
||||
* @return void
|
||||
*/
|
||||
public function trend(){
|
||||
$time = $this->request->post('time/a',0);
|
||||
if(!$time){
|
||||
$this->success('获取成功', []);
|
||||
}
|
||||
|
||||
if(count($time) == 1){
|
||||
$time = $time[0];
|
||||
}
|
||||
$unit = $this->request->post('unit',0);
|
||||
$this->timeModel = new \app\admin\model\data\Time();
|
||||
$emptyData = [
|
||||
'order_price'=>0,
|
||||
'order_user_count'=>0,
|
||||
'order_pay_price'=>0,
|
||||
'order_pay_user_count'=>0,
|
||||
'user_average_price'=>0
|
||||
];
|
||||
|
||||
$time = $this->timeModel->getFilterStartEndTime($time,$unit);
|
||||
|
||||
if($unit == 'date'){
|
||||
$interval = 3600;
|
||||
$timeFormat = 'H:i';
|
||||
$timeFormatSql = '%H';
|
||||
}else{
|
||||
$interval = 86400;
|
||||
$timeFormat = 'Y-m-d';
|
||||
$timeFormatSql = '%Y-%m-%d';
|
||||
}
|
||||
|
||||
$result = $this->model
|
||||
->where([
|
||||
'createtime'=>['between',[$time['start'],$time['end']]]
|
||||
])
|
||||
->field([
|
||||
"FROM_UNIXTIME(createtime, '{$timeFormatSql}') as date", // 转换创建时间为日期
|
||||
"SUM(CASE WHEN status IN ('".implode('\',\'',\app\common\constant\order\Status::getSuccessOrderStatus())."') THEN real_price ELSE 0 END) AS order_pay_price",
|
||||
"COUNT(DISTINCT CASE WHEN status IN ('".implode('\',\'',\app\common\constant\order\Status::getSuccessOrderStatus())."') THEN user_id ELSE NULL END) AS order_pay_user_count",
|
||||
'COUNT(DISTINCT user_id) AS order_user_count',
|
||||
'SUM(real_price) AS order_price'
|
||||
])
|
||||
->group("FROM_UNIXTIME(createtime, '{$timeFormatSql}')")
|
||||
->order("createtime", "desc")
|
||||
->select();
|
||||
|
||||
|
||||
if($result){
|
||||
foreach ($result as $item){
|
||||
$timeUnit = $item['date'];
|
||||
if($unit == 'date'){
|
||||
$timeUnit = $timeUnit.":00";
|
||||
}
|
||||
$list[$timeUnit] = $item;
|
||||
}
|
||||
}
|
||||
$data = [];
|
||||
for($i=$time['start'];$i<$time['end'];$i+=$interval){
|
||||
$timeUnit = date($timeFormat,$i);
|
||||
if(!isset($data[$timeUnit])){
|
||||
$data[$timeUnit] = $emptyData;
|
||||
}
|
||||
if(isset($list[$timeUnit])){
|
||||
$data[$timeUnit] = $list[$timeUnit];
|
||||
}
|
||||
|
||||
$data[$timeUnit]['user_average_price'] = 0;
|
||||
|
||||
if($data[$timeUnit]['order_pay_price'] && $data[$timeUnit]['order_pay_user_count']){
|
||||
$data[$timeUnit]['user_average_price'] = number_format($data[$timeUnit]['order_pay_price'] / $data[$timeUnit]['order_pay_user_count'],2);
|
||||
}
|
||||
}
|
||||
$this->success('获取成功', $data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取交易统计
|
||||
* @return void
|
||||
*/
|
||||
public function getUserTransactionStatistic(){
|
||||
$userId = $this->request->post("user_id", 0);
|
||||
$this->success("获取成功",$this->model->getTransactionStatistic($userId));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取订单统计数据
|
||||
* @return void
|
||||
*/
|
||||
public function getOrderData(){
|
||||
$data = [];
|
||||
|
||||
$startTime = strtotime(date("Y-m-d"));
|
||||
|
||||
//今日支付金额(元)
|
||||
$data[__('today_pay_price')] = $this->model->where([
|
||||
'createtime'=>['>',$startTime]
|
||||
])->sum('real_pay_price');
|
||||
|
||||
//累计支付金额(元)
|
||||
$data[__('total_pay_price')] = $this->model->sum('real_pay_price');
|
||||
|
||||
//今日有效订单数
|
||||
$data[__('today_order_num')] = $this->model->where([
|
||||
'real_pay_price'=>['>',0],
|
||||
'createtime'=>['>',$startTime]
|
||||
])->count();
|
||||
|
||||
//累计有效订单数
|
||||
$data[__('total_order_num')] = $this->model->where([
|
||||
'real_pay_price'=>['>',0]
|
||||
])->count();
|
||||
|
||||
|
||||
$this->success("获取成功",$data);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user