本文实例讲述了yii框架结合charjs实现统计30天数据的方法。分享给大家供大家参考,具体如下:
理论上30天数据应该都有,但实际上却不一定是,所以需要补全
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
public static function getDayOrderCharData( $days = 30) {
$nowDay = date ( 'Y-m-d' , strtotime ( '-1day' )); // 当前前一天
$lastDay = date ( "Y-m-d" , strtotime ( '-' . $days . 'day' )); // days天前
$daysFormat = [];
// 获取到days段的日期
for ( $i = $days ; $i > 0; $i --) {
$daysFormat [] = date ( "Y-m-d" , strtotime ( '-' . $i . 'day' ));
}
// 所有用户
$allOrderData = self::find()
->select([ 'FROM_UNIXTIME(create_at,"%Y-%m-%d") as char_time' , 'COUNT(id) as total_order' , 'SUM(order_amount) as total_order_amount' , 'SUM(pay_amount) as total_order_pay_amount' ])
->where([ '>=' , 'FROM_UNIXTIME(create_at,"%Y-%m-%d")' , $lastDay ])
->andWhere([ '<=' , 'FROM_UNIXTIME(create_at,"%Y-%m-%d")' , $nowDay ])
->groupBy( 'char_time' )
->all();
$dayCountTitle = Yii::t( 'backend' , 'day_order_count_title' , [ 'last_day' => $lastDay , 'now_day' => $nowDay ]);
$dayAmountTitle = Yii::t( 'backend' , 'day_order_amount_title' , [ 'last_day' => $lastDay , 'now_day' => $nowDay ]);
$labels = $daysFormat ;
// 所有用户
$orderCounts = []; // 订单数量
$orderAmounts = []; // 订单金额
$orderPayAmounts = []; // 支付金额
$allOrderDataArr = [];
foreach ( $allOrderData as $allKey => $allVal ) {
$allOrderDataArr [ $allVal ->char_time][ 'char_time' ] = $allVal ->char_time;
$allOrderDataArr [ $allVal ->char_time][ 'total_order' ] = $allVal ->total_order;
$allOrderDataArr [ $allVal ->char_time][ 'total_order_amount' ] = $allVal ->total_order_amount;
$allOrderDataArr [ $allVal ->char_time][ 'total_order_pay_amount' ] = $allVal ->total_order_pay_amount;
}
foreach ( $daysFormat as $key => $val ) {
if ( array_key_exists ( $val , $allOrderDataArr )) {
$orderCounts [] = $allOrderDataArr [ $val ][ 'total_order' ];
$orderAmounts [] = $allOrderDataArr [ $val ][ 'total_order_amount' ];
$orderPayAmounts [] = $allOrderDataArr [ $val ][ 'total_order_pay_amount' ];
} else {
$orderCounts [] = '0' ;
$orderAmounts [] = '0' ;
$orderPayAmounts [] = '0' ;
}
}
$data = [
'dayCountTitle' => $dayCountTitle ,
'dayAmountTitle' => $dayAmountTitle ,
'orderCountLabel' => Yii::t( 'backend' , 'day_order_count_label' , [ 'days' => $days ]),
'orderAmountLabel' => Yii::t( 'backend' , 'day_order_amount_label' , [ 'days' => $days ]),
'orderPayAmountLabel' => Yii::t( 'backend' , 'day_order_pay_amount_label' , [ 'days' => $days ]),
'nowDay' => $nowDay ,
'lastDay' => $lastDay ,
'labels' => $labels ,
'orderCounts' => $orderCounts ,
'orderAmounts' => $orderAmounts ,
'orderPayAmounts' => $orderPayAmounts
];
return $data ;
}
|
js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
// 按天获取订单数量
var dayOrderCountChartCanvas = $( '#dayOrderCountChart' ).get(0).getContext( '2d' )
var dayOrderCountChartData = {
labels : <?= json_encode($dayOrderChar[ 'labels' ], true ) ?>,
datasets: [
{
label : '<?= $dayOrderChar[' orderCountLabel '] ?>' ,
backgroundColor : 'rgba(0, 192, 293, 0.5)' ,
data : <?= json_encode($dayOrderChar[ 'orderCounts' ], true ) ?>
}
]
}
var dayOrderCountChartOptions = {
scales: {
xAxes: [{
gridLines: {
display: false
}
}],
yAxes: [{
gridLines: {
display: false
}
}]
}
}
var dayOrderCountChart = new Chart(dayOrderCountChartCanvas, {
type: 'line' ,
data: dayOrderCountChartData,
options: dayOrderCountChartOptions
});
// 按天获取订单及金额
var dayOrderAmounCanvas = $( '#dayOrderAmountChart' ).get(0).getContext( '2d' )
var dayOrderAmounData = {
labels : <?= json_encode($dayOrderChar[ 'labels' ], true ) ?>,
datasets: [
{
label : '<?= $dayOrderChar[' orderAmountLabel '] ?>' ,
backgroundColor : 'rgba(0, 192, 293, 0.5)' ,
data : <?= json_encode($dayOrderChar[ 'orderAmounts' ], true ) ?>
},
{
label : '<?= $dayOrderChar[' orderPayAmountLabel '] ?>' ,
backgroundColor : 'rgba(0, 166, 90, 0.5)' ,
data : <?= json_encode($dayOrderChar[ 'orderPayAmounts' ], true ) ?>
}
]
}
var dayOrderAmounOptions = {
scales: {
xAxes: [{
gridLines: {
display: false
}
}],
yAxes: [{
gridLines: {
display: false
}
}]
}
}
var dayOrderAmountChart = new Chart(dayOrderAmounCanvas, {
type: 'line' ,
data: dayOrderAmounData,
options: dayOrderAmounOptions
});
|
记住,yii的as一定要在模型利定义公用变量
1
2
3
4
5
6
|
public $char_time ; // 按时间统计
public $total_order ; // 所有订单
public $total_order_amount ; // 所有订单总额
public $total_pay_order ; // 支付订单
public $total_pay_amount ; // 支付订单总额
public $total_order_pay_amount ; // 支付总额
|
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/tang05709/article/details/102885033