ConditionUpgrade.php 9.1 KB

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