| | |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.google.common.collect.Lists; |
| | | import com.sinata.common.enums.EnumMemberGrade; |
| | | import com.sinata.modular.member.dao.MemUserRelationMapper; |
| | | import com.sinata.modular.member.model.MemUser; |
| | | import com.sinata.modular.member.model.MemUserRelation; |
| | | import com.sinata.modular.member.service.IMemUserRelationService; |
| | | import com.sinata.modular.member.service.IMemUserService; |
| | | import org.apache.commons.collections.CollectionUtils; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | import javax.annotation.Resource; |
| | | import org.apache.commons.collections.CollectionUtils; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | } |
| | | return array; |
| | | } |
| | | private void findParents(MemUser user, String[] pathArray, MemUser[] array) { |
| | | if (user != null) { |
| | | Integer memberGradeId = user.getMemberGradeId(); |
| | | |
| | | private void findParents(MemUser parent, String[] pathArray, MemUser[] array) { |
| | | if (parent != null) { |
| | | List<MemUser> memUserList = memUserService.selectList(null); |
| | | Integer memberGradeId = parent.getMemberGradeId(); |
| | | if (memberGradeId == EnumMemberGrade.G_3.index) { |
| | | String grandParentId = pathArray[pathArray.length - 3]; |
| | | MemUser grandParent = memUserService.selectById(grandParentId); |
| | | if (grandParent != null && grandParent.getMemberGradeId() == EnumMemberGrade.G_4.index) { |
| | | array[0] = grandParent; |
| | | String greatGrandParentId = pathArray[pathArray.length - 3]; |
| | | MemUser greatGrandParent = memUserService.selectById(greatGrandParentId); |
| | | if (greatGrandParent != null && greatGrandParent.getMemberGradeId() == EnumMemberGrade.G_5.index) { |
| | | array[1] = greatGrandParent; |
| | | } |
| | | } |
| | | memUserList.stream().filter(u -> u.getId().equals(Integer.valueOf(grandParentId))) |
| | | .findFirst().ifPresent(p -> { |
| | | if (grandParent.getMemberGradeId() == EnumMemberGrade.G_4.index) { |
| | | array[0] = grandParent; |
| | | String greatGrandParentId = pathArray[pathArray.length - 3]; |
| | | MemUser greatGrandParent = memUserService.selectById(greatGrandParentId); |
| | | if (greatGrandParent != null && greatGrandParent.getMemberGradeId() |
| | | == EnumMemberGrade.G_5.index) { |
| | | array[1] = greatGrandParent; |
| | | } |
| | | } |
| | | }); |
| | | |
| | | } else if (memberGradeId == EnumMemberGrade.G_4.index) { |
| | | array[0] = user; |
| | | array[0] = parent; |
| | | String parentId = pathArray[pathArray.length - 3]; |
| | | MemUser parent = memUserService.selectById(parentId); |
| | | if (parent != null && parent.getMemberGradeId() == EnumMemberGrade.G_5.index) { |
| | | array[1] = parent; |
| | | MemUser grandParent = memUserService.selectById(parentId); |
| | | if (grandParent != null |
| | | && grandParent.getMemberGradeId() == EnumMemberGrade.G_5.index) { |
| | | array[1] = grandParent; |
| | | } |
| | | } else if (memberGradeId == EnumMemberGrade.G_5.index) { |
| | | array[0] = user; |
| | | array[1] = user; |
| | | array[0] = parent; |
| | | array[1] = parent; |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public MemUser[] getParentV4V5ByRelationPath3(Integer id, |
| | | Map<Integer, Integer> userRelationMap) { |
| | | MemUser[] array = new MemUser[]{null, null}; |
| | | MemUser memUser = memUserService.selectById(id); |
| | | List<MemUser> userList = memUserService.selectList(new EntityWrapper<MemUser>() |
| | | .setSqlSelect("id, show_id, nick_name, real_name, member_grade_id") |
| | | .in("member_grade_id", |
| | | Lists.newArrayList(EnumMemberGrade.G_3.index, EnumMemberGrade.G_4.index, |
| | | EnumMemberGrade.G_5.index))); |
| | | Map<Integer, MemUser> userMap = userList.stream() |
| | | .collect(Collectors.toMap(u -> u.getId(), Function.identity())); |
| | | Integer parentId = userRelationMap.get(id); |
| | | if (memUser.getMemberGradeId() == EnumMemberGrade.G_5.index) { |
| | | array[0] = memUser; |
| | | array[1] = memUser; |
| | | } |
| | | MemUser memUserG5 = getUserByParentId(parentId, EnumMemberGrade.G_5.index, userMap, |
| | | userRelationMap); |
| | | if (memUser.getMemberGradeId() == EnumMemberGrade.G_4.index) { |
| | | array[0] = memUser; |
| | | array[1] = memUserG5; |
| | | } |
| | | if (memUser.getMemberGradeId() == EnumMemberGrade.G_3.index) { |
| | | MemUser memUserG4 = getUserByParentId(parentId, EnumMemberGrade.G_4.index, userMap, |
| | | userRelationMap); |
| | | if (Objects.isNull(memUserG4)) { |
| | | array[0] = memUserG5; |
| | | array[1] = memUserG5; |
| | | } else { |
| | | array[0] = memUserG4; |
| | | array[1] = memUserG5; |
| | | } |
| | | } |
| | | return array; |
| | | } |
| | | |
| | | /** |
| | | * @param parentId 父id |
| | | * @param level 需要获取职级 |
| | | * @param userMap 用户列表 |
| | | * @param userRelationMap 用户关系列表 |
| | | * @return |
| | | */ |
| | | private MemUser getUserByParentId(Integer parentId, Integer level, |
| | | Map<Integer, MemUser> userMap, |
| | | Map<Integer, Integer> userRelationMap) { |
| | | MemUser memUser = userMap.get(parentId); |
| | | if (memUser == null) { |
| | | return null; |
| | | } |
| | | if (memUser.getMemberGradeId().equals(level)) { |
| | | return memUser; |
| | | } |
| | | |
| | | Integer nextParentId = userRelationMap.get(memUser.getId()); |
| | | if (nextParentId == null || nextParentId.equals(parentId)) { |
| | | return null; // 如果 nextParentId 是 null 或导致循环,返回 null 终止递归 |
| | | } |
| | | |
| | | return getUserByParentId(nextParentId, level, userMap, userRelationMap); |
| | | } |
| | | |
| | | } |