Skip to content

Commit

Permalink
后台首页统计优化、新增订单地域统计数据
Browse files Browse the repository at this point in the history
  • Loading branch information
gongfuxiang committed Sep 1, 2021
1 parent 4795de5 commit 87e7da2
Show file tree
Hide file tree
Showing 4 changed files with 199 additions and 45 deletions.
34 changes: 29 additions & 5 deletions app/admin/view/default/index/init.html
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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>
Expand All @@ -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>
Expand All @@ -232,7 +234,7 @@
</li>

<li>
<!-- 近30日支付方式 -->
<!-- 支付方式 -->
<div class="block-title echarts-title">
<span class="icon"></span>
<span class="title">支付方式</span>
Expand All @@ -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}}

<!-- 系统信息 -->
Expand Down
113 changes: 91 additions & 22 deletions app/service/StatisticalService.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -92,6 +100,14 @@ public static function Init($params = [])
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();
Expand Down Expand Up @@ -185,6 +201,16 @@ public static function DateTimeList($params = [])
'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),
Expand Down Expand Up @@ -653,6 +679,60 @@ public static function OrderTradingTotal($params = [])
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
Expand All @@ -663,9 +743,6 @@ public static function OrderTradingTotal($params = [])
*/
public static function PayTypeTotal($params = [])
{
// 初始化
self::Init($params);

// 获取支付方式名称
$where = [
['business_type', '<>', ''],
Expand Down Expand Up @@ -722,18 +799,19 @@ public static function PayTypeTotal($params = [])
}

/**
* 热销商品
* 订单地域分布
* @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']))
{
Expand All @@ -750,27 +828,13 @@ public static function GoodsHotTotal($params = [])
{
$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);
}
Expand Down Expand Up @@ -849,6 +913,11 @@ public static function StatsData($params = [])
$ret = self::PayTypeTotal($params);
break;

// 订单地域分布
case 'order-whole-country' :
$ret = self:: OrderWholeCountryTotal($params);
break;

default :
$ret = DataReturn('类型有误', -1);
}
Expand Down
23 changes: 5 additions & 18 deletions public/static/admin/default/css/index.init.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
74 changes: 74 additions & 0 deletions public/static/admin/default/js/index.init.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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+']')
}
Expand Down

0 comments on commit 87e7da2

Please sign in to comment.