yii框架结合charjs实现统计30天数据的方法


Posted in PHP onApril 04, 2020

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

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

PHP 相关文章推荐
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
使用NetBeans + Xdebug调试PHP程序的方法
Apr 12 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
Yii入门教程之目录结构、入口文件及路由设置
Nov 25 PHP
Laravel 5框架学习之用户认证
Apr 09 PHP
Java中final关键字详解
Aug 10 PHP
PHP实现GIF图片验证码
Nov 04 PHP
解决微信授权回调页面域名只能设置一个的问题
Dec 11 PHP
php实现评论回复删除功能
May 23 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 #PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 #PHP
phpQuery采集网页实现代码实例
Apr 02 #PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 #PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 #PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 #PHP
TP5框架实现上传多张图片的方法分析
Mar 29 #PHP
You might like
PHP中的CMS的涵义
2007/03/11 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
php实现记事本案例
2020/10/20 PHP
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
layui table设置前台过滤转义等方法
2018/08/17 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
[31:00]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS iG
2014/05/25 DOTA
[03:18]DOTA2亚洲邀请赛小组赛第一日 RECAP赛事回顾
2015/01/30 DOTA
Python简单日志处理类分享
2015/02/14 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
python opencv实现证件照换底功能
2019/08/19 Python
python numpy生成等差数列、等比数列的实例
2020/02/25 Python
python如何使用腾讯云发送短信
2020/09/17 Python
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
大学生怎样写好自荐信
2014/02/25 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
小班下学期评语
2014/05/04 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫
利用Python多线程实现图片下载器
2022/03/25 Python