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 相关文章推荐
在项目中寻找代码的坏命名
Jul 14 PHP
php curl的深入解析
Jun 02 PHP
Thinkphp中数据按分类嵌套循环实现方法
Oct 30 PHP
PHP基于imap获取邮件实例
Nov 11 PHP
php查看网页源代码的方法
Mar 13 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
PHP简单判断手机设备的方法
Aug 23 PHP
PHP数组操作简单案例分析
Oct 15 PHP
Swoole4.4协程抢占式调度器详解
May 23 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
Yii框架小部件(Widgets)用法实例详解
May 15 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截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
20个PHP常用类库小结
2011/09/11 PHP
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
React Router v4 入坑指南(小结)
2018/04/08 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
Python中List.count()方法的使用教程
2015/05/20 Python
Python 中的 else详解
2016/04/23 Python
Python模拟用户登录验证
2017/09/11 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
python写一个随机点名软件的实例
2019/11/28 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
Python实现EM算法实例代码
2020/10/04 Python
Django中如何用xlwt生成表格的方法步骤
2021/01/31 Python
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
个人简历自我评价八例
2013/10/31 职场文书
优秀研究生自我鉴定
2013/12/04 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
求职自我推荐信
2015/03/24 职场文书
信仰纪录片观后感
2015/06/08 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
浅谈Python响应式类库RxPy
2021/06/14 Python
python数字转对应中文的方法总结
2021/08/02 Python