package com.ruoyi.app.service.impl; import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; 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.core.domain.AjaxResult; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanUtils; import org.apache.ibatis.builder.MapperBuilderAssistant; 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.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; /** * 家族成员Service业务层处理 * * @author Alex * @date 2020-09-29 */ @Service public class TbFamilyMemberServiceImpl extends ServiceImpl implements ITbFamilyMemberService { @Autowired private ITbAppUserService userService; @Autowired private ITbMemberMiddleService memberMiddleService; /** * 根据id获取成员 * @param memberId * @return */ @Override public AppMemberVo get(Long memberId) { return userService.getMember("member", memberId.toString(),""); } /** * 添加家族成员 * @param memberVo * @return */ @Override public boolean saveOrUpdate(AppMemberVo memberVo){ if (memberVo.getUserId()!=null && memberVo.getUserId().equals(memberVo.getSpouseUserId())) { return false; } if (StringUtils.isBlank(memberVo.getMobile())){ return false; } AppMemberVo member = userService.getMember("member",null,memberVo.getMobile()); if (member == null) { member = new AppMemberVo(); BeanUtils.copyBeanProp(member, memberVo); }else{ member.setStatus(memberVo.getStatus()); member.setName(memberVo.getName()); member.setBirthday(memberVo.getBirthday()); member.setGender(memberVo.getGender()); member.setSpouseUserId(memberVo.getSpouseUserId()); member.setState(memberVo.getState()); member.setFamilyId(memberVo.getFamilyId()); } if (StringUtils.isBlank(member.getNickName())) { member.setNickName(member.getName()); } if(!userService.saveOrUpdate(member)){ return false; } TbMemberMiddle memberMiddle = memberMiddleService.getOne(new LambdaQueryWrapper() .eq(TbMemberMiddle::getFamilyId, member.getFamilyId()) .eq(TbMemberMiddle::getMemberId, member.getMemberId()) .last("limit 1") ); //新增 if (memberMiddle == null) { TbMemberMiddle item = new TbMemberMiddle(); item.setFamilyId(member.getFamilyId()); item.setMemberId(member.getMemberId()); if (StringUtils.isNotBlank(memberVo.getStatus())) { item.setStatus(memberVo.getStatus()); } memberMiddleService.save(item); } else { memberMiddle.setStatus(memberVo.getStatus()); memberMiddleService.updateById(memberMiddle); } return true; } /** * 添加成员到家族树 * @param member * @return */ @Override public boolean saveFamilyTree(TbMemberMiddle member){ TbMemberMiddle middle = memberMiddleService.getOne(new LambdaQueryWrapper() .eq(TbMemberMiddle::getFamilyId,member.getFamilyId()) .eq(TbMemberMiddle::getMemberId,member.getMemberId()) .last("limit 1") ); if (member.getGeneration() != null) { middle.setGeneration(member.getGeneration()); } middle.setParentId(member.getParentId()); return memberMiddleService.updateById(middle); } /** * 逻辑删除多条成员 * @param ids * @return */ @Override public AjaxResult delMember(String familyId, Long[] ids){ List idList = Arrays.asList(ids); List middleList = memberMiddleService.list(new LambdaQueryWrapper() .eq(TbMemberMiddle::getFamilyId,familyId) .in(TbMemberMiddle::getMemberId, idList) ); if (middleList.size() <= 0){ return AjaxResult.error("删除失败,没有找到要删除的数据"); } AtomicInteger ck = new AtomicInteger(0); List mids = new ArrayList<>(); middleList.forEach(item -> { if (item.getParentId() != null) { ck.set(1); } mids.add(item.getId()); }); // 如果成员已加入家族树,则需要先从家族树删除,才能删除成员 if(ck.intValue() > 0) { return AjaxResult.error("删除失败,成员已加入家族树"); } if(!memberMiddleService.removeByIds(mids)) { return AjaxResult.error("删除失败"); } return AjaxResult.success(); } /** * 获取家族成员的详细信息 * @param familyId * @param memberId * @return */ @Override public AppMemberVo getMemberDetail(Long familyId, Long memberId) { TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class); List memberVos = baseMapper.selectFamilyTree(new LambdaQueryWrapper() .eq(AppMemberVo::getFamilyId,familyId) .eq(AppMemberVo::getMemberId,memberId) ); if (memberVos.size() > 0) { return memberVos.get(0); } return null; } @Override public List selectMemberList(LambdaQueryWrapper wrapper){ TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class); return baseMapper.selectFamilyTree(wrapper); } @Override public List selectFamilyTree(AppMemberVo memberVo) { TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); if (memberVo.getFamilyId() == null) { return new ArrayList<>(); } lqw.eq(AppMemberVo::getFamilyId, memberVo.getFamilyId()); lqw.isNotNull(AppMemberVo::getParentId); if (StringUtils.isNotBlank(memberVo.getSearchValue())) { lqw.and( i -> i.like(AppMemberVo::getName,memberVo.getSearchValue()).or() .like(AppMemberVo::getMobile,memberVo.getSearchValue()) ); } if (memberVo.getGeneration() != null) { // 按第几代排序 升序 lqw.orderByAsc(AppMemberVo::getGeneration); } return baseMapper.selectFamilyTree(lqw); } @Override public List myMemberList(LambdaQueryWrapper lqw){ TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class); return baseMapper.selectFamilyMember(lqw); } @Override public List selectFamilyMember(AppMemberVo memberVo) { TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); if (memberVo.getFamilyId() == null) { return new ArrayList<>(); } lqw.eq(AppMemberVo::getFamilyId, memberVo.getFamilyId()); lqw.eq(AppMemberVo::getStatus,"2"); if (StringUtils.isNotBlank(memberVo.getSearchValue())) { lqw.and( i -> i.like(AppMemberVo::getName,memberVo.getSearchValue()).or() .like(AppMemberVo::getMobile,memberVo.getSearchValue()) ); } return baseMapper.selectFamilyMember(lqw); } @Override public List selectMemberNotTree(AppMemberVo memberVo) { TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); if (memberVo.getFamilyId() == null) { return new ArrayList<>(); } lqw.eq(AppMemberVo::getFamilyId, memberVo.getFamilyId()); lqw.eq(AppMemberVo::getState, "2"); // 已通过 lqw.isNull(AppMemberVo::getParentId); if (StringUtils.isNotBlank(memberVo.getSearchValue())) { lqw.and( i -> i.like(AppMemberVo::getName,memberVo.getSearchValue()).or() .like(AppMemberVo::getMobile,memberVo.getSearchValue()) ); } return baseMapper.selectFamilyMember(lqw); } @Override public List selectMemberInTree(AppMemberVo memberVo) { TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); if (memberVo.getFamilyId() == null) { return new ArrayList<>(); } lqw.eq(AppMemberVo::getFamilyId, memberVo.getFamilyId()); lqw.isNotNull(AppMemberVo::getParentId); if (StringUtils.isNotBlank(memberVo.getSearchValue())) { lqw.and( i -> i.like(AppMemberVo::getName,memberVo.getSearchValue()).or() .like(AppMemberVo::getMobile,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; } @Override public AjaxResult delToTree(Long memberId, Long familyId) { if (memberId == null || familyId ==null) { return AjaxResult.error("参数不能为空"); } TbMemberMiddle middle = memberMiddleService.getOne(new LambdaQueryWrapper() .eq(TbMemberMiddle::getFamilyId,familyId) .eq(TbMemberMiddle::getMemberId,memberId) .last("limit 1") ); if (middle == null) { return AjaxResult.error("删除失败"); } if (middle.getParentId() == null) { return AjaxResult.error("该成员没有在家族树中"); } // 设置parentId为空 middle.setParentId(null); if(!memberMiddleService.updateById(middle)){ return AjaxResult.error("删除失败"); } return AjaxResult.success("删除成功"); } }