前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >yii框架结合charjs统计上一年与当前年数据的方法示例

yii框架结合charjs统计上一年与当前年数据的方法示例

作者头像
砸漏
发布2020-11-02 11:22:04
2200
发布2020-11-02 11:22:04
举报
文章被收录于专栏:恩蓝脚本

本文实例讲述了yii框架结合charjs统计上一年与当前年数据的方法。分享给大家供大家参考,具体如下:

理论上是1年有12个月,但实际上却是去年12个月已经过了,是完整的12个月,今年的12个月还没过,不完整,所以需要补齐

代码语言:javascript
复制
public static function getYearOrderCharData() {
// 获取当前年
$months = range(1, 12);
$currentYear = date('Y');
$lastYear = date('Y', strtotime("-1 year"));
// 所有订单
$allOrderData = self::find()
- select(['FROM_UNIXTIME(create_at,"%Y-%m") as char_time', 'COUNT(id) as total_order', 'SUM(order_amount) as total_order_amount'])
- where([' =', 'FROM_UNIXTIME(create_at,"%Y")', $lastYear])
- groupBy('char_time')
- all();
// 已支付订单
$allPayOrderData = self::find()
- select(['FROM_UNIXTIME(create_at,"%Y-%m") as char_time', 'COUNT(id) as total_order', 'SUM(pay_amount) as total_order_amount'])
- where([' =', 'FROM_UNIXTIME(create_at,"%Y")', $lastYear])
- andWhere(['pay_status' =  2])
- groupBy('char_time')
- all();
$yearCountTitle   = Yii::t('backend', 'year_order_count_title', ['last_year' =  $lastYear, 'current_year' =  $currentYear]);
$yearAmountTitle  = Yii::t('backend', 'year_order_amount_title', ['last_year' =  $lastYear, 'current_year' =  $currentYear]);
$yearPayCountTitle = Yii::t('backend', 'year_order_pay_count_title', ['last_year' =  $lastYear, 'current_year' =  $currentYear]);
$yearPayAmountTitle = Yii::t('backend', 'year_order_pay_amount_title', ['last_year' =  $lastYear, 'current_year' =  $currentYear]);
$labels = [];
// 所有订单
$lastYearCounts = []; // 前一年月订单总量
$lastYearAmounts = []; // 前一年月订单总额
$currentYearCounts = []; // 当前年月订单总量
$currentYearAmounts = []; // 当前年月订单额
$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'] = number_format($allVal- total_order_amount / 100, 2, '.', '');
}
// 已支付订单
$lastYearPayCounts = []; // 前一年月支付订单总量
$lastYearPayAmounts = []; // 前一年月支付订单总额
$currentYearPayCounts = []; // 当前年月支付订单总量
$currentYearPayAmounts = []; // 当前年月支付订单额
$allPayOrderDataArr = [];
foreach($allPayOrderData as $payKey =  $payVal) {
$allPayOrderDataArr[$payVal- char_time]['char_time'] = $payVal- char_time;
$allPayOrderDataArr[$payVal- char_time]['total_order'] = $payVal- total_order;
$allPayOrderDataArr[$payVal- char_time]['total_order_amount'] = number_format($payVal- total_order_amount / 100, 2, '.', '');
}
foreach($months as $key =  $val) {
$label = $val . Yii::t('backend', 'month');
$labels[] = $label;
$theMonth = strlen($val) == 2 ? $val : '0' . $val;
// 上一年
$lastYearMonth = $lastYear . '-' . $theMonth;
if(array_key_exists($lastYearMonth, $allOrderDataArr)) {
$lastYearCounts[] = $allOrderDataArr[$lastYearMonth]['total_order'];
$lastYearAmounts[] = $allOrderDataArr[$lastYearMonth]['total_order_amount'];
} else {
$lastYearCounts[] = '0';
$lastYearAmounts[] = '0';
}
if(array_key_exists($lastYearMonth, $allPayOrderDataArr)) {
$lastYearPayCounts[] = $allPayOrderDataArr[$lastYearMonth]['total_order'];
$lastYearPayAmounts[] = $allPayOrderDataArr[$lastYearMonth]['total_order_amount'];
} else {
$lastYearPayCounts[] = '0';
$lastYearPayAmounts[] = '0';
}
// 当前年
$currentYearMonth = $currentYear . '-' . $theMonth;
if(array_key_exists($currentYearMonth, $allOrderDataArr)) {
$currentYearCounts[] = $allOrderDataArr[$currentYearMonth]['total_order'];
$currentYearAmounts[] = $allOrderDataArr[$currentYearMonth]['total_order_amount'];
} else {
$currentYearCounts[] = '0';
$currentYearAmounts[] = '0';
}
if(array_key_exists($currentYearMonth, $allPayOrderDataArr)) {
$currentYearPayCounts[] = $allPayOrderDataArr[$currentYearMonth]['total_order'];
$currentYearPayAmounts[] = $allPayOrderDataArr[$currentYearMonth]['total_order_amount'];
} else {
$currentYearPayCounts[] = '0';
$currentYearPayAmounts[] = '0';
}
}
$data = [
'yearCountTitle'     =  $yearCountTitle,
'yearAmountTitle'    =  $yearAmountTitle,
'yearPayCountTitle'   =  $yearPayCountTitle,
'yearPayAmountTitle'   =  $yearPayAmountTitle,
'lastYear'        =  $lastYear,
'currentYear'      =  $currentYear,
'labels'         =  $labels,
'lastYearCounts'     =  $lastYearCounts,
'lastYearAmounts'    =  $lastYearAmounts,
'currentYearCounts'   =  $currentYearCounts,
'currentYearAmounts'   =  $currentYearAmounts,
'lastYearPayCounts'   =  $lastYearPayCounts,
'lastYearPayAmounts'   =  $lastYearPayAmounts,
'currentYearPayCounts'  =  $currentYearPayCounts,
'currentYearPayAmounts' =  $currentYearPayAmounts,
];
return $data;
}

