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; // 支付总额

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值