当前位置: 移动技术网 > IT编程>开发语言>PHP > yii框架结合charjs实现统计30天数据的方法

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

2020年05月12日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网