UserTeamPayMoneyStatistics.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. namespace common\models\user;
  3. use common\enums\OrderStatusEnum;
  4. use common\enums\RabbitMqEnum;
  5. use common\enums\StatusEnum;
  6. use common\models\order\Order;
  7. use common\models\order\OrderDetail;
  8. use Yii;
  9. /**
  10. * This is the model class for table "qimall_user_team_pay_money_statistics".
  11. *
  12. * @property int $id ID
  13. * @property int $mall_id 商城ID
  14. * @property int $user_id 用户ID
  15. * @property float $pay_team 总团队实付业绩[订单支付]
  16. * @property float $accomplish_team 总团队实付业绩[订单完成]
  17. * @property float $pay_big_market 大市场实付业绩[订单支付]
  18. * @property float $accomplish_big_market 大市场实付业绩[订单完成]
  19. * @property float $pay_user 用户实付业绩[订单支付]
  20. * @property float $accomplish_user 用户实付业绩[订单完成]
  21. * @property int $status 状态[-1删除; 0禁用; 1正常]
  22. * @property int $created_at 创建时间
  23. * @property int $updated_at 更新时间
  24. */
  25. class UserTeamPayMoneyStatistics extends \common\models\base\BaseActiveRecord
  26. {
  27. /**
  28. * {@inheritdoc}
  29. */
  30. public static function tableName()
  31. {
  32. return 'qimall_user_team_pay_money_statistics';
  33. }
  34. /**
  35. * {@inheritdoc}
  36. */
  37. public function rules()
  38. {
  39. return [
  40. [['mall_id', 'user_id', 'status', 'created_at', 'updated_at'], 'integer'],
  41. [['pay_team', 'accomplish_team', 'pay_big_market', 'accomplish_big_market', 'pay_user', 'accomplish_user'], 'number'],
  42. ];
  43. }
  44. /**
  45. * {@inheritdoc}
  46. */
  47. public function attributeLabels()
  48. {
  49. return [
  50. 'id' => 'ID',
  51. 'mall_id' => '商城ID',
  52. 'user_id' => '用户ID',
  53. 'pay_team' => '总团队实付业绩[订单支付]',
  54. 'accomplish_team' => '总团队实付业绩[订单完成]',
  55. 'pay_big_market' => '大市场实付业绩[订单支付]',
  56. 'accomplish_big_market' => '大市场实付业绩[订单完成]',
  57. 'pay_user' => '用户实付业绩[订单支付]',
  58. 'accomplish_user' => '用户实付业绩[订单完成]',
  59. 'status' => '状态[-1删除; 0禁用; 1正常]',
  60. 'created_at' => '创建时间',
  61. 'updated_at' => '更新时间',
  62. ];
  63. }
  64. public static function setData(array $data)
  65. {
  66. try {
  67. $model = self::findOne(['user_id' => $data['user_id'], 'status' => StatusEnum::ENABLED]);
  68. if (empty($model)) {
  69. $model = new self();
  70. $model->loadDefaultValues();
  71. }
  72. if (!$model->load($data, '') || !$model->save()) {
  73. throw new \Exception($model->getErrorMessage());
  74. }
  75. return $model;
  76. } catch (\Exception $e) {
  77. self::setStaticError($e->getMessage());
  78. return false;
  79. }
  80. }
  81. public static function calculatePerformance($params)
  82. {
  83. $mall_id= $params['mall_id'];
  84. $uid = $params['user_id'];
  85. $order_id = $params['order_id'];
  86. try {
  87. $parent_id_arr = UserPartitionRelationship::getParentIdArr($uid);
  88. $parent_id_arr[] = $uid;
  89. foreach ($parent_id_arr as $user_id) {
  90. $user_id_arr = UserPartitionRelationship::getChildIdArr($user_id);
  91. $pay_team_performance = 0;
  92. $accomplish_team_performance = 0;
  93. if (!empty($user_id_arr)) {
  94. $pay_team_performance = self::computeGoodsPerformance($user_id_arr, ['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH, OrderStatusEnum::TAKE, OrderStatusEnum::TAKE_FINISH]]);
  95. $accomplish_team_performance = self::computeGoodsPerformance($user_id_arr, ['order_status' => OrderStatusEnum::ACCOMPLISH]);
  96. }
  97. $pay_user_performance = self::computeGoodsPerformance($user_id, ['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH]]);
  98. $accomplish_user_performance = self::computeGoodsPerformance($user_id, ['order_status' => [OrderStatusEnum::ACCOMPLISH]]);
  99. $direct_user_id_arr = UserPartitionRelationship::getChildIdArr($user_id, 1);
  100. $pay_big_market_performance = 0;
  101. $accomplish_big_market_performance = 0;
  102. if (!empty($direct_user_id_arr)) {
  103. $pay_performance_arr = [];
  104. $accomplish_performance_arr = [];
  105. foreach ($direct_user_id_arr as $id) {
  106. $child_id_arr = UserPartitionRelationship::getChildIdArr($id);
  107. $child_id_arr[] = $id;
  108. $pay_performance_arr[] = self::computeGoodsPerformance($child_id_arr, ['order_status' => [OrderStatusEnum::PAY, OrderStatusEnum::SHIPMENTS, OrderStatusEnum::SING, OrderStatusEnum::ACCOMPLISH, OrderStatusEnum::TAKE, OrderStatusEnum::TAKE_FINISH]]);
  109. $accomplish_performance_arr[] = self::computeGoodsPerformance($child_id_arr, ['order_status' => [OrderStatusEnum::ACCOMPLISH]]);
  110. }
  111. $pay_big_market_performance = max($pay_performance_arr);
  112. $accomplish_big_market_performance = max($accomplish_performance_arr);
  113. }
  114. if (self::setData([
  115. 'mall_id' => $mall_id,
  116. 'user_id' => $user_id,
  117. 'pay_team' => $pay_team_performance > 0 ? $pay_team_performance : 0,
  118. 'accomplish_team' => $accomplish_team_performance > 0 ? $accomplish_team_performance : 0,
  119. 'pay_big_market' => $pay_big_market_performance > 0 ? $pay_big_market_performance : 0,
  120. 'accomplish_big_market' => $accomplish_big_market_performance > 0 ? $accomplish_big_market_performance : 0,
  121. 'pay_user' => $pay_user_performance > 0 ? $pay_user_performance : 0,
  122. 'accomplish_user' => $accomplish_user_performance > 0 ? $accomplish_user_performance : 0,
  123. ]) === false) {
  124. throw new \Exception(self::getStaticError());
  125. }
  126. }
  127. if (isset($params['is_refund']) && $params['is_refund']) return true;
  128. //再次执行会员升级任务
  129. //\Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_ORDER, RabbitMqEnum::ORDER_QUEUE, ['id' => $order_id], \common\listeners\user\UserUpgradeListener::class, 'handleSync');
  130. return true;
  131. } catch (\Exception $e) {
  132. \Yii::error(__METHOD__ . ' ' . json_encode(['msg' => $e->getMessage(), 'line' => $e->getLine()]));
  133. self::setStaticError($e->getMessage());
  134. return false;
  135. }
  136. }
  137. public static function computeGoodsPerformance($user_id, $andwhere)
  138. {
  139. $pay_money = Order::find()
  140. ->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])
  141. ->andWhere($andwhere)
  142. ->sum('pay_money');
  143. return $pay_money ?? 0;
  144. }
  145. }