提交 87e7da2c 编写于 作者: D Devil

后台首页统计优化、新增订单地域统计数据

上级 4795de5c
......@@ -64,7 +64,9 @@
{{if !empty($time_data)}}
<span class="quick-time">
{{foreach $time_data as $k=>$v}}
<a href="javascript:;" data-start="{{$v.start}}" data-end="{{$v.end}}">{{$v.name}}</a>
{{if !in_array($k, ['this-month', 'last-month'])}}
<a href="javascript:;" data-start="{{$v.start}}" data-end="{{$v.end}}">{{$v.name}}</a>
{{/if}}
{{/foreach}}
<a href="javascript:;" data-start="" data-end="">全部</a>
</span>
......@@ -190,7 +192,7 @@
<div id="echarts-order-profit"></div>
</div>
<!-- 近30日订单交易走势 -->
<!-- 订单交易走势 -->
<div class="block-container">
<div class="block-title echarts-title">
<span class="icon"></span>
......@@ -210,9 +212,9 @@
</div>
<!-- 组合 -->
<ul class="am-avg-sm-1 am-avg-sm-2 am-avg-lg-2 block-combination-container-2 {{if $is_system_show_base eq 0}}am-padding-bottom-sm{{/if}}">
<ul class="am-avg-sm-1 am-avg-sm-2 am-avg-lg-2 block-combination-container-2">
<li>
<!-- 近30日热销商品 -->
<!-- 热销商品 -->
<div class="block-title echarts-title">
<span class="icon"></span>
<span class="title">热销商品</span>
......@@ -232,7 +234,7 @@
</li>
<li>
<!-- 近30日支付方式 -->
<!-- 支付方式 -->
<div class="block-title echarts-title">
<span class="icon"></span>
<span class="title">支付方式</span>
......@@ -250,6 +252,28 @@
<div id="echarts-pay-type"></div>
</li>
</ul>
<!-- 订单地域分布 -->
<div class="am-nbfc {{if $is_system_show_base eq 0}}am-padding-bottom-sm{{/if}}">
<div class="block-container {{if $is_system_show_base eq 0}}am-margin-bottom-0{{/if}}">
<div class="block-title echarts-title">
<span class="icon"></span>
<span class="title">订单地域分布</span>
<div class="am-fr right-operate" data-type="order-whole-country" data-init="1" data-empty-time="1">
{{if !empty($time_data)}}
<span class="quick-time">
{{foreach $time_data as $k=>$v}}
<a href="javascript:;" data-start="{{$v.start}}" data-end="{{$v.end}}">{{$v.name}}</a>
{{/foreach}}
<a href="javascript:;" data-start="" data-end="">全部</a>
</span>
{{/if}}
{{include file="/index/stats_time" /}}
</div>
</div>
<div id="echarts-map-whole-country"></div>
</div>
</div>
{{/if}}
<!-- 系统信息 -->
......
......@@ -35,6 +35,14 @@ class StatisticalService
public static $today_time_start;
public static $today_time_end;
// 近365天
public static $year_time_start;
public static $year_time_end;
// 近180天
public static $half_year_time_start;
public static $half_year_time_end;
// 近30天
public static $thirty_time_start;
public static $thirty_time_end;
......@@ -92,6 +100,14 @@ class StatisticalService
self::$today_time_start = strtotime(date('Y-m-d 00:00:00'));
self::$today_time_end = time();
// 近365天日期
self::$year_time_start = strtotime(date('Y-m-d 00:00:00', strtotime('-365 day')));
self::$year_time_end = time();
// 近180天日期
self::$half_year_time_start = strtotime(date('Y-m-d 00:00:00', strtotime('-180 day')));
self::$half_year_time_end = time();
// 近30天日期
self::$thirty_time_start = strtotime(date('Y-m-d 00:00:00', strtotime('-29 day')));
self::$thirty_time_end = time();
......@@ -185,6 +201,16 @@ class StatisticalService
'start' => date('Y-m-d H:i:s', StatisticalService::$thirty_time_start),
'end' => date('Y-m-d H:i:s', StatisticalService::$thirty_time_end),
],
'180-day' => [
'name' => '近半年',
'start' => date('Y-m-d H:i:s', StatisticalService::$half_year_time_start),
'end' => date('Y-m-d H:i:s', StatisticalService::$half_year_time_end),
],
'365-day' => [
'name' => '近1年',
'start' => date('Y-m-d H:i:s', StatisticalService::$year_time_start),
'end' => date('Y-m-d H:i:s', StatisticalService::$year_time_end),
],
'this-month' => [
'name' => '当月',
'start' => date('Y-m-d H:i:s', StatisticalService::$this_month_time_start),
......@@ -653,6 +679,60 @@ class StatisticalService
return DataReturn('处理成功', 0, $result);
}
/**
* 热销商品
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-06T21:31:53+0800
* @param [array] $params [输入参数]
*/
public static function GoodsHotTotal($params = [])
{
// 获取订单id
$where = [
['status', '<=', 4],
];
if(!empty($params['start']))
{
$where[] = ['add_time', '>=', $params['start']];
}
if(!empty($params['end']))
{
$where[] = ['add_time', '<=', $params['end']];
}
$order_ids = Db::name('Order')->where($where)->column('id');
// 获取订单详情热销商品
if(empty($order_ids))
{
$data = [];
} else {
$data = Db::name('OrderDetail')->field('goods_id, sum(buy_number) AS value')->where('order_id', 'IN', $order_ids)->group('goods_id')->order('value desc')->limit(30)->select()->toArray();
}
if(!empty($data))
{
foreach($data as &$v)
{
// 获取商品名称(这里不一次性读取、为了兼容 mysql 5.7+版本)
$v['name'] = Db::name('OrderDetail')->where('goods_id', $v['goods_id'])->value('title');
if(mb_strlen($v['name'], 'utf-8') > 12)
{
$v['name'] = mb_substr($v['name'], 0, 12, 'utf-8').'...';
}
unset($v['goods_id']);
}
}
// 数据组装
$result = [
'name_arr' => array_column($data, 'name'),
'data' => $data,
];
return DataReturn('处理成功', 0, $result);
}
/**
* 支付方式
* @author Devil
......@@ -663,9 +743,6 @@ class StatisticalService
*/
public static function PayTypeTotal($params = [])
{
// 初始化
self::Init($params);
// 获取支付方式名称
$where = [
['business_type', '<>', ''],
......@@ -722,18 +799,19 @@ class StatisticalService
}
/**
* 热销商品
* 订单地域分布
* @author Devil
* @blog http://gong.gg/
* @version 0.0.1
* @datetime 2016-12-06T21:31:53+0800
* @param [array] $params [输入参数]
*/
public static function GoodsHotTotal($params = [])
{
public static function OrderWholeCountryTotal($params = [])
{
// 获取订单id
$where = [
['status', '<=', 4],
['order_model', 'in', [0,2]],
];
if(!empty($params['start']))
{
......@@ -750,27 +828,13 @@ class StatisticalService
{
$data = [];
} else {
$data = Db::name('OrderDetail')->field('goods_id, sum(buy_number) AS value')->where('order_id', 'IN', $order_ids)->group('goods_id')->order('value desc')->limit(30)->select()->toArray();
}
if(!empty($data))
{
foreach($data as &$v)
{
// 获取商品名称(这里不一次性读取、为了兼容 mysql 5.7+版本)
$v['name'] = Db::name('OrderDetail')->where('goods_id', $v['goods_id'])->value('title');
if(mb_strlen($v['name'], 'utf-8') > 12)
{
$v['name'] = mb_substr($v['name'], 0, 12, 'utf-8').'...';
}
unset($v['goods_id']);
}
$data = Db::name('OrderAddress')->field('province_name as name, count(*) AS value')->where('order_id', 'IN', $order_ids)->group('province_name')->order('value asc')->select()->toArray();
}
// 数据组装
$result = [
'name_arr' => array_column($data, 'name'),
'data' => $data,
'data' => array_column($data, 'value'),
];
return DataReturn('处理成功', 0, $result);
}
......@@ -849,6 +913,11 @@ class StatisticalService
$ret = self::PayTypeTotal($params);
break;
// 订单地域分布
case 'order-whole-country' :
$ret = self:: OrderWholeCountryTotal($params);
break;
default :
$ret = DataReturn('类型有误', -1);
}
......
......@@ -191,26 +191,13 @@ html, body {
}
/**
* 支付方式
*/
#echarts-pay-type {
margin-top: 10px;
height: 400px;
}
/**
* 热销商品
*/
#echarts-goods-hot {
margin-top: 10px;
height: 400px;
}
/**
* 订单交易
* 图表容器
*/
#echarts-order-profit,
#echarts-order-trading {
#echarts-order-trading,
#echarts-goods-hot,
#echarts-pay-type,
#echarts-map-whole-country {
margin-top: 10px;
height: 400px;
}
......
......@@ -327,6 +327,75 @@ function EchartsPayType(title_arr, name_arr, data)
return chart;
}
/**
* 订单地域分布
* @author Devil
* @blog http://gong.gg/
* @version 1.0.0
* @date 2021-08-30
* @desc description
* @param {[array]} name_arr [名称]
* @param {[array]} data [数据]
*/
function EchartsOrderMapWholeCountry(name_arr, data)
{
var chart = echarts.init(document.getElementById('echarts-map-whole-country'), 'macarons');
var option = {
title: {
text: '',
subtext: ''
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
legend: {
data: []
},
grid: {
top: '5%',
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: {
type: 'value',
boundaryGap: [0, 0.01]
},
yAxis: {
type: 'category',
data: name_arr
},
series: [
{
name: '',
type: 'bar',
data: data,
itemStyle: {
normal: {
// 定制颜色显示(按顺序)
// 超出定制颜色则返回随机
color: function(params) {
var colorList = ['#C33531','#EFE42A','#64BD3D','#EE9201','#29AAE3', '#B74AE5','#0AAF9F','#E89589','#16A085','#4A235A','#C39BD3 ','#F9E79F','#BA4A00','#ECF0F1','#616A6B','#EAF2F8','#4A235A','#3498DB', '#00BCD4', '#FF9800', '#E63A75', '#3F51B5'];
if(colorList[params.dataIndex] == undefined)
{
return "#"+Math.floor(Math.random()*(256*256*256-1)).toString(16);
} else {
return colorList[params.dataIndex];
}
}
}
}
}
]
};
chart.setOption(option);
return chart;
}
/**
* 图表更新
* @author Devil
......@@ -391,6 +460,11 @@ function EchartsInit(e)
var chart = EchartsPayType(res.data.title_arr, res.data.name_arr, res.data.data);
break;
// 订单地域分布
case 'order-whole-country' :
var chart = EchartsOrderMapWholeCountry(res.data.name_arr, res.data.data);
break;
default :
console.info('操作类型未定义['+type+']')
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册