CloudStockPriceDifferenceUserTeamStatisticsService.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. namespace addons\CloudStock\common\services;
  3. use addons\CloudStock\common\models\CloudStockPriceDifferenceUserTeamStatistics;
  4. use addons\ServeBonus\common\logic\ConditionUpgradeLogic;
  5. use addons\ServeBonus\common\models\ServeBonus;
  6. use addons\ServeBonus\common\models\ServeBonusLevel;
  7. use common\enums\AddonsEnum;
  8. use common\enums\StatusEnum;
  9. use common\helpers\FormatHelper;
  10. use common\models\mall\MallAddons;
  11. use common\models\user\User;
  12. use common\models\user\UserPartitionRelationship;
  13. use Exception;
  14. use Yii;
  15. class CloudStockPriceDifferenceUserTeamStatisticsService extends BaseService
  16. {
  17. /**
  18. * 云库存补货-扣平台库存,触发业绩奖励,同时触发异步,业绩统计
  19. * @param $data
  20. * @return void
  21. */
  22. public static function handleSync($data)
  23. {
  24. $mall_id = $data['mall_id'];
  25. $goods_price = $data['goods_price'];
  26. $user_id = $data['user_id'];
  27. $obj = new CloudStockPriceDifferenceUserTeamStatisticsService(['mall_id' => $mall_id]);
  28. $obj->triggerStatistics(['pay_money' => $goods_price, 'user_id' => $user_id]);
  29. //统计完业绩,触发服务商分红的条件升级
  30. if (MallAddons::isInstall($mall_id, 'ServeBonus')) {
  31. $cond_upgrade = new ConditionUpgradeLogic();
  32. $order = [
  33. 'id' => $data['order_id'],
  34. 'mall_id' => $data['mall_id'],
  35. 'user_id' => $data['user_id'],
  36. ];
  37. $cond_upgrade->execute(AddonsEnum::ADDONS_NAME_SERVEBONUS, (new ServeBonus()), (new ServeBonusLevel()), $order);
  38. }
  39. }
  40. public function triggerStatistics($params)
  41. {
  42. $obj = new CloudStockPriceDifferenceUserTeamStatisticsService(['mall_id' => $this->mall_id, 'user_id' => $params['user_id']]);
  43. $obj->incBatchParentDataByUid($params);
  44. $obj->incBatchSelfDataByUid($params);
  45. }
  46. public function incBatchParentDataByUid($params = null)
  47. {
  48. $trans = Yii::$app->db->beginTransaction();
  49. try {
  50. if (empty($params)) throw new Exception('传参有误');
  51. $user_id = $this->user_id;
  52. $mall_id = $this->mall_id;
  53. $pay_money = $params['pay_money'];
  54. // 查询此用户是否有上级
  55. $parent_list = UserPartitionRelationship::getParentIdArr($user_id);// 获取本人当前tree数据
  56. if (empty($parent_list)) {
  57. $trans->commit();
  58. return true;
  59. }
  60. $parent_list = array_reverse($parent_list);// 数组倒叙
  61. foreach ($parent_list as $key => $pid) {
  62. $model = CloudStockPriceDifferenceUserTeamStatistics::find()->where(['user_id' => $pid, 'status' => StatusEnum::ENABLED])->one();
  63. $emptyModel = empty($model);
  64. if ($emptyModel) {
  65. $model = new CloudStockPriceDifferenceUserTeamStatistics();
  66. $model->mall_id = $mall_id;
  67. $model->user_id = $pid;
  68. $model->loadDefaultValues();
  69. }
  70. // 上级团队
  71. $model->team_pay_selling_price = $model->team_pay_selling_price + $pay_money;
  72. if ($key == 0) {// 直推上级
  73. $model->user_direct_pay_selling_price = $model->user_direct_pay_selling_price + $pay_money;
  74. } elseif ($key == 1) {// 间推上级
  75. $model->user_indirect_pay_selling_price = $model->user_indirect_pay_selling_price + $pay_money;
  76. }
  77. if (!$model->save()) throw new Exception($model->getErrorMessage());
  78. }
  79. $trans->commit();
  80. return true;
  81. } catch (\Exception $e) {
  82. $trans->rollBack();
  83. $exception = FormatHelper::exception($e, "用户上级订单数据维护");
  84. echo $exception;
  85. return false;
  86. }
  87. }
  88. public function incBatchSelfDataByUid($params = null)
  89. {
  90. try {
  91. if (empty($params)) throw new Exception('传参有误');
  92. $pay_money = $params['pay_money'];
  93. $user_id = $this->user_id;
  94. $mall_id = $this->mall_id;
  95. $model = CloudStockPriceDifferenceUserTeamStatistics::find()->where(['user_id' => $user_id, 'status' => StatusEnum::ENABLED])->one();
  96. $emptyModel = empty($model);
  97. if ($emptyModel) {
  98. $model = new CloudStockPriceDifferenceUserTeamStatistics();
  99. $model->mall_id = $mall_id;
  100. $model->user_id = $user_id;
  101. $model->loadDefaultValues();
  102. }
  103. $model->self_selling_price = $model->self_selling_price + $pay_money;
  104. if (!$model->save()) throw new Exception($model->getErrorMessage());
  105. return true;
  106. } catch (\Exception $e) {
  107. $exception = FormatHelper::exception($e, "用户订单数据维护");
  108. echo $exception;
  109. return false;
  110. }
  111. }
  112. }