您的位置:首页 > 编程语言 > PHP开发

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

2020-04-05 12:07 1176 查看

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息