| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- <?php
- namespace addons\Achievement\common\logic;
- use addons\Achievement\common\models\AchievementAwardLog;
- use addons\Achievement\common\models\AchievementGrantLog;
- use common\enums\StatusEnum;
- use common\models\user\UserPartitionRelationship;
- use common\models\user\UserRelationshipLog;
- /**
- * 修改关系链后,修正旧上级和新上级们的团队业绩
- *
- */
- class AchievementUserChangeRelationshipLogic
- {
- /**
- * 处理开始入口
- *
- * @param $mall_id
- * @param $user_id
- * @return true|void
- */
- public static function handle($mall_id, $user_id)
- {
- $t = \Yii::$app->db->beginTransaction();
- try {
- $user_relationship_log = UserRelationshipLog::find()->where(['user_id' => $user_id])->orderBy('id desc')->one();
- if (empty($user_relationship_log)) {
- return;
- }
- $grant = AchievementGrantLog::findOne(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'is_wait' => 0, 'is_create' => 0]);
- $new_parent_id = $user_relationship_log->after_id;//修改后的上级id
- $old_parent_id = $user_relationship_log->before_id;//修改前的上级id
- $old_parent_id_arr = UserPartitionRelationship::getParentIdArr($old_parent_id);
- $old_parent_id_arr[] = $old_parent_id;
- $old_parent_id_arr = array_reverse($old_parent_id_arr);
- $res = self::changeParentTeam($user_id, $grant);
- if ($res == false) {//修改关系链的会员不是团长,需要修改他的下级的上级团长id
- self::userNoTeamsChangeParentTeam($user_id, $grant, $old_parent_id_arr);
- }
- self::changeParentTeamByEmpty($grant['id']);
- $grant->award_proportion = json_decode($grant['award_proportion'], true);
- AchievementLogic::fixParentAchievement($grant, $old_parent_id);
- AchievementLogic::fixParentAchievement($grant, $new_parent_id);
- $grant['award_proportion'] = json_encode($grant['award_proportion']);
- AchievementOrderLogic::updateGrant($grant);
- $t->commit();
- return true;
- } catch (\Exception $e) {
- $t->rollBack();
- var_dump($e->getMessage() . $e->getFile() . $e->getLine());
- return true;
- }
- }
- /**
- * 修改关系链的会员不是团长,且有业绩,,修改后,需要修正他的上级团长id
- *
- * @param $user_id
- * @param $grant
- * @return bool
- */
- public static function changeParentTeam($user_id, $grant)
- {
- $award_log = AchievementAwardLog::getOne([
- ['user_id' => $user_id],
- ['grant_id' => $grant['id']],
- ['status' => StatusEnum::ENABLED],
- ]);
- if (empty($award_log)) {
- return false;
- }
- $award_log->parent_team = AchievementLogic::getParentAchievementUser($user_id);
- $award_log->save();
- return true;
- }
- /**
- * 修改关系链的会员不是团长,但是他的下级们是团长,且有业绩,而他的所有上级们有些是团长,修改后,需要修正他们的上级团长id
- *
- * @param $user_id
- * @param $grant
- * @param $old_parent_id_arr
- * @return array|void
- */
- public static function userNoTeamsChangeParentTeam($user_id, $grant, $old_parent_id_arr)
- {
- $grant_id = $grant['id'];
- $old_parent_achievement_award_log_list_sort = self::getParentAchievementAwardLogListSort($grant_id, $old_parent_id_arr);
- if (empty($old_parent_achievement_award_log_list_sort)) {
- return;
- }
- $old_parent_id = $old_parent_achievement_award_log_list_sort[0]['user_id'];
- $child_achievement_award_log_list = AchievementAwardLog::lists([
- 'where' => [
- ['parent_team' => $old_parent_id],
- ['grant_id' => $grant_id],
- ['status' => StatusEnum::ENABLED],
- ],
- ], false);
- if (empty($child_achievement_award_log_list)) {
- return;
- }
- foreach ($child_achievement_award_log_list as $k => $log) {
- $temp_parent_id_arr = UserPartitionRelationship::getParentIdArr($log->user_id);
- if (!in_array($user_id, $temp_parent_id_arr)) {
- unset($child_achievement_award_log_list[$k]);
- }
- }
- if (empty($child_achievement_award_log_list)) {
- return;
- }
- foreach ($child_achievement_award_log_list as $log) {
- $log->parent_team = AchievementLogic::getParentAchievementUser($log['user_id']);
- $log->save();
- }
- return;
- }
- /**
- * 修改前,修改关系链的会员不是团长,但是他的下级们是团长,且有业绩,而他的所有上级们都不是团长,修改后,需要修正他们的上级团长id
- * @param $grant_id
- * @return void
- */
- public static function changeParentTeamByEmpty($grant_id)
- {
- $achievement_award_log_list = AchievementAwardLog::lists([
- 'where' => [
- ['parent_team' => ''],
- ['grant_id' => $grant_id],
- ['status' => StatusEnum::ENABLED],
- ],
- ], false);
- if (empty($achievement_award_log_list)) {
- return;
- }
- foreach ($achievement_award_log_list as $log) {
- $log->parent_team = AchievementLogic::getParentAchievementUser($log['user_id']);
- $log->save();
- }
- return;
- }
- /**
- * @desc:获取父级团长业绩奖励记录,排序后
- *
- * @param $grant_id
- * @param $parent_id_arr
- * @return array
- */
- public static function getParentAchievementAwardLogListSort($grant_id, $parent_id_arr)
- {
- $achievement_award_log_list = AchievementAwardLog::lists([
- 'where' => [
- ['user_id' => $parent_id_arr],
- ['grant_id' => $grant_id],
- ['status' => StatusEnum::ENABLED],
- ],
- 'index' => 'user_id'
- ], false);
- if (empty($achievement_award_log_list)) {
- return []; //旧上级没有本周期的业绩奖励记录
- }
- $achievement_award_log_list_sort = [];
- foreach ($parent_id_arr as $pid) {
- if (isset($achievement_award_log_list[$pid])) {
- $achievement_award_log_list_sort[] = $achievement_award_log_list[$pid];
- }
- }
- return $achievement_award_log_list_sort;
- }
- }
|