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)
 