js

代码语言:javascript
复制
// 订单总量对比
var yearOrderCountChartCanvas = $('#yearOrderCountChart').get(0).getContext('2d')
var yearOrderCountChartData = {
labels : <?= json_encode($orderChar['labels'], true) ? ,
datasets: [
{
label        : '<?= $orderChar['lastYear'] ? ',
backgroundColor   : 'rgba(0, 192, 239, 0.5)',
data        : <?= json_encode($orderChar['lastYearCounts'], true) ? 
},
{
label        : '<?= $orderChar['currentYear'] ? ',
backgroundColor   : 'rgba(0, 135, 239, 0.5)',
data        : <?= json_encode($orderChar['currentYearCounts'], true) ? 
}
]
}
var yearOrderCountChartOptions = {
scales: {
xAxes: [{
gridLines: {
display: false
}
}],
yAxes: [{
gridLines: {
display: false
}
}]
}
}
var yearOrderCountChart = new Chart(yearOrderCountChartCanvas, {
type: 'line',
data: yearOrderCountChartData,
options: yearOrderCountChartOptions
});
// 支付订单总量对比
var yearOrderPayCountChartCanvas = $('#yearOrderPayCountChart').get(0).getContext('2d')
var yearOrderPayCountChartData = {
labels : <?= json_encode($orderChar['labels'], true) ? ,
datasets: [
{
label        : '<?= $orderChar['lastYear'] ? ',
backgroundColor   : 'rgba(0, 166, 90, 0.5)',
data        : <?= json_encode($orderChar['lastYearPayCounts'], true) ? 
},
{
label        : '<?= $orderChar['currentYear'] ? ',
backgroundColor   : 'rgba(0, 166, 11, 0.5)',
data        : <?= json_encode($orderChar['currentYearPayCounts'], true) ? 
}
]
}
var yearOrderPayCountChartOptions = {
scales: {
xAxes: [{
gridLines: {
display: false
}
}],
yAxes: [{
gridLines: {
display: false
}
}]
}
}
var yearOrderPayCountChart = new Chart(yearOrderPayCountChartCanvas, {
type: 'line',
data: yearOrderPayCountChartData,
options: yearOrderPayCountChartOptions
});
// 订单总额对比
var yearOrderAmountChartCanvas = $('#yearOrderAmountChart').get(0).getContext('2d')
var yearOrderAmountChartData = {
labels : <?= json_encode($orderChar['labels'], true) ? ,
datasets: [
{
label        : '<?= $orderChar['lastYear'] ? ',
backgroundColor   : 'rgba(0, 192, 239, 0.5)',
data        : <?= json_encode($orderChar['lastYearAmounts'], true) ? 
},
{
label        : '<?= $orderChar['currentYear'] ? ',
backgroundColor   : 'rgba(0, 135, 239, 0.5)',
data        : <?= json_encode($orderChar['currentYearAmounts'], true) ? 
}
]
}
var yearOrderAmountChartOptions = {
scales: {
xAxes: [{
gridLines: {
display: false
}
}],
yAxes: [{
gridLines: {
display: false
}
}]
}
}
var yearOrderAmountChart = new Chart(yearOrderAmountChartCanvas, {
type: 'line',
data: yearOrderAmountChartData,
options: yearOrderAmountChartOptions
});
// 支付订单总额对比
var yearOrderPayAmountChartCanvas = $('#yearOrderPayAmountChart').get(0).getContext('2d')
var yearOrderPayAmountChartData = {
labels : <?= json_encode($orderChar['labels'], true) ? ,
datasets: [
{
label        : '<?= $orderChar['lastYear'] ? ',
backgroundColor   : 'rgba(0, 166, 90, 0.5)',
data        : <?= json_encode($orderChar['lastYearPayAmounts'], true) ? 
},
{
label        : '<?= $orderChar['currentYear'] ? ',
backgroundColor   : 'rgba(0, 166, 11, 0.5)',
data        : <?= json_encode($orderChar['currentYearPayAmounts'], true) ? 
}
]
}
var yearOrderPayAmountChartOptions = {
scales: {
xAxes: [{
gridLines: {
display: false
}
}],
yAxes: [{
gridLines: {
display: false
}
}]
}
}
var yearOrderPayAmountChart = new Chart(yearOrderPayAmountChartCanvas, {
type: 'line',
data: yearOrderPayAmountChartData,
options: yearOrderPayAmountChartOptions
});

记住,yii的as一定要在模型利定义公共变量

代码语言:javascript
复制
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程序设计有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档