UserStatisticsTotal.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <?php
  2. namespace common\models\statistics;
  3. use common\enums\StatusEnum;
  4. use common\models\mall\Mall;
  5. use common\models\order\Order;
  6. use common\models\user\User;
  7. use Exception;
  8. use Yii;
  9. /**
  10. * This is the model class for table "{{%user_statistics_total}}".
  11. *
  12. *
  13. * @property int $id ID
  14. * @property int $mall_id 商城ID
  15. * @property int $user_id 用户ID
  16. * @property int $order_num 下单数
  17. * @property float $order_money 下单金额,单元:元
  18. * @property int $pay_num 支付订单数
  19. * @property float $pay_money 支付金额,单位:元
  20. * @property int $pay_goods_num 支付商品件数
  21. * @property int $average_money 客单价(订单总额/订单总数)
  22. * @property int $finish_order_num 已完成订单数
  23. * @property float $finish_order_money 已完成订单金额,单位:元
  24. * @property int $refund_order_num 退款订单数
  25. * @property float $refund_order_money 退款订单金额
  26. * @property float $recharge_money 充值金额,单位:元
  27. * @property float $original_order_money 已支付订单优惠前金额,单位:元
  28. * @property int $cancel_order_num 已取消订单数
  29. * @property float $balance_pay 余额支付金额,单位:元
  30. * @property float $wechat_pay 微信支付金额,单位:元
  31. * @property float $ali_pay 支付宝支付金额,单元:元
  32. * @property float $pay_selling_price 已支付的订单售价总额(商品价格)
  33. * @property float $finish_selling_price 已完成的订单售价总额(商品价格)
  34. * @property float $user_goods_price_total 支付金额不包含运费
  35. * @property int $user_order_num 订单总数
  36. * @property int $status 状态【1启用 0禁用 -1删除】
  37. * @property int $created_at 创建时间
  38. * @property int $updated_at 更新数据时间
  39. * @property int $share_nums 分享次数
  40. * @property int $visit_nums 访问次数
  41. */
  42. class UserStatisticsTotal extends \common\models\base\BaseActiveRecord
  43. {
  44. /**
  45. * {@inheritdoc}
  46. */
  47. public static function tableName()
  48. {
  49. return '{{%user_statistics_total}}';
  50. }
  51. /**
  52. * {@inheritdoc}
  53. */
  54. public function rules()
  55. {
  56. return [
  57. [['mall_id', 'user_id', 'order_num', 'pay_num', 'pay_goods_num', 'finish_order_num', 'refund_order_num', 'cancel_order_num', 'status', 'created_at', 'updated_at', 'finish_goods_num', 'cancel_goods_num', 'refund_goods_num','share_nums','visit_nums'], 'integer'],
  58. [['order_money', 'pay_money', 'average_money','finish_order_money', 'refund_order_money', 'recharge_money', 'original_order_money', 'balance_pay', 'wechat_pay', 'ali_pay', 'cancel_order_money',
  59. 'pay_selling_price', 'finish_selling_price'], 'number'],
  60. ];
  61. }
  62. /**
  63. * {@inheritdoc}
  64. */
  65. public function attributeLabels()
  66. {
  67. return [
  68. 'id' => 'ID',
  69. 'mall_id' => '商城ID',
  70. 'user_id' => '用户ID',
  71. 'order_num' => '下单数',
  72. 'order_money' => '下单金额,单元:元',
  73. 'pay_num' => '支付订单数',
  74. 'pay_money' => '支付金额,单位:元',
  75. 'pay_goods_num' => '支付商品件数',
  76. 'average_money' => '客单价(订单总额/订单总数)',
  77. 'finish_order_num' => '已完成订单数',
  78. 'finish_order_money' => '已完成订单金额,单位:元',
  79. 'finish_goods_num' => '已完成商品数',
  80. 'refund_order_num' => '退款订单数',
  81. 'refund_order_money' => '退款订单金额',
  82. 'refund_goods_num' => '退款商品数',
  83. 'recharge_money' => '充值金额,单位:元',
  84. 'original_order_money' => '已支付订单优惠前金额,单位:元',
  85. 'cancel_order_num' => '已取消订单数',
  86. 'cancel_order_money' => '已取消订单金额',
  87. 'cancel_goods_num' => '已取消商品数',
  88. 'balance_pay' => '余额支付金额,单位:元',
  89. 'wechat_pay' => '微信支付金额,单位:元',
  90. 'ali_pay' => '支付宝支付金额,单元:元',
  91. 'pay_selling_price' => '已支付的订单售价总额(商品价格)',
  92. 'finish_selling_price' => '已完成的订单售价总额(商品价格)',
  93. 'user_goods_price_total' => '支付金额不包含运费',
  94. 'user_order_num' => '订单总数',
  95. 'status' => '状态【1启用 0禁用 -1删除】',
  96. 'created_at' => '创建时间',
  97. 'updated_at' => '更新数据时间',
  98. 'share_nums' => '分享次数',
  99. 'visit_nums' => '访问次数',
  100. ];
  101. }
  102. /**
  103. * 数据保存
  104. * @Author: lun
  105. * @DateTime: 2021/11/25 0025 18:45
  106. * @Copyright: copyright (c) 2021 广东七件事集团
  107. * @param $mall_id
  108. * @param $user_id
  109. * @param $data
  110. * @return bool
  111. */
  112. public static function setUserStatisticsTotal($mall_id, $user_id, $data) {
  113. try {
  114. $orderMdl = self::find()->where(['mall_id' => $mall_id, 'user_id' => $user_id])->one();
  115. if (empty($orderMdl)) {
  116. $orderMdl = new self();
  117. $orderMdl->mall_id = $mall_id;
  118. $orderMdl->user_id = $user_id;
  119. }
  120. // 循环赋值
  121. foreach ($orderMdl as $key => $value) {
  122. if (isset($data[$key]) && !empty($data[$key])) $orderMdl->$key += $data[$key];
  123. }
  124. // 客单价处理
  125. !empty($data['pay_money']) && $orderMdl->average_money = bcdiv($orderMdl->pay_money, $orderMdl->pay_num, 2);
  126. if (!$orderMdl->save()) {
  127. self::$static_error = $orderMdl->getErrorMessage();
  128. return false;
  129. }
  130. return true;
  131. } catch (\Exception $e) {
  132. self::$static_error = $e->getMessage();
  133. $logsMsg = '统计 setUserStatisticsTotal 报错,'. "mall_id:". $mall_id. " ,user_id:". $user_id .",".$e->getMessage();
  134. Yii::$app->custom->logs($logsMsg);
  135. return false;
  136. }
  137. }
  138. public function getUser()
  139. {
  140. return $this->hasOne(User::class, ['id' => 'user_id'])->select('id, nickname, avatar_url, mobile');
  141. }
  142. //累计历史售后完成订单数据
  143. public static function cumulativeOrderFinish()
  144. {
  145. try {
  146. $type = $params['type'] ?? 0;
  147. //获取商城id
  148. $mall_list = Mall::getEnableMallList(true);
  149. if(!empty($mall_list)){
  150. foreach ($mall_list as $mall){
  151. // var_dump('商城:'. $mall['id']);
  152. self::refundOrderFinishData(['mall_id' => $mall['id']]);
  153. }
  154. }
  155. return true;
  156. } catch (\Exception $e) {
  157. throw new Exception();
  158. }
  159. }
  160. public static function refundOrderFinishData($params)
  161. {
  162. try {
  163. //获取售后完成订单
  164. $order_list = Order::lists([
  165. 'where' => [
  166. ['mall_id' => $params['mall_id']],
  167. ['order_status' => -4],
  168. ['is_feedback' => 2],
  169. ],
  170. ]);
  171. if (empty($order_list)) return true;
  172. foreach ($order_list as $key => $value) {
  173. //获取用户统计数据
  174. $user_statistics = UserStatisticsTotal::getOne([
  175. ['mall_id' => $params['mall_id']],
  176. ['user_id' => $value['user_id']],
  177. ['status' => StatusEnum::ENABLED],
  178. ]);
  179. $user_statistics->refund_finish_order_num += 1;
  180. $user_statistics->refund_finish_order_money += $value['pay_money'];
  181. if (!$user_statistics->save()) var_dump('记录历史售后订单数据失败:user_id:'.$value['user_id'].',order_id:'.$value['id']);
  182. }
  183. return true;
  184. } catch (\Exception $e) {
  185. throw new Exception($e->getMessage());
  186. }
  187. }
  188. }