package cc.mrbird.febs.dapp.service.impl;
|
|
import cc.mrbird.febs.common.tree.MatrixTree;
|
import cc.mrbird.febs.common.tree.MemberNode;
|
import cc.mrbird.febs.dapp.entity.DappMemberEntity;
|
import cc.mrbird.febs.dapp.entity.MatrixTreeNode;
|
import cc.mrbird.febs.dapp.mapper.DappMemberDao;
|
import cc.mrbird.febs.dapp.mapper.MatrixTreeNodeMapper;
|
import cc.mrbird.febs.dapp.service.IMatrixTreeNodeService;
|
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class MatrixTreeNodeServiceImpl extends ServiceImpl<MatrixTreeNodeMapper, MatrixTreeNode> implements IMatrixTreeNodeService {
|
|
private final DappMemberDao mallMemberMapper;
|
private final MatrixTreeNodeMapper matrixTreeNodeMapper;
|
|
@Override
|
public MemberNode addTreeNode(Long memberId) {
|
DappMemberEntity mallMember = mallMemberMapper.selectById(memberId);
|
if (mallMember == null) {
|
return null;
|
}
|
|
MatrixTree instance = MatrixTree.getInstance();
|
MemberNode node = instance.getNode(memberId);
|
//节点存在则直接返回
|
if (node != null) {
|
return null;
|
}
|
//未找到节点
|
if (StrUtil.isNotBlank(mallMember.getRefererId())) {
|
//返回直推上级所在节点
|
MemberNode parentNode = instance.getNode(mallMember.getRefererId());
|
|
MemberNode notWholeNode = null;
|
if (parentNode != null) {
|
Long parentNodeMemberId = parentNode.getMemberId();
|
MatrixTreeNode matrixTreeNode = matrixTreeNodeMapper.selectByParentNodeAndType(parentNodeMemberId,mallMember.getNodeType());
|
if(ObjectUtil.isNotEmpty(matrixTreeNode)){
|
//直推上级的第一代子节点
|
MemberNode nodeParentChild = instance.getNode(matrixTreeNode.getTreeNode());
|
notWholeNode = instance.findNotWholeNode(nodeParentChild);
|
}else{
|
notWholeNode = instance.findNotWholeNode(parentNode);
|
}
|
} else {
|
notWholeNode = instance.findNotWholeNode();
|
}
|
|
MatrixTreeNode treeNode = new MatrixTreeNode();
|
treeNode.setTreeNode(mallMember.getId());
|
treeNode.setParentNode(notWholeNode.getMemberId());
|
treeNode.setType(mallMember.getNodeType());
|
matrixTreeNodeMapper.insert(treeNode);
|
} else {
|
MatrixTreeNode treeNode = new MatrixTreeNode();
|
treeNode.setTreeNode(mallMember.getId());
|
treeNode.setType(0);
|
matrixTreeNodeMapper.insert(treeNode);
|
}
|
MatrixTreeNode matrixTreeNode = matrixTreeNodeMapper.selectByTreeNode(memberId);
|
DappMemberEntity dappMemberEntity = mallMemberMapper.selectById(matrixTreeNode.getParentNode());
|
node = new MemberNode();
|
node.setMemberId(memberId);
|
node.setInviteId(mallMember.getInviteId());
|
node.setRefererId(dappMemberEntity.getInviteId());
|
node.setType(mallMember.getNodeType());
|
return instance.addNode(node);
|
}
|
}
|