From 85cf42314fc04a637f1a44e78c1e476a445bf0f3 Mon Sep 17 00:00:00 2001 From: 101captain <237651143@qq.com> Date: 星期一, 14 三月 2022 13:29:18 +0800 Subject: [PATCH] Merge branch 'dev' --- springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComFmsTeamMemberServiceImpl.java | 378 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 378 insertions(+), 0 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComFmsTeamMemberServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComFmsTeamMemberServiceImpl.java new file mode 100644 index 0000000..611775f --- /dev/null +++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComFmsTeamMemberServiceImpl.java @@ -0,0 +1,378 @@ +package com.panzhihua.service_community.service.impl; + +import static java.util.Objects.isNull; +import static java.util.Objects.nonNull; +import static org.apache.commons.lang3.StringUtils.isNotBlank; +import static org.apache.commons.lang3.StringUtils.isNotEmpty; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.annotation.Resource; + +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.alibaba.fastjson.JSONArray; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; +import com.panzhihua.common.model.dtos.community.fms.AddTeamMemberDTO; +import com.panzhihua.common.model.dtos.community.fms.DeleteTeamMemberDTO; +import com.panzhihua.common.model.dtos.community.fms.EditTeamMemberDTO; +import com.panzhihua.common.model.dtos.community.fms.PageTeamMemberDTO; +import com.panzhihua.common.model.vos.R; +import com.panzhihua.common.model.vos.community.fms.CascadeCommVO; +import com.panzhihua.common.model.vos.community.fms.ComFmsTeamMemberExportExcelVO; +import com.panzhihua.common.model.vos.community.fms.ComFmsTeamMemberImportExcelVO; +import com.panzhihua.common.model.vos.community.fms.ComFmsTeamMemberImportMistakeExcelVO; +import com.panzhihua.common.model.vos.community.fms.ComFmsTeamMemberVO; +import com.panzhihua.common.service.user.UserService; +import com.panzhihua.service_community.dao.ComFmsTeamDAO; +import com.panzhihua.service_community.dao.ComFmsTeamMemberDAO; +import com.panzhihua.service_community.dao.ComFmsTeamMemberRelationDAO; +import com.panzhihua.service_community.dao.ComFmsTeamTypeDAO; +import com.panzhihua.service_community.entity.ComFmsTeam; +import com.panzhihua.service_community.entity.ComFmsTeamMember; +import com.panzhihua.service_community.entity.ComFmsTeamMemberRelation; +import com.panzhihua.service_community.entity.ComFmsTeamType; +import com.panzhihua.service_community.service.ComFmsTeamMemberService; + +import cn.hutool.core.util.IdcardUtil; + +/** + * 五微服务-团队成员(ComFmsTeamMember)表服务实现类 + * + * @author makejava + * @since 2022-02-11 13:35:56 + */ +@Service("comFmsTeamMemberService") +public class ComFmsTeamMemberServiceImpl extends ServiceImpl<ComFmsTeamMemberDAO, ComFmsTeamMember> + implements ComFmsTeamMemberService { + + @Resource + private ComFmsTeamDAO comFmsTeamDAO; + @Resource + private ComFmsTeamMemberRelationDAO comFmsTeamMemberRelationDAO; + @Resource + private ComFmsTeamTypeDAO comFmsTeamTypeDAO; + @Resource + private UserService userService; + + /** + * 新增团队成员 + * @param addTeamMemberDTO + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R addFmsTeamMember(AddTeamMemberDTO addTeamMemberDTO) { + String idCard = addTeamMemberDTO.getIdCard(); + if (isNotBlank(idCard) && !IdcardUtil.isValidCard(idCard)) { + return R.fail("身份证号码有误"); + } + List<Long> teamIds = addTeamMemberDTO.getTeamIds(); + List<ComFmsTeam> comFmsTeam = comFmsTeamDAO.selectBatchIds(teamIds); + if (comFmsTeam.size() != teamIds.size() || comFmsTeam.stream().anyMatch(e -> !e.getCommunityId().equals(addTeamMemberDTO.getCommunityId()))) { + return R.fail("团队id有误"); + } + Integer countMember = this.baseMapper.countMember(addTeamMemberDTO.getCommunityId(), + addTeamMemberDTO.getIdCard(), addTeamMemberDTO.getPhone()); + if (countMember > 0) { + return R.fail("团队成员已存在,如需添加团队关系,请编辑该成员"); + } + ComFmsTeamMember comFmsTeamMember = new ComFmsTeamMember(); + BeanUtils.copyProperties(addTeamMemberDTO, comFmsTeamMember); + if (isNotBlank(idCard)) { + comFmsTeamMember.setGender(IdcardUtil.getGenderByIdCard(idCard) == 1 ? 1 : 2); + } + this.baseMapper.insert(comFmsTeamMember); + Long memberId = comFmsTeamMember.getId(); + if (nonNull(memberId)) { + List<ComFmsTeamMemberRelation> teamMemberRelations = new ArrayList<>(); + List<List<Long>> cascadeIds = new ArrayList<>(); + teamIds.forEach(e -> { + Long teamType = comFmsTeam.stream().filter(team -> team.getId().equals(e)).collect(Collectors.toList()).get(0).getTeamType(); + ComFmsTeamMemberRelation teamMemberRelation = new ComFmsTeamMemberRelation(); + teamMemberRelation.setTeamId(e); + teamMemberRelation.setMemberId(memberId); + teamMemberRelations.add(teamMemberRelation); + cascadeIds.add(Arrays.asList(teamType, e)); + }); + int num = comFmsTeamMemberRelationDAO.insertBatch(teamMemberRelations); + if (num > 0) { + comFmsTeamMember.setCascadeIds(cascadeIds.toString()); + this.baseMapper.updateById(comFmsTeamMember); + return R.ok(); + } + } + return R.fail("新增失败,请重新尝试"); + } + + /** + * 编辑团队成员 + * @param editTeamMemberDTO + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R editFmsTeamMember(EditTeamMemberDTO editTeamMemberDTO) { + String idCard = editTeamMemberDTO.getIdCard(); + if (isNotBlank(idCard) && !IdcardUtil.isValidCard(idCard)) { + return R.fail("身份证号码有误"); + } + List<Long> teamIds = editTeamMemberDTO.getTeamIds(); + List<ComFmsTeam> comFmsTeam = comFmsTeamDAO.selectBatchIds(teamIds); + if (comFmsTeam.size() != teamIds.size() || comFmsTeam.stream().anyMatch(e -> !e.getCommunityId().equals(editTeamMemberDTO.getCommunityId()))) { + return R.fail("团队id有误"); + } + ComFmsTeamMember comFmsTeamMember = this.baseMapper.selectById(editTeamMemberDTO.getId()); + if (isNull(comFmsTeamMember)) { + return R.fail("团队成员不存在"); + } + Integer countMember = 0; + if (!comFmsTeamMember.getPhone().equals(editTeamMemberDTO.getPhone())) { + countMember = this.baseMapper.selectCount(new LambdaQueryWrapper<ComFmsTeamMember>() + .eq(ComFmsTeamMember::getCommunityId, editTeamMemberDTO.getCommunityId()) + .eq(ComFmsTeamMember::getPhone, editTeamMemberDTO.getPhone())); + } + if (isNotBlank(idCard) && !idCard.equals(comFmsTeamMember.getIdCard())) { + countMember = this.baseMapper.selectCount(new LambdaQueryWrapper<ComFmsTeamMember>() + .eq(ComFmsTeamMember::getCommunityId, editTeamMemberDTO.getCommunityId()) + .eq(ComFmsTeamMember::getIdCard, editTeamMemberDTO.getIdCard())); + } + if (countMember > 0) { + return R.fail("该手机号或身份证号已存在团队成员"); + } + BeanUtils.copyProperties(editTeamMemberDTO, comFmsTeamMember); + if (isNotBlank(idCard)) { + comFmsTeamMember.setGender(IdcardUtil.getGenderByIdCard(idCard) == 1 ? 1 : 2); + } + comFmsTeamMemberRelationDAO.delete(new LambdaQueryWrapper<ComFmsTeamMemberRelation>() + .eq(ComFmsTeamMemberRelation::getMemberId, editTeamMemberDTO.getId())); + List<ComFmsTeamMemberRelation> teamMemberRelations = new ArrayList<>(); + List<List<Long>> cascadeIds = new ArrayList<>(); + teamIds.forEach(e -> { + Long teamType = comFmsTeam.stream().filter(team -> team.getId().equals(e)).collect(Collectors.toList()).get(0).getTeamType(); + ComFmsTeamMemberRelation teamMemberRelation = new ComFmsTeamMemberRelation(); + teamMemberRelation.setTeamId(e); + teamMemberRelation.setMemberId(editTeamMemberDTO.getId()); + teamMemberRelations.add(teamMemberRelation); + cascadeIds.add(Arrays.asList(teamType, e)); + }); + comFmsTeamMemberRelationDAO.insertBatch(teamMemberRelations); + comFmsTeamMember.setCascadeIds(cascadeIds.toString()); + int num = this.baseMapper.updateById(comFmsTeamMember); + if (num > 0) { + return R.ok(); + } + return R.fail("编辑失败,请重新尝试"); + } + + /** + * 删除团队成员 + * @param deleteTeamMemberDTO + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R deleteFmsTeamMember(DeleteTeamMemberDTO deleteTeamMemberDTO) { + ComFmsTeamMember comFmsTeamMember = this.baseMapper.selectById(deleteTeamMemberDTO.getId()); + if (isNull(comFmsTeamMember)) { + return R.fail("资源不存在"); + } + if (!comFmsTeamMember.getCommunityId().equals(deleteTeamMemberDTO.getCommunityId())) { + return R.fail("非本社区工作人员"); + } + Integer count = comFmsTeamMemberRelationDAO.selectCount(new LambdaQueryWrapper<ComFmsTeamMemberRelation>() + .eq(ComFmsTeamMemberRelation::getMemberId, deleteTeamMemberDTO.getId())); + int num = comFmsTeamMemberRelationDAO.delete(new LambdaQueryWrapper<ComFmsTeamMemberRelation>() + .eq(ComFmsTeamMemberRelation::getMemberId, deleteTeamMemberDTO.getId()).eq(ComFmsTeamMemberRelation::getTeamId, deleteTeamMemberDTO.getTeamId())); + if (num > 0) { + if (count == 1) { + //只存在一个团队中直接删除 + this.baseMapper.deleteById(deleteTeamMemberDTO.getId()); + // 删除用户信息缓存 + userService.deleteUserCashByPhone(comFmsTeamMember.getPhone()); + } else { + //存在多个团队中,删除与该团队关联 + ComFmsTeam fmsTeam = comFmsTeamDAO.selectById(deleteTeamMemberDTO.getTeamId()); + String cascadeIds = comFmsTeamMember.getCascadeIds(); + List<List> lists = JSONArray.parseArray(cascadeIds, List.class); + List<List> collect = lists.stream().filter(e -> !e.toString().equals(Arrays.asList(fmsTeam.getTeamType(), fmsTeam.getId()).toString())).collect(Collectors.toList()); + comFmsTeamMember.setCascadeIds(collect.toString()); + this.baseMapper.updateById(comFmsTeamMember); + } + return R.ok(); + } + return R.fail("删除失败,请重新尝试"); + } + + /** + * 分页查询团队成员 + * @param pageTeamMemberDTO + * @return + */ + @Override + public R pageFmsTeamMember(PageTeamMemberDTO pageTeamMemberDTO) { + Page page = new Page<>(); + page.setSize(pageTeamMemberDTO.getPageSize()); + page.setCurrent(pageTeamMemberDTO.getPageNum()); + IPage<ComFmsTeamMemberVO> memberVOIPage = this.baseMapper.pageFmsTeamMember(page, pageTeamMemberDTO); + List<ComFmsTeamMemberVO> records = memberVOIPage.getRecords(); + if (!records.isEmpty()) { + records.forEach(e -> { + String idCard = e.getIdCard(); + if (isNotEmpty(idCard)) { + e.setAge(IdcardUtil.getAgeByIdCard(idCard)); + } + }); + } + return R.ok(memberVOIPage); + } + + /** + * 微团队顶部统计 + * @param communityId + * @return + */ + @Override + public R statisticsFmsTeamMember(Long communityId) { + return R.ok(this.baseMapper.statisticsFmsTeamMember(communityId)); + } + + /** + * 批量导入团队成员 + * @param voList + * @param communityId + * @param userId + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R listSaveFmsTeamMemberExcelVO(List<ComFmsTeamMemberImportExcelVO> voList, Long communityId, Long userId) { + List<ComFmsTeamType> comFmsTeamTypes = comFmsTeamTypeDAO.selectList(new LambdaQueryWrapper<ComFmsTeamType>().eq(ComFmsTeamType::getCommunityId, communityId)); + List<ComFmsTeam> comFmsTeams = comFmsTeamDAO.selectList(new LambdaQueryWrapper<ComFmsTeam>().eq(ComFmsTeam::getCommunityId, communityId)); + List<ComFmsTeamMemberRelation> teamMemberRelations = new ArrayList<>(); + List<ComFmsTeamMemberImportMistakeExcelVO> mistakes = Lists.newArrayList(); + for (ComFmsTeamMemberImportExcelVO e : voList) { + String teamType = e.getTeamType(); + String teamName = e.getTeamName(); + ComFmsTeamType fmsTeamType = comFmsTeamTypes.stream().filter(type -> type.getName().equals(teamType)).findFirst().orElse(null); + if (isNull(fmsTeamType)) { + ComFmsTeamMemberImportMistakeExcelVO mistake = new ComFmsTeamMemberImportMistakeExcelVO(); + BeanUtils.copyProperties(e, mistake); + mistake.setMistake("团队类型有误,请填写正确的团队类型"); + mistakes.add(mistake); + continue; + } + ComFmsTeam fmsTeam = comFmsTeams.stream().filter(team -> team.getName().equals(teamName)).findFirst().orElse(null); + if (isNull(fmsTeam)) { + ComFmsTeamMemberImportMistakeExcelVO mistake = new ComFmsTeamMemberImportMistakeExcelVO(); + BeanUtils.copyProperties(e, mistake); + mistake.setMistake("团队名称有误,请填写正确的团队名称"); + mistakes.add(mistake); + continue; + } + String idCard = e.getIdCard(); + Integer countMember = this.baseMapper.countMember(communityId, idCard, e.getPhone()); + if (countMember > 0) { + ComFmsTeamMemberImportMistakeExcelVO mistake = new ComFmsTeamMemberImportMistakeExcelVO(); + BeanUtils.copyProperties(e, mistake); + mistake.setMistake("团队成员已存在,如需添加团队关系,请编辑该成员"); + mistakes.add(mistake); + continue; + } + ComFmsTeamMember comFmsTeamMember = new ComFmsTeamMember(); + comFmsTeamMember.setName(e.getTeamMember()); + comFmsTeamMember.setPhone(e.getPhone()); + comFmsTeamMember.setIdCard(idCard); + if (isNotBlank(idCard)) { + comFmsTeamMember.setGender(IdcardUtil.getGenderByIdCard(idCard) == 1 ? 1 : 2); + } + comFmsTeamMember.setCascadeIds(Arrays.asList(fmsTeamType.getId(), fmsTeam.getId()).toString()); + comFmsTeamMember.setCommunityId(communityId); + comFmsTeamMember.setCreatedBy(userId); + comFmsTeamMember.setUpdatedBy(userId); + int num = this.baseMapper.insert(comFmsTeamMember); + if (num > 0) { + ComFmsTeamMemberRelation teamMemberRelation = new ComFmsTeamMemberRelation(); + teamMemberRelation.setMemberId(comFmsTeamMember.getId()); + teamMemberRelation.setTeamId(fmsTeam.getId()); + teamMemberRelations.add(teamMemberRelation); + } + } + if (!teamMemberRelations.isEmpty()) { + comFmsTeamMemberRelationDAO.insertBatch(teamMemberRelations); + } + return R.ok(mistakes); + } + + /** + * 团队人员导出 + * @param pageTeamMemberDTO + * @return + */ + @Override + public R exportTeamMember(PageTeamMemberDTO pageTeamMemberDTO) { + List<ComFmsTeamMemberExportExcelVO> memberExportExcelVOList = this.baseMapper.exportTeamMember(pageTeamMemberDTO); + if (!memberExportExcelVOList.isEmpty()) { + memberExportExcelVOList.forEach(e -> { + if (isNotBlank(e.getIdCard())) { + e.setAge(IdcardUtil.getAgeByIdCard(e.getIdCard()) + ""); + } else { + e.setAge("未知"); + } + }); + } + return R.ok(memberExportExcelVOList); + } + + /** + * 级联查询团队服务人员 + * @param communityId + * @return + */ + @Override + public R retrieveFmsTeamMemberCascade(Long communityId) { + List<ComFmsTeamMemberVO> memberList = this.baseMapper.selectListByCommunityId(communityId); + List<CascadeCommVO> cascade = null; + if (!memberList.isEmpty()) { + Map<Long, List<CascadeCommVO>> allMemberGroup = memberList.stream().map(e -> { + CascadeCommVO cascadeCommVO = new CascadeCommVO(); + cascadeCommVO.setValue(e.getId()); + cascadeCommVO.setParentId(e.getTeamId()); + cascadeCommVO.setLabel(e.getName()); + return cascadeCommVO; + }).collect(Collectors.groupingBy(CascadeCommVO::getParentId)); + List<ComFmsTeam> teamList = comFmsTeamDAO.selectBatchIds(allMemberGroup.keySet()); + if (!teamList.isEmpty()) { + Map<Long, List<CascadeCommVO>> allTeamGroup = teamList.stream().map(e -> { + CascadeCommVO cascadeCommVO = new CascadeCommVO(); + cascadeCommVO.setValue(e.getId()); + cascadeCommVO.setParentId(e.getTeamType()); + cascadeCommVO.setLabel(e.getName()); + return cascadeCommVO; + }).collect(Collectors.groupingBy(CascadeCommVO::getParentId)); + List<ComFmsTeamType> teamTypeList = comFmsTeamTypeDAO.selectBatchIds(allTeamGroup.keySet()); + if (!teamTypeList.isEmpty()) { + cascade = teamTypeList.stream().map(e -> { + CascadeCommVO cascadeCommVO = new CascadeCommVO(); + cascadeCommVO.setValue(e.getId()); + cascadeCommVO.setLabel(e.getName()); + return cascadeCommVO; + }).collect(Collectors.toList()); + cascade.forEach(e1 -> e1.setChildren(allTeamGroup.get(e1.getValue()))); + cascade.forEach(e1 -> e1.getChildren().forEach(e2 -> e2.setChildren(allMemberGroup.get(e2.getValue())))); + } + } + } + return R.ok(cascade); + } +} -- Gitblit v1.7.1