statorder.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2017/5/27
  6. * Time: 下午5:09
  7. */
  8. namespace statistics;
  9. use Log;
  10. class statorder extends stat_base
  11. {
  12. public function __construct($stime)
  13. {
  14. parent::__construct($stime);
  15. }
  16. /*
  17. order_total_num int default '0' null comment '订单总数',
  18. order_amount decimal(10,2) default '0.00' null comment '订单总额',
  19. order_member_num int default '0' null comment '下单人员数',
  20. order_price_avg decimal(10,2) default '0.00' null comment '客单价',
  21. order_goods_num int default '0' null comment '订单总商品数目',
  22. goods_num int default '0' null comment '商品总数',
  23. */
  24. public function daily()
  25. {
  26. $this->order_info();
  27. $this->user_order();
  28. }
  29. private function order_info()
  30. {
  31. $model = Model('stat');
  32. $this->calc_time(stat_base::cur_date_type);
  33. $where = array();
  34. $where['order_isvalid'] = 1;//计入统计的有效订单
  35. $where['order_add_time'] = ['between',"{$this->mStartm},{$this->mEndtm}"];
  36. $field = ' COUNT(*) as ordernum, SUM(order_amount) as orderamount, COUNT(DISTINCT buyer_id) as ordermembernum, AVG(order_amount) as orderavg ';
  37. $stat_order = $model->getoneByStatorder($where, $field);
  38. if(empty($stat_order)) {
  39. return false;
  40. }
  41. else
  42. {
  43. $result = $this->mModel->get_one($this->mDateId,'invite_user_count',true);
  44. $fEdit = empty($result) ? false : true;
  45. $datas['order_total_num'] = ($t = $stat_order['ordernum'])?$t:0;
  46. $datas['order_amount'] = ncPriceFormat(($t = $stat_order['orderamount'])?$t:(0));
  47. $datas['order_member_num'] = ($t = $stat_order['ordermembernum'])?$t:0;
  48. $datas['order_price_avg'] = ncPriceFormat(($t = $stat_order['orderavg'])?$t:0);
  49. return $this->save($fEdit,$datas);
  50. }
  51. }
  52. private function user_order()
  53. {
  54. $this->calc_time(stat_base::cur_date_type);
  55. $mod_member = Model('member');
  56. $cond['payment_time'] = ['between',"{$this->mStartm},{$this->mEndtm}"];
  57. $cond['order_state'] = array('in',[20,30,40]);
  58. $i = 0;
  59. while (true)
  60. {
  61. $start = $i * 1000;
  62. $items = Model()->table('order')->field('buyer_id,payment_time')->where($cond)->order('payment_time asc')->limit("{$start},1000")->select();
  63. if(empty($items)) {
  64. return;
  65. }
  66. $i++;
  67. foreach ($items as $item)
  68. {
  69. $member_id = intval($item['buyer_id']);
  70. if($member_id <= 0) continue;
  71. $payment_time = intval($item['payment_time']);
  72. if($payment_time <= 0) continue;
  73. $mod_member->editMember(['member_id' => $member_id],['order_num' => array('exp', 'order_num+1'),'lastest_order' => $payment_time]);
  74. }
  75. }
  76. }
  77. }