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

2020-09-01 12:13:29

本文实例讲述了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; // 支付总额

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

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

相关文章 大家在看