package com.sinata.modular.member.service.impl;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
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 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>
|
* 会员邀请关系 服务实现类
|
* </p>
|
*
|
* @author goku
|
* @since 2023-03-23
|
*/
|
@Service
|
public class MemUserRelationServiceImpl extends ServiceImpl<MemUserRelationMapper, MemUserRelation> implements IMemUserRelationService {
|
|
@Resource
|
private IMemUserService memUserService;
|
|
@Override
|
public Integer getParentIdCount(Integer parentId) {
|
Wrapper<MemUserRelation> wrapper = new EntityWrapper<MemUserRelation>().eq("parent_id", parentId);
|
return baseMapper.selectCount(wrapper);
|
}
|
|
@Override
|
public List<Map<String, Object>> getListParentIdCount(List<Map<String, Object>> list, String userKey) {
|
Object[] idArray = list.stream().map(o -> o.get(userKey)).collect(Collectors.toList()).toArray();
|
|
Wrapper<MemUserRelation> wrapper = new EntityWrapper<MemUserRelation>()
|
.setSqlSelect("parent_id, count(1) count")
|
.groupBy("parent_id")
|
.in("parent_id", idArray);
|
return baseMapper.selectMaps(wrapper);
|
}
|
|
@Override
|
public List<Map<String, Object>> getListParentGradeIdCount(List<Map<String, Object>> list, String userKey, Integer memberGradeId) {
|
Object[] idArray = new Object[]{0};
|
if (list != null && list.size() > 0) {
|
idArray = list.stream().map(o -> o.get(userKey)).collect(Collectors.toList()).toArray();
|
}
|
return baseMapper.getListParentGradeIdCount(idArray, memberGradeId);
|
}
|
|
@Override
|
public MemUser getParentUserById(Integer userId) {
|
return baseMapper.getParentUserById(userId);
|
}
|
|
@Override
|
public Integer countTeamMemberBy(Integer memberId, Integer gradeId, Integer aboveId) {
|
return baseMapper.countTeamMemberBy(memberId, gradeId, aboveId);
|
}
|
|
@Override
|
public List<Map<String, Object>> myTeam(Integer userId, List<Integer> gradeList, String showId, String beginTime, String endTime) {
|
return baseMapper.myTeam(userId, gradeList, showId, beginTime, endTime);
|
}
|
|
@Override
|
public List<Map<String, Object>> myTeam(Page<Map<String, Object>> page, Integer userId, List<Integer> gradeList, String showId, String beginTime, String endTime) {
|
if (page != null) {
|
return baseMapper.myTeam(page, userId, gradeList, showId, beginTime, endTime);
|
}
|
return baseMapper.myTeam(userId, gradeList, showId, beginTime, endTime);
|
}
|
|
@Override
|
public int myTeamCount(Integer userId, List<Integer> gradeList, String showId, String beginTime, String endTime) {
|
return baseMapper.myTeamCount(userId, gradeList, showId, beginTime, endTime);
|
}
|
|
@Override
|
public List<Map<String, Object>> wrapperUserRelation(List<Map<String, Object>> list, String userKey) {
|
if (CollectionUtils.isEmpty(list)) {
|
return null;
|
}
|
// 用户ID串
|
List<Integer> userIds = list.stream().map(o -> Integer.parseInt(o.get(userKey).toString())).collect(Collectors.toList());
|
// 用户列表
|
List<Map<String, Object>> merchantList = baseMapper.getMemUserRelationByUserIds(userIds);
|
if (CollectionUtils.isNotEmpty(merchantList)) {
|
// 封装数据
|
for (Map<String, Object> map : list) {
|
for (Map<String, Object> u : merchantList) {
|
if (u.get("id").toString().equals(map.get(userKey) + "")) {
|
map.put(userKey + "_parentId", u.get("parentId"));
|
map.put(userKey + "_nickName", u.get("nickName"));
|
}
|
}
|
}
|
}
|
|
return null;
|
}
|
|
|
@Override
|
public MemUser[] getParentV4V5ByRelationPath(List<MemUser> v4UserList, List<MemUser> v5UserList, String relationPath, Integer memberGradeId) {
|
MemUser[] array = new MemUser[]{null, null};
|
|
if (v4UserList == null) {
|
v4UserList = memUserService.getUserListByGrade(EnumMemberGrade.G_4.index);
|
}
|
if (v5UserList == null) {
|
v5UserList = memUserService.getUserListByGrade(EnumMemberGrade.G_5.index);
|
}
|
|
if (relationPath != null) {
|
String[] pathArray = relationPath.split("/");
|
for (String p : pathArray) {
|
if (memberGradeId == null || memberGradeId < EnumMemberGrade.G_4.index) {
|
// 首先获取v4
|
for (MemUser v4 : v4UserList) {
|
if (v4.getId().toString().equals(p)) {
|
array[0] = v4;
|
break;
|
}
|
}
|
}
|
if (memberGradeId == null || memberGradeId < EnumMemberGrade.G_5.index) {
|
// 获取v5
|
for (MemUser v5 : v5UserList) {
|
if (v5.getId().toString().equals(p)) {
|
array[1] = v5;
|
break;
|
}
|
}
|
}
|
}
|
}
|
return array;
|
}
|
@Override
|
public MemUser[] getParentV4V5ByRelationPath2(String relationPath, Integer memberGradeId) {
|
MemUser[] array = new MemUser[]{null, null};
|
if (relationPath != null) {
|
String[] pathArray = relationPath.split("/");
|
String parentId = pathArray[pathArray.length - 2];
|
MemUser parentUser = memUserService.selectById(parentId);
|
findParents(parentUser, pathArray, array);
|
}
|
return array;
|
}
|
|
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);
|
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] = parent;
|
String parentId = pathArray[pathArray.length - 3];
|
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] = 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);
|
}
|
|
}
|