BuyGoodsUpgrade.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. namespace addons\BossWeight\common\logic;
  3. use addons\BossWeight\common\models\AddonsBossPrice;
  4. use common\enums\AddonsEnum;
  5. use common\enums\OrderStatusEnum;
  6. use common\enums\StatusEnum;
  7. use common\enums\UpgradeEnum;
  8. use common\helpers\FormatHelper;
  9. use common\models\common\UpgradeCondition;
  10. use common\models\order\OrderDetail;
  11. use common\traits\ErrorTrait;
  12. use Yii;
  13. use Exception;
  14. use yii\helpers\Json;
  15. /**
  16. * 购物升级
  17. * @Author lun
  18. * @DateTime 2021-11-16 19:07:32
  19. * @copyright: Copyright (c) 2020 广东七件事集团
  20. */
  21. class BuyGoodsUpgrade{
  22. use ErrorTrait;
  23. /**
  24. * 购物升级执行
  25. * 样式:execute(AddonsEnum::ADDONS_NAME_BOSS, (new AddonsBoss()), (new AddonsBossLevel()), $order);
  26. * @Author: lun
  27. * @DateTime: 2021/11/18 0018 16:56
  28. * @Copyright: copyright (c) 2021 广东七件事集团
  29. * @param $identity_desc - 插件名称
  30. * @param $identity_obj - 用户身份空对象
  31. * @param $level_obj - 用户等级空对象
  32. * @param $order
  33. * @param string $order_by
  34. * @return bool | int
  35. */
  36. public function execute(string $identity_desc, object $identity_obj, object $level_obj, array $order, $order_by = 'level desc')
  37. {
  38. $trans = Yii::$app->db->beginTransaction();
  39. try {
  40. $mall_id = $order['mall_id'];
  41. $user_id = $order['user_id'];
  42. $upgrade_uid = 0;
  43. // 获取身份
  44. $model = $identity_obj::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED]);
  45. if (empty($model)) {
  46. $model = new $identity_obj;
  47. $model->mall_id = $mall_id;
  48. $model->user_id = $user_id;
  49. $model->level = 0;
  50. $model->upgrade_level_at = 0;
  51. $model->loadDefaultValues();
  52. }
  53. $where = [];
  54. $where[] = ['mall_id' => $mall_id];
  55. $where[] = ['status' => StatusEnum::ENABLED];
  56. $where[] = ['>=', 'level' , $model->level];
  57. $params = [];
  58. $params['where'] = $where;
  59. $params['order'] = $order_by;
  60. // 获取等级
  61. $level_list = $level_obj::lists($params);
  62. $where = [];
  63. $where[] = ['mall_id' => $mall_id];
  64. $where[] = ['order_id' => $order['id']];
  65. $where[] = ['user_id' => $user_id];
  66. $params =[];
  67. $params['where'] = $where;
  68. $order_detail_list = OrderDetail::lists($params);
  69. $buy_goods_id_arr = array_column($order_detail_list, 'goods_id');
  70. $can_upgrade_level = 0;
  71. $upgrade_status = 0;
  72. $flag = false;
  73. //开启购买升级商品
  74. if (!empty($level_list)) {
  75. foreach ($level_list as $level_arr) {
  76. $can_upgrade_level = $level_arr['level'];
  77. //开启购买升级商品
  78. if ($level_arr['upgrade_type_goods']&&$level_arr['is_auto_upgrade']) {
  79. $upgrade_status = UpgradeEnum::UPGRADE_STATUS_GOODS;
  80. $goods_id_arr = Json::decode($level_arr['goods_ids'], true);
  81. $res = UpgradeCondition::buyGoods($level_arr['goods_type'], $buy_goods_id_arr, $goods_id_arr);
  82. if ($res) {
  83. //购买升级商品触发升级:0订单完成 1支付完成
  84. if ($level_arr['buy_goods_type'] == 0 && $order['order_status'] == OrderStatusEnum::ACCOMPLISH) {
  85. $flag = true;
  86. break;
  87. }
  88. if ($level_arr['buy_goods_type'] == 1 && $order['pay_status'] == OrderStatusEnum::PAY) {
  89. $flag = true;
  90. break;
  91. }
  92. }
  93. }
  94. }
  95. if ($flag) {
  96. //插入分红金额数据记录,重新购买升级商品,则刷新分红上限金额
  97. // $log = AddonsBossPrice::findOne([ 'user_id' => $user_id, 'level' => $can_upgrade_level]);
  98. // if(!$log){
  99. // $log = new AddonsBossPrice;
  100. // $log->user_id = $model->user_id;
  101. // $log->level = $can_upgrade_level;
  102. // }
  103. // $log->price = 0;
  104. // if (!$log->save()){
  105. // throw new Exception(json_encode($log->errors,JSON_UNESCAPED_UNICODE));
  106. // }
  107. $model->level = $can_upgrade_level;
  108. $model->upgrade_status = $upgrade_status;
  109. $model->upgrade_level_at = time();
  110. if (!$model->save()) throw new Exception("{用户ID:$user_id},订单ID:{$order['id']},". AddonsEnum::getAddonsNameMap($identity_desc) ."购物升级失败");
  111. $upgrade_uid = $user_id;
  112. }
  113. }
  114. $trans->commit();
  115. return $upgrade_uid;
  116. } catch (Exception $e) {
  117. $trans->rollBack();
  118. $exception = FormatHelper::exception($e, AddonsEnum::getAddonsNameMap($identity_desc) . "购物升级失败");
  119. $this->setError($exception);
  120. return false;
  121. }
  122. }
  123. }