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 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); } }