OrderStat.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\model\stat;
  11. use app\model\BaseModel;
  12. use app\model\system\Stat;
  13. use app\model\store\Stat as StoreStat;
  14. /**
  15. * 统计
  16. * @author Administrator
  17. *
  18. */
  19. class OrderStat extends BaseModel
  20. {
  21. /**
  22. * 用于订单(同与订单创建后调用)
  23. * @param $params
  24. */
  25. public function addOrderCreateStat($params)
  26. {
  27. $order_id = $params[ 'order_id' ];
  28. $site_id = $params[ 'site_id' ] ?? 0;
  29. $order_condition = array (
  30. [ 'order_id', '=', $order_id ],
  31. );
  32. if ($site_id > 0) {
  33. $order_condition[] = [ 'site_id', '=', $site_id ];
  34. }
  35. $order_info = model('order')->getInfo($order_condition);
  36. if (empty($order_info))
  37. return $this->error();
  38. $order_create_money = $order_info[ 'order_money' ];
  39. $goods_num = numberFormat($order_info[ 'goods_num' ]);
  40. //如果是第一笔订单才能累加下单会员数
  41. $time_region = getDayStartAndEndTime();
  42. $today_start_time = $time_region[ 'start_time' ];
  43. $today_end_time = $time_region[ 'end_time' ];
  44. $stat_data = array (
  45. 'site_id' => $site_id,
  46. 'order_create_count' => 1,//下单数
  47. 'order_create_money' => $order_create_money,// 销售额 order_money
  48. 'goods_order_count' => $goods_num,
  49. );
  50. //订单商品种数
  51. $order_goods_ids = model('order_goods')->getColumn($order_condition, 'goods_id');
  52. $order_goods_ids = array_unique($order_goods_ids);
  53. $other_order_condition = array (
  54. [ 'order_id', '<>', $order_id ],
  55. [ 'goods_id', 'in', $order_goods_ids ],
  56. [ 'create_time', 'between', [ $today_start_time, $today_end_time ] ],
  57. );
  58. $other_order_goods_ids = model('order_goods')->getColumn($other_order_condition, 'goods_id');
  59. $other_order_goods_ids = array_unique($other_order_goods_ids);
  60. $goods_order_type_count = count($order_goods_ids) - count($other_order_goods_ids);
  61. if ($goods_order_type_count > 0) {
  62. $stat_data[ 'goods_order_type_count' ] = $goods_order_type_count;
  63. }
  64. $stat_model = new Stat();
  65. $result = $stat_model->addShopStat($stat_data);
  66. return $result;
  67. }
  68. /**
  69. * 用于订单(同与订单支付后调用)
  70. * @param $params
  71. */
  72. public function addOrderPayStat($params)
  73. {
  74. $order_id = $params[ 'order_id' ];
  75. $site_id = $params[ 'site_id' ] ?? 0;
  76. $order_condition = array (
  77. [ 'order_id', '=', $order_id ],
  78. );
  79. if ($site_id > 0) {
  80. $order_condition[] = [ 'site_id', '=', $site_id ];
  81. }
  82. $order_info = model('order')->getInfo($order_condition);
  83. if (empty($order_info))
  84. return $this->error();
  85. $order_money = $order_info[ 'order_money' ];
  86. $pay_money = $order_info[ 'pay_money' ];
  87. $member_id = $order_info[ 'member_id' ];
  88. $delivery_money = $order_info[ 'delivery_money' ];
  89. $goods_num = numberFormat($order_info[ 'goods_num' ]);
  90. //如果是第一笔订单才能累加下单会员数
  91. $time_region = getDayStartAndEndTime();
  92. $today_start_time = $time_region[ 'start_time' ];
  93. $today_end_time = $time_region[ 'end_time' ];
  94. $today_order_condition = array (
  95. [ 'member_id', '=', $member_id ],
  96. [ 'pay_time', 'between', [ $today_start_time, $today_end_time ] ],
  97. [ 'order_id', '<>', $order_id ]
  98. );
  99. $stat_data = array (
  100. 'site_id' => $site_id,
  101. 'order_pay_count' => 1,
  102. 'order_total' => $order_money,
  103. 'shipping_total' => $delivery_money,
  104. 'goods_pay_count' => $goods_num,
  105. 'order_pay_money' => $pay_money
  106. );
  107. $count = model('order')->getCount($today_order_condition);
  108. if ($count == 0) {
  109. $stat_data[ 'order_member_count' ] = 1;
  110. }
  111. //销售量 order_num
  112. //销售额 order_money
  113. $stat_model = new Stat();
  114. $result = $stat_model->addShopStat($stat_data);
  115. return $result;
  116. }
  117. /**
  118. * 退款维权统计
  119. * @param $params
  120. */
  121. public function addOrderRefundStat($params)
  122. {
  123. $order_goods_id = $params[ 'order_goods_id' ];
  124. $site_id = $params[ 'site_id' ] ?? 0;
  125. $order_goods_condition = array (
  126. [ 'order_goods_id', '=', $order_goods_id ],
  127. );
  128. if ($site_id > 0) {
  129. $order_goods_condition[] = [ 'site_id', '=', $site_id ];
  130. }
  131. $order_goods_info = model('order_goods')->getInfo($order_goods_condition);
  132. if (empty($order_goods_info))
  133. return $this->error();
  134. $stat_data = array (
  135. 'site_id' => $site_id,
  136. 'order_refund_count' => 1
  137. );
  138. //todo 统计的时候用的是真实退款还是总退款(包含抵扣项)
  139. $refund_money = $params[ 'refund_pay_money' ];
  140. $stat_data[ 'refund_total' ] = $refund_money;
  141. $stat_model = new Stat();
  142. $result = $stat_model->addShopStat($stat_data);
  143. // 门店退款统计
  144. if ($order_goods_info[ 'store_id' ]) {
  145. $order_scene = model('order')->getValue([ [ 'order_id', '=', $order_goods_info[ 'order_id' ] ] ], 'order_scene');
  146. if ($order_scene == 'cashier') {
  147. ( new StoreStat() )->addStoreStat([
  148. 'site_id' => $site_id,
  149. 'store_id' => $order_goods_info[ 'store_id' ],
  150. 'refund_count' => 1,
  151. 'refund_money' => $refund_money
  152. ]);
  153. }
  154. }
  155. return $result;
  156. }
  157. }