ConditionUpgrade.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. namespace addons\Boss\common\logic;
  3. use common\enums\AddonsEnum;
  4. use common\enums\LevelUpgradeLogEnum;
  5. use common\enums\StatusEnum;
  6. use common\enums\UpgradeEnum;
  7. use common\helpers\FormatHelper;
  8. use common\models\user\UserPartitionRelationship;
  9. use common\traits\ErrorTrait;
  10. use Yii;
  11. use Exception;
  12. /**
  13. * 购物升级
  14. * @Author lun
  15. * @DateTime 2021-11-16 19:07:32
  16. * @copyright: Copyright (c) 2020 广东七件事集团
  17. */
  18. class ConditionUpgrade{
  19. use ErrorTrait;
  20. /**
  21. * 购物升级执行
  22. * 样式:execute(AddonsEnum::ADDONS_NAME_BOSS, (new AddonsBoss()), (new AddonsBossLevel()), $order);
  23. * @Author: lun
  24. * @DateTime: 2021/11/18 0018 16:56
  25. * @Copyright: copyright (c) 2021 广东七件事集团
  26. * @param $identity_desc - 用户身份描述
  27. * @param $identity_obj - 用户身份空对象
  28. * @param $level_obj - 用户等级空对象
  29. * @param $order
  30. * @param string $order_by
  31. * @return bool | array
  32. */
  33. public function execute(string $identity_desc, object $identity_obj, object $level_obj, array $order, $order_by = 'level desc', $upgrade_log_obj = null)
  34. {
  35. try {
  36. //开启条件升级
  37. $mall_id = $order['mall_id'];
  38. $user_id = $order['user_id'];
  39. // $upgrade_user_id_arr = UserRelationship::getParentIdArr($user_id);
  40. $upgrade_user_id_arr = UserPartitionRelationship::getParentIdArr($user_id);
  41. $upgrade_user_id_arr [] = $user_id;
  42. $upgrade_user_id_arr = array_reverse($upgrade_user_id_arr);
  43. $model_list = $identity_obj::find()->where(['user_id' => $upgrade_user_id_arr, 'status' => StatusEnum::ENABLED])->indexBy('user_id')->all();
  44. $model_arr = $upgrade_user_ids = [];
  45. foreach ($upgrade_user_id_arr as $id){
  46. if(!isset($model_list[$id])){
  47. }
  48. if(!empty($model_list[$id])) {
  49. $model_arr[] = $model_list[$id];
  50. }else{
  51. $model = new $identity_obj;
  52. $model->mall_id = $mall_id;
  53. $model->user_id = $id;
  54. $model->level = 0;
  55. $model->upgrade_level_at = 0;
  56. $model_arr[] = $model;
  57. }
  58. }
  59. foreach ($model_arr as $identity) {
  60. $where = [];
  61. $where[] = ['mall_id' => $mall_id];
  62. $where[] = ['status' => StatusEnum::ENABLED];
  63. $where[] = ['>=', 'level' , $identity->level];
  64. $params = [];
  65. $params['where'] = $where;
  66. $params['order'] = $order_by;
  67. $level_list = $level_obj::lists($params);
  68. $flag = false;
  69. $can_upgrade_level = 0;
  70. $upgrade_status = 0;
  71. if($level_list){
  72. foreach ($level_list as $identity_level_arr) {
  73. $can_upgrade_level = $identity_level_arr['level'];
  74. //开启条件升级
  75. if ($identity_level_arr['upgrade_type_condition']&&$identity_level_arr['is_auto_upgrade']) {
  76. $upgrade_status = UpgradeEnum::UPGRADE_STATUS_CONDITION;
  77. $res = UpgradeCondition::check($identity->user_id, $identity_level_arr,$order['id'], $mall_id);
  78. if ($res) {
  79. $flag = true;
  80. break;
  81. }
  82. }
  83. }
  84. }
  85. if ($flag) {
  86. //因支持level==0,股东身份不存在时,upgrade_level_at==0
  87. if($identity->level==0){
  88. if($model->upgrade_level_at==0||$can_upgrade_level>$model->level){
  89. $identity->level = $can_upgrade_level;
  90. $identity->upgrade_status = $upgrade_status;
  91. $identity->upgrade_level_at = time();
  92. if (!$identity->save()) throw new Exception("{用户ID:$identity->user_id},订单ID:{$order['id']},". AddonsEnum::getAddonsNameMap($identity_desc) ."条件升级失败");
  93. $upgrade_user_ids[] = $identity->user_id;
  94. }
  95. }else{
  96. if($can_upgrade_level > $identity->level){
  97. $identity->level = $can_upgrade_level;
  98. $identity->upgrade_status = $upgrade_status;
  99. $identity->upgrade_level_at = time();
  100. if (!$identity->save()) throw new Exception("{用户ID:$identity->user_id},订单ID:{$order['id']},". AddonsEnum::getAddonsNameMap($identity_desc) ."条件升级失败");
  101. $upgrade_user_ids[] = $identity->user_id;
  102. }
  103. }
  104. // 记录升级日志
  105. if ($upgrade_log_obj !== null) {
  106. $upgrade_log_obj_clone = clone $upgrade_log_obj;
  107. $upgrade_log_obj_clone->mall_id = $mall_id;
  108. $upgrade_log_obj_clone->user_id = $identity->user_id;
  109. $upgrade_log_obj_clone->before_level = $identity->level;
  110. $upgrade_log_obj_clone->after_level = $can_upgrade_level;
  111. $upgrade_log_obj_clone->upgrade_type = LevelUpgradeLogEnum::CONDITION_UPGRADE;
  112. $upgrade_log_obj_clone->order_id = $order['id'];
  113. $upgrade_log_obj_clone->upgrade_condition = $identity_level_arr ?? [];
  114. $upgrade_log_obj_clone->save();
  115. }
  116. }
  117. }
  118. return $upgrade_user_ids;
  119. } catch (Exception $e) {
  120. $exception = FormatHelper::exception($e, AddonsEnum::getAddonsNameMap($identity_desc) . "条件升级失败");
  121. echo $exception;
  122. $this->setError($exception);
  123. Yii::error($exception);
  124. return false;
  125. }
  126. }
  127. /**
  128. * 购物升级执行 无用户等级
  129. * 样式:execute(AddonsEnum::ADDONS_NAME_BOSS, (new AddonsBoss()), $order);
  130. * @Author: lun
  131. * @DateTime: 2021/11/18 0018 16:56
  132. * @Copyright: copyright (c) 2021 广东七件事集团
  133. * @param $identity_desc - 用户身份描述
  134. * @param $identity_obj - 用户身份空对象
  135. * @return bool | array
  136. */
  137. public function executeNoLevel(string $identity_desc, object $identity_obj, array $order,$config)
  138. {
  139. try {
  140. //开启条件升级
  141. $mall_id = $order['mall_id'];
  142. $user_id = $order['user_id'];
  143. $upgrade_user_id_arr = UserPartitionRelationship::getParentIdArr($user_id);
  144. $upgrade_user_id_arr [] = $user_id;
  145. $upgrade_user_id_arr = array_reverse($upgrade_user_id_arr);
  146. $model_list = $identity_obj::find()->where(['user_id' => $upgrade_user_id_arr, 'status' => StatusEnum::ENABLED])->indexBy('user_id')->all();
  147. $model_arr = $upgrade_user_ids = [];
  148. foreach ($upgrade_user_id_arr as $id) {
  149. if (empty($model_list[$id])) {
  150. $model = new $identity_obj;
  151. $model->mall_id = $mall_id;
  152. $model->user_id = $id;
  153. $model_arr[] = $model;
  154. }
  155. }
  156. //获取升级配置
  157. foreach ($model_arr as $identity) {
  158. $flag = false;
  159. //开启条件升级
  160. if (!empty($config['upgrade_type_condition']) && !empty($config['is_auto_upgrade'])) {
  161. $res = UpgradeCondition::check($identity->user_id, $config, 0, $mall_id);
  162. if ($res) {
  163. $flag = true;
  164. }
  165. }
  166. if ($flag) {
  167. if (!$identity->save()) throw new Exception("{用户ID:$identity->user_id},订单ID:{$order['id']}," . AddonsEnum::getAddonsNameMap($identity_desc) . "条件升级失败");
  168. $upgrade_user_ids[] = $identity->user_id;
  169. }
  170. }
  171. return $upgrade_user_ids;
  172. } catch (Exception $e) {
  173. $exception = FormatHelper::exception($e, AddonsEnum::getAddonsNameMap($identity_desc) . "条件升级失败");
  174. echo $exception;
  175. $this->setError($exception);
  176. Yii::error($exception);
  177. return false;
  178. }
  179. }
  180. }