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