package com.ycl.service.ding.impl; import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ycl.entity.depart.UmsDepart; import com.ycl.entity.user.UmsAdmin; import com.ycl.entity.user.UmsAdminRoleRelation; import com.ycl.entity.user.UmsRole; import com.ycl.service.depart.IDepartManagerService; import com.ycl.service.depart.UmsDepartService; import com.ycl.service.ding.BookRemarkService; import com.ycl.service.ding.DingService; import com.ycl.service.user.UmsAdminRoleRelationService; import com.ycl.service.user.UmsAdminService; import com.ycl.service.user.UmsRoleService; import com.ycl.vo.AddressBookVO; import com.ycl.vo.ContactVO; import com.ycl.vo.NewAddressBookVO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @Service @Slf4j public class DingServiceImpl implements DingService { @Autowired private UmsDepartService departService; @Autowired private IDepartManagerService departManagerService; @Autowired private UmsAdminService umsAdminService; @Autowired private UmsRoleService umsRoleService; @Autowired private UmsAdminRoleRelationService umsAdminRoleRelationService; @Autowired private BookRemarkService bookRemarkService; @Override public List getAddressBook(Long userId) { List users = umsAdminService.list(); Map userMap = users.stream().collect(Collectors.toMap(UmsAdmin::getId, Function.identity())); List addressBookVOS = new ArrayList<>(); List list = departService.list(new QueryWrapper().lambda().eq(UmsDepart::getStatus, 1).eq(UmsDepart::getIsDeleted, 0)); //查询备注信息 Map remarkMap = bookRemarkService.findByUserId(userId); list.forEach(item -> { //构建部门信息 extracted(userMap, addressBookVOS, item, remarkMap); }); log.info(JSON.toJSONString(addressBookVOS)); return buildTreeUseStream(addressBookVOS, 0); } @Override public List getAddressBookByParentId(Long id, Long userId) { List users = umsAdminService.list(); Map userMap = users.stream().collect(Collectors.toMap(UmsAdmin::getId, Function.identity())); List addressBookVOS = new ArrayList<>(); List list = departService.list(new QueryWrapper().lambda().eq(UmsDepart::getStatus, 1).eq(UmsDepart::getParentId, id).eq(UmsDepart::getIsDeleted, 0)); //查询备注信息 Map remarkMap = bookRemarkService.findByUserId(userId); list.forEach(item -> { //构建部门信息 extracted(userMap, addressBookVOS, item, remarkMap); }); log.info(JSON.toJSONString(addressBookVOS)); return addressBookVOS; } @Override public NewAddressBookVO getAddressBookById(Long id, Long userId) { List users = umsAdminService.list(); Map userMap = users.stream().collect(Collectors.toMap(UmsAdmin::getId, Function.identity())); NewAddressBookVO newAddressBookVO = new NewAddressBookVO(); List departs = departService.list(new QueryWrapper().lambda().eq(UmsDepart::getStatus, 1).eq(UmsDepart::getParentId, id).eq(UmsDepart::getIsDeleted, 0)); Set deptIds = departs.stream().map(UmsDepart::getParentId).collect(Collectors.toSet()); //部门信息 newAddressBookVO.setDeparts(departs); Map remarkMap = bookRemarkService.findByUserId(userId); Collection userIds = departManagerService.getByDeptId(id); ArrayList contacts = new ArrayList<>(); //角色信息 List list = umsAdminRoleRelationService.list(); Map> rolesMap = list.stream().collect(Collectors.groupingBy(UmsAdminRoleRelation::getAdminId)); Map roleName = umsRoleService.list().stream().filter(o -> o.getStatus() == 1).collect(Collectors.toMap(UmsRole::getId, UmsRole::getName)); //构建用户信息 if (CollUtil.isNotEmpty(userIds)) { userIds.forEach(u -> { UmsAdmin admin = userMap.get(u); if (Objects.nonNull(admin)) { ContactVO contactVO = new ContactVO(); contactVO.setUserId(admin.getId()); contactVO.setSex(admin.getSex()); contactVO.setUsername(admin.getUsername()); contactVO.setNickName(admin.getNickName()); contactVO.setIcon(admin.getIcon()); contactVO.setMobile(admin.getMobile()); contactVO.setRemark(remarkMap.get(admin.getId())); //添加用户角色信息 List roleRelations = rolesMap.get(admin.getId()); if (CollUtil.isNotEmpty(roleRelations)) { ArrayList roles = new ArrayList<>(); Set roleId = roleRelations.stream().map(UmsAdminRoleRelation::getRoleId).collect(Collectors.toSet()); for (Long o : roleId) { String s = roleName.get(o); if (StringUtils.isNotBlank(s)) { roles.add(s); } } contactVO.setRoles(roles); } contacts.add(contactVO); } }); newAddressBookVO.setContacts(contacts); } return newAddressBookVO; } // 使用stream流转换 public static List buildTreeUseStream(List treeList, long id) { List list = treeList.stream() //过滤父节点与传递的id相同的TreeNode对象 .filter(treeNode -> treeNode.getParentId() == id) .map(treeNode -> { //递归设置孩子节点 treeNode.setChildren(buildTreeUseStream(treeList, treeNode.getDeptId())); return treeNode; }) .collect(Collectors.toList()); return list; } private void extracted(Map userMap, List addressBookVOS, UmsDepart depart, Map remarkMap) { AddressBookVO books = new AddressBookVO(); books.setDeptId(depart.getId()); books.setParentId(depart.getParentId()); books.setDeptName(depart.getDepartName()); books.setDeptCode(depart.getCode()); ArrayList contacts = new ArrayList<>(); Collection userIds = departManagerService.getByDeptId(depart.getId()); //角色信息 List list = umsAdminRoleRelationService.list(); Map> rolesMap = list.stream().collect(Collectors.groupingBy(UmsAdminRoleRelation::getAdminId)); Map roleName = umsRoleService.list().stream().filter(o -> o.getStatus() == 1).collect(Collectors.toMap(UmsRole::getId, UmsRole::getName)); //构建用户信息 if (CollUtil.isNotEmpty(userIds)) { userIds.forEach(u -> { UmsAdmin admin = userMap.get(u); if (Objects.nonNull(admin)) { ContactVO contactVO = new ContactVO(); contactVO.setUserId(admin.getId()); contactVO.setSex(admin.getSex()); contactVO.setUsername(admin.getUsername()); contactVO.setNickName(admin.getNickName()); contactVO.setIcon(admin.getIcon()); contactVO.setMobile(admin.getMobile()); contactVO.setRemark(remarkMap.get(admin.getId())); //添加用户角色信息 List roleRelations = rolesMap.get(admin.getId()); if (CollUtil.isNotEmpty(roleRelations)) { ArrayList roles = new ArrayList<>(); Set roleId = roleRelations.stream().map(UmsAdminRoleRelation::getRoleId).collect(Collectors.toSet()); for (Long id : roleId) { String s = roleName.get(id); if (StringUtils.isNotBlank(s)) { roles.add(s); } } contactVO.setRoles(roles); } contacts.add(contactVO); } }); books.setContacts(contacts); } addressBookVOS.add(books); } }