php数据统计框架,yii框架结合charjs实现统计30天数据的方法

本文实例讲述了yii框架结合charjs实现统计30天数据的方法。分享给大家供大家参考,具体如下:

理论上30天数据应该都有,但实际上却不一定是,所以需要补全

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

// 按天获取订单数量

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一定要在模型利定义公用变量

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程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值