package com.ruoyi.app.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.app.domain.TbMemberMiddle; import com.ruoyi.app.domain.vo.AppMemberVo; import com.ruoyi.app.service.ITbAppUserService; import com.ruoyi.app.service.ITbMemberMiddleService; import com.ruoyi.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.app.mapper.TbFamilyMemberMapper; import com.ruoyi.app.domain.TbFamilyMember; import com.ruoyi.app.service.ITbFamilyMemberService; import java.util.ArrayList; import java.util.List; /** * 家族成员Service业务层处理 * * @author Alex * @date 2020-09-29 */ @Service public class TbFamilyMemberServiceImpl extends ServiceImpl implements ITbFamilyMemberService { @Autowired private ITbAppUserService userService; @Autowired private ITbMemberMiddleService memberMiddleService; /** * 添加家族成员 * @param memberVo * @return */ @Override public boolean saveOrUpdate(AppMemberVo memberVo){ if(!userService.saveOrUpdate(memberVo)){ return false; } TbMemberMiddle memberMiddle = memberMiddleService.getOne(new LambdaQueryWrapper() .eq(TbMemberMiddle::getFamilyId, memberVo.getFamilyId()) .eq(TbMemberMiddle::getMemberId, memberVo.getMemberId()) ); //新增 if (memberMiddle == null) { TbMemberMiddle item = new TbMemberMiddle(); item.setFamilyId(memberVo.getFamilyId()); item.setMemberId(memberVo.getMemberId()); memberMiddleService.save(item); } return true; } @Override public List selectFamilyMember(AppMemberVo memberVo) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); if (memberVo.getFamilyId() == null) { return new ArrayList<>(); } lqw.eq(AppMemberVo::getFamilyId, memberVo.getFamilyId()); if (StringUtils.isNotBlank(memberVo.getSearchValue())) { lqw.like(AppMemberVo::getName,memberVo.getSearchValue()).or() .like(AppMemberVo::getNickName,memberVo.getSearchValue()).or() .like(AppMemberVo::getMobile,memberVo.getSearchValue()).or() .like(AppMemberVo::getQrcode,memberVo.getSearchValue()); } return baseMapper.selectFamilyMember(lqw); } @Override public TbMemberMiddle getFamilyTree(Long familyId){ return getChildNode(zeroParent(familyId),allList(familyId)); } /** * 获取所有的成员 * @param familyId * @return */ private List allList(Long familyId){ List list = memberMiddleService.selectApplyMember(new LambdaQueryWrapper() .eq(TbMemberMiddle::getFamilyId,familyId) .eq(TbMemberMiddle::getStatus,"2") ); return list; } /** * 获取节点为0的父成员 * @param familyId * @return */ private TbMemberMiddle zeroParent(Long familyId){ return memberMiddleService.getOne(new LambdaQueryWrapper() .eq(TbMemberMiddle::getFamilyId,familyId) .eq(TbMemberMiddle::getStatus,"2") .eq(TbMemberMiddle::getParentId, 0).last("limit 1") ); } /** * 递归获取家族树 * @param middle 父成员 * @param list 所有的成员 * @return */ private TbMemberMiddle getChildNode(TbMemberMiddle middle,List list) { List childList = new ArrayList<>(); list.forEach(item -> { if(middle.getId().equals(item.getParentId())){ childList.add(item); } }); middle.setChild(childList); for (TbMemberMiddle item : childList) { getChildNode(item,list); } return middle; } }