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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值