yii框架结合charjs统计上一年与当前年数据的方法示例
发布:smiling 来源: PHP粉丝网 添加日期:2022-02-24 08:22:20 浏览: 评论:0
本文实例讲述了yii框架结合charjs统计上一年与当前年数据的方法,分享给大家供大家参考,具体如下:
理论上是1年有12个月,但实际上却是去年12个月已经过了,是完整的12个月,今年的12个月还没过,不完整,所以需要补齐
- 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
- // 订单总量对比
- 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一定要在模型利定义公共变量
- public $char_time; // 按时间统计
- public $total_order; // 所有订单
- public $total_order_amount; // 所有订单总额
- public $total_pay_order; // 支付订单
- public $total_pay_amount; // 支付订单总额
- public $total_order_pay_amount; // 支付总额
Tags: yii统计上一年 charjs
- 上一篇:yii框架结合charjs实现统计30天数据的方法
- 下一篇:最后一页
相关文章
- ·yii框架结合charjs实现统计30天数据的方法(2022-02-24)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)