mitao
2024-07-08 022a7ff7abf82cd2546e18071ade5228b4e2339f
meiya-admin/src/main/java/com/sinata/modular/member/service/impl/MemUserRelationServiceImpl.java
@@ -4,19 +4,21 @@
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>
@@ -158,31 +160,103 @@
        }
        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);
    }
}