• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    yii框架结合charjs统计上一年与当前年数据的方法示例

    本文实例讲述了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程序设计有所帮助。

    您可能感兴趣的文章:
    • Spring-boot结合Shrio实现JWT的方法
    • JAVA集合框架Map特性及实例解析
    • TP5框架实现一次选择多张图片并预览的方法示例
    • yii框架结合charjs实现统计30天数据的方法
    • thinkphp5 框架结合plupload实现图片批量上传功能示例
    • TP5框架实现上传多张图片的方法分析
    • Apache Shrio安全框架实现原理及实例详解
    上一篇:yii框架结合charjs实现统计30天数据的方法
    下一篇:thinkphp框架表单数组实现图片批量上传功能示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

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