123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- 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<TbFamilyMemberMapper, TbFamilyMember> 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<TbMemberMiddle>()
- .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<TbMemberMiddle>()
- .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<Long> idList = Arrays.asList(ids);
- List<TbMemberMiddle> middleList = memberMiddleService.list(new LambdaQueryWrapper<TbMemberMiddle>()
- .eq(TbMemberMiddle::getFamilyId,familyId)
- .in(TbMemberMiddle::getMemberId, idList)
- );
- if (middleList.size() <= 0){
- return AjaxResult.error("删除失败,没有找到要删除的数据");
- }
- AtomicInteger ck = new AtomicInteger(0);
- List<Long> 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<AppMemberVo> memberVos = baseMapper.selectFamilyTree(new LambdaQueryWrapper<AppMemberVo>()
- .eq(AppMemberVo::getFamilyId,familyId)
- .eq(AppMemberVo::getMemberId,memberId)
- );
- if (memberVos.size() > 0) {
- return memberVos.get(0);
- }
- return null;
- }
- @Override
- public List<AppMemberVo> selectMemberList(LambdaQueryWrapper wrapper){
- TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class);
- return baseMapper.selectFamilyTree(wrapper);
- }
- @Override
- public List<AppMemberVo> selectFamilyTree(AppMemberVo memberVo) {
- TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class);
- LambdaQueryWrapper<AppMemberVo> 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<AppMemberVo> myMemberList(LambdaQueryWrapper<AppMemberVo> lqw){
- TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class);
- return baseMapper.selectFamilyMember(lqw);
- }
- @Override
- public List<AppMemberVo> selectFamilyMember(AppMemberVo memberVo) {
- TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class);
- LambdaQueryWrapper<AppMemberVo> 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<AppMemberVo> selectMemberNotTree(AppMemberVo memberVo) {
- TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class);
- LambdaQueryWrapper<AppMemberVo> 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<AppMemberVo> selectMemberInTree(AppMemberVo memberVo) {
- TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), AppMemberVo.class);
- LambdaQueryWrapper<AppMemberVo> 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<TbMemberMiddle> allList(Long familyId){
- List<TbMemberMiddle> list = memberMiddleService.selectApplyMember(new LambdaQueryWrapper<TbMemberMiddle>()
- .eq(TbMemberMiddle::getFamilyId,familyId)
- .eq(TbMemberMiddle::getStatus,"2")
- );
- return list;
- }
- /**
- * 获取节点为0的父成员
- * @param familyId
- * @return
- */
- private TbMemberMiddle zeroParent(Long familyId){
- return memberMiddleService.getOne(new LambdaQueryWrapper<TbMemberMiddle>()
- .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<TbMemberMiddle> list) {
- List<TbMemberMiddle> 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<TbMemberMiddle>()
- .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("删除成功");
- }
- }
|