package cn.besteam.modules.system.biz;
|
|
import cn.besteam.common.constant.CommonConstant;
|
import cn.besteam.common.constant.DepartmentEnum;
|
import cn.besteam.common.constant.DepartmentEnum.OrgTypeEnum;
|
import cn.besteam.common.constant.ErrorCode;
|
import cn.besteam.common.exception.BusinessException;
|
import cn.besteam.common.util.RedisUtil;
|
import cn.besteam.common.util.TreeFilterModelSysDepartmentCascadeUtil;
|
import cn.besteam.common.util.TreeFilterRegionTreeUtil;
|
import cn.besteam.common.util.TreeFilterSysDepartmentTreeModelUtil;
|
import cn.besteam.common.util.oConvertUtils;
|
import cn.besteam.common.util.tree.TreeUtils;
|
import cn.besteam.modules.medical.entity.MwBusinessApproval;
|
import cn.besteam.modules.medical.service.IMwBusinessApprovalService;
|
import cn.besteam.modules.shiro.authc.util.EnvUtils;
|
import cn.besteam.modules.system.dto.SysDepartmentDTO;
|
import cn.besteam.modules.system.dto.SysDepartmentTreeModel;
|
import cn.besteam.modules.system.entity.SysDepartment;
|
import cn.besteam.modules.system.entity.SysUser;
|
import cn.besteam.modules.system.entity.SysUserDepartment;
|
import cn.besteam.modules.system.service.ISysDepartmentService;
|
import cn.besteam.modules.system.service.ISysUserDepartmentService;
|
import cn.besteam.modules.system.service.ISysUserService;
|
import cn.besteam.modules.system.vo.*;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.poi.excel.ExcelWriter;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.Executors;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
import org.apache.poi.ss.util.CellRangeAddress;
|
import org.apache.poi.xssf.usermodel.*;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.net.URLEncoder;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class SysDepartmentBiz {
|
private Logger logger = LoggerFactory.getLogger(SysDepartmentBiz.class);
|
@Autowired
|
private ISysDepartmentService sysDepartmentService;
|
|
@Autowired
|
private ISysUserDepartmentService sysUserDepartmentService;
|
|
@Autowired
|
private ISysUserService sysUserService;
|
|
/**
|
* 业务审批
|
*/
|
@Autowired
|
private IMwBusinessApprovalService businessApprovalService;
|
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@Autowired
|
private SysDepartmentBiz sysDepartmentBiz;
|
public List<SysDepartmentDTO> getMyRegionTreeList(Integer userId) {
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(userId == null ? EnvUtils.getUser().getId() : userId);
|
Set<String> hasUserTreeCodeSet = sysUserDepartmentService.list(Wrappers.<SysUserDepartment>lambdaQuery().likeRight(SysUserDepartment::getTreeCode, myDepartment.getTreeCode()))
|
.stream().map(SysUserDepartment::getTreeCode).collect(Collectors.toSet());
|
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda()
|
.in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()))
|
.likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode())
|
.orderByAsc(SysDepartment::getDepartOrder)
|
.orderByAsc(SysDepartment::getId));
|
List<SysDepartmentDTO> dtoList = new ArrayList<>();
|
Map<Integer, List<SysDepartment>> childrenMap = sysDepartmentList.stream()
|
.collect(Collectors.groupingBy(SysDepartment::getParentId));
|
SysDepartmentDTO rootDto = fillRegionChildrenV2(myDepartment, childrenMap, hasUserTreeCodeSet, new HashMap<>());
|
dtoList.add(rootDto);
|
return dtoList;
|
}
|
/**
|
* 查询区域列表V2
|
* @param keyword
|
* @return
|
*/
|
public List<SysDepartmentDTO> listRegion_bak(String keyword) {
|
//筛选
|
if (StringUtils.isNotBlank(keyword)) {
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
myDepartment = sysDepartmentService.getHospital(myDepartment.getParentId());
|
}
|
Set<String> hasUserTreeCodeSet = sysUserDepartmentService.list(Wrappers.<SysUserDepartment>lambdaQuery().likeRight(SysUserDepartment::getTreeCode, myDepartment.getTreeCode()))
|
.stream().map(SysUserDepartment::getTreeCode).collect(Collectors.toSet());
|
|
List<SysDepartment> sysDepartmentList = new ArrayList<>();
|
// 第一次查询
|
List<SysDepartment> searchDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda()
|
.in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()))
|
.likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode())
|
.like(SysDepartment::getDepartName, keyword)
|
.orderByAsc(SysDepartment::getDepartOrder)
|
.orderByAsc(SysDepartment::getId));
|
|
if (CollectionUtils.isEmpty(searchDepartmentList)) {
|
return new ArrayList<>();
|
}
|
|
// 将所有查询整合到一个集合中进行批量查询
|
Set<String> allTreeCodes = searchDepartmentList.stream()
|
.map(SysDepartment::getTreeCode)
|
.collect(Collectors.toSet());
|
|
List<SysDepartment> filterDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda()
|
.in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()))
|
.and(wrapper -> {
|
allTreeCodes.forEach(treeCode -> wrapper.or().likeRight(SysDepartment::getTreeCode, treeCode));
|
})
|
.orderByAsc(SysDepartment::getDepartOrder)
|
.orderByAsc(SysDepartment::getId));
|
|
// 使用缓存来减少重复查询
|
Map<Integer, SysDepartment> sysDepartmentCacheMap = new HashMap<>();
|
Set<Integer> sysDepartmentIdList = new HashSet<>();
|
List<SysDepartment> resultDepartmentList = new ArrayList<>();
|
|
for (SysDepartment sysDepartment : filterDepartmentList) {
|
while (sysDepartment != null && !sysDepartment.getId().equals(myDepartment.getId())) {
|
if (!sysDepartmentIdList.contains(sysDepartment.getId())) {
|
sysDepartmentIdList.add(sysDepartment.getId());
|
resultDepartmentList.add(sysDepartment);
|
} else {
|
break;
|
}
|
if (sysDepartmentCacheMap.containsKey(sysDepartment.getParentId())) {
|
sysDepartment = sysDepartmentCacheMap.get(sysDepartment.getParentId());
|
} else {
|
Integer parentId = sysDepartment.getParentId();
|
sysDepartment = sysDepartmentService.getById(parentId);
|
sysDepartmentCacheMap.put(parentId, sysDepartment);
|
}
|
}
|
}
|
sysDepartmentList = resultDepartmentList;
|
List<SysDepartmentDTO> dtoList = new ArrayList<>();
|
Map<Integer, List<SysDepartment>> childrenMap = sysDepartmentList.stream()
|
.collect(Collectors.groupingBy(SysDepartment::getParentId));
|
SysDepartmentDTO rootDto = fillRegionChildrenV2(myDepartment, childrenMap, hasUserTreeCodeSet, new HashMap<>());
|
dtoList.add(rootDto);
|
return dtoList;
|
} else {
|
List<SysDepartmentDTO> cache = (List<SysDepartmentDTO>) sysDepartmentBiz.getCache(4);
|
return cache;
|
}
|
}
|
|
private SysDepartmentDTO fillRegionChildrenV2(SysDepartment parent, Map<Integer, List<SysDepartment>> childrenMap, Set<String> hasUserTreeCodeSet, Map<String, Boolean> canDeleteCache) {
|
SysDepartmentDTO dto = new SysDepartmentDTO();
|
BeanUtils.copyProperties(parent, dto);
|
dto.setKey(dto.getId());
|
List<SysDepartment> children = childrenMap.getOrDefault(parent.getId(), Collections.emptyList());
|
List<SysDepartmentDTO> childrenList = children.stream().map(child -> {
|
child.setDepartName(oConvertUtils.replaceBlank(child.getDepartName()));
|
return fillRegionChildrenV2(child, childrenMap, hasUserTreeCodeSet, canDeleteCache);
|
}).collect(Collectors.toList());
|
dto.setChildrenList(childrenList.isEmpty() ? new ArrayList<>() : childrenList);
|
childrenMap.remove(parent.getId());
|
Boolean canDelete = canDeleteCache.get(parent.getTreeCode());
|
if (canDelete == null) {
|
AtomicBoolean canDeleteAtomic = new AtomicBoolean(true);
|
hasUserTreeCodeSet.stream()
|
.filter(treeCode -> treeCode.startsWith(parent.getTreeCode()))
|
.findFirst()
|
.ifPresent(treeCode -> canDeleteAtomic.set(false));
|
canDelete = canDeleteAtomic.get();
|
canDeleteCache.put(parent.getTreeCode(), canDelete);
|
}
|
dto.setCanDelete(canDelete);
|
return dto;
|
}
|
|
/**
|
* 获取组织架构表数据列表V2
|
*
|
* @param keyword
|
* @return
|
*/
|
|
public List<SysDepartmentDTO> listRegion(String keyword) {
|
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
myDepartment = sysDepartmentService.getHospital(myDepartment.getParentId());
|
}
|
Set<String> hasUserTreeCodeSet = sysUserDepartmentService.list(Wrappers.<SysUserDepartment>lambdaQuery().likeRight(SysUserDepartment::getTreeCode, myDepartment.getTreeCode())).stream().map(SysUserDepartment::getTreeCode).collect(Collectors.toSet());
|
List<SysDepartment> sysDepartmentList = new ArrayList<>();
|
//筛选
|
if (StringUtils.isNotEmpty(keyword)) {
|
List<SysDepartment> searchDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda()//
|
.in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()))//
|
.likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode()).like(SysDepartment::getDepartName, keyword).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
if (CollectionUtils.isEmpty(searchDepartmentList)) {
|
return new ArrayList<>();
|
}
|
List<SysDepartment> filterDepartmentList = new ArrayList<>(searchDepartmentList);
|
for (SysDepartment sysDepartment : searchDepartmentList) {
|
filterDepartmentList.addAll(sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())).likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId)));
|
}
|
Map<Integer, SysDepartment> sysDepartmentCacheMap = new HashMap<>();
|
Set<Integer> sysDepartmentIdList = new HashSet<>();
|
for (SysDepartment sysDepartment : filterDepartmentList) {
|
while (sysDepartment != null && !sysDepartment.getId().equals(myDepartment.getId())) {
|
if (!sysDepartmentIdList.contains(sysDepartment.getId())) {
|
sysDepartmentIdList.add(sysDepartment.getId());
|
sysDepartmentList.add(sysDepartment);
|
} else {
|
break;
|
}
|
if (sysDepartmentCacheMap.containsKey(sysDepartment.getParentId())) {
|
sysDepartment = sysDepartmentCacheMap.get(sysDepartment.getParentId());
|
} else {
|
Integer parentId = sysDepartment.getParentId();
|
sysDepartment = sysDepartmentService.getById(sysDepartment.getParentId());
|
sysDepartmentCacheMap.put(parentId, sysDepartment);
|
}
|
}
|
}
|
} else {
|
sysDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda()
|
.in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()))
|
.likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode()).ne(SysDepartment::getId, myDepartment.getId())
|
.orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
}
|
List<SysDepartmentDTO> dtoList = new ArrayList<>();
|
Map<Integer, List<SysDepartment>> childrenMap = sysDepartmentList.stream()
|
.collect(Collectors.groupingBy(SysDepartment::getParentId));
|
dtoList.add(fillRegionChildrenV2(myDepartment, childrenMap, hasUserTreeCodeSet,new HashMap<>()));
|
return dtoList;
|
}
|
|
public List<SysDepartmentDTO> listRegionChildren(Integer parentId) {
|
|
SysDepartment parentDepartment = sysDepartmentService.getById(parentId);
|
if (parentDepartment == null) {
|
throw new BusinessException(ErrorCode.ERR_500, "父级组织不存在");
|
}
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
myDepartment = sysDepartmentService.getHospital(myDepartment.getParentId());
|
}
|
if (!parentDepartment.getTreeCode().startsWith(myDepartment.getTreeCode())) {
|
throw new BusinessException(ErrorCode.ERR_500, "无操作权限");
|
}
|
Set<String> hasUserTreeCodeSet = sysUserDepartmentService.list(Wrappers.<SysUserDepartment>lambdaQuery().likeRight(SysUserDepartment::getTreeCode, myDepartment.getTreeCode())).stream().map(SysUserDepartment::getTreeCode).collect(Collectors.toSet());
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getParentId, parentId).orderByAsc(SysDepartment::getDepartOrder));
|
return fillRegionChildren(parentDepartment, sysDepartmentList, hasUserTreeCodeSet).getChildrenList();
|
}
|
|
private SysDepartmentDTO fillRegionChildren(SysDepartment parent, List<SysDepartment> list, Set<String> hasUserTreeCodeSet) {
|
|
SysDepartmentDTO dto = new SysDepartmentDTO();
|
BeanUtils.copyProperties(parent, dto);
|
dto.setKey(dto.getId());
|
List<SysDepartmentDTO> childrenList = new ArrayList<>();
|
for (SysDepartment children : list) {
|
if (children.getParentId().equals(parent.getId())) {
|
//去掉空格
|
children.setDepartName(oConvertUtils.replaceBlank(children.getDepartName()));
|
childrenList.add(fillRegionChildren(children, list, hasUserTreeCodeSet));
|
}
|
}
|
if (CollectionUtils.isNotEmpty(childrenList)) {
|
dto.setChildrenList(childrenList);
|
} else {
|
int count = sysDepartmentService.count(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getParentId, dto.getId()));
|
if (count > 0) {
|
dto.setChildrenList(new ArrayList<>());
|
}
|
}
|
for (String treeCode : hasUserTreeCodeSet) {
|
if (treeCode.startsWith(parent.getTreeCode())) {
|
dto.setCanDelete(false);
|
break;
|
}
|
}
|
return dto;
|
}
|
|
/**
|
* 获取组织架构表数据列表-树状
|
*
|
* @param pageNo
|
* @param pageSize
|
* @param keyword
|
* @return
|
*/
|
public IPage<SysDepartmentDTO> queryPageList(Integer pageNo, Integer pageSize, String keyword) {
|
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
IPage<SysDepartmentDTO> page = new Page<>(pageNo, pageSize);
|
if (myDepartment == null) {
|
return page;
|
}
|
if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
myDepartment = sysDepartmentService.getHospital(myDepartment.getParentId());
|
}
|
Set<String> hasUserTreeCodeSet = sysUserDepartmentService.list(Wrappers.<SysUserDepartment>lambdaQuery().likeRight(SysUserDepartment::getTreeCode, myDepartment.getTreeCode())).stream().map(SysUserDepartment::getTreeCode).collect(Collectors.toSet());
|
List<SysDepartment> sysDepartmentList = new ArrayList<>();
|
//筛选
|
if (StringUtils.isNotEmpty(keyword)) {
|
List<SysDepartment> searchDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode()).like(SysDepartment::getDepartName, keyword).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
if (CollectionUtils.isEmpty(searchDepartmentList)) {
|
return page;
|
}
|
List<SysDepartment> filterDepartmentList = new ArrayList<>(searchDepartmentList);
|
for (SysDepartment sysDepartment : searchDepartmentList) {
|
filterDepartmentList.addAll(sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId)));
|
}
|
Map<Integer, SysDepartment> sysDepartmentCacheMap = new HashMap<>();
|
Set<Integer> sysDepartmentIdList = new HashSet<>();
|
for (SysDepartment sysDepartment : filterDepartmentList) {
|
while (sysDepartment != null && !sysDepartment.getId().equals(myDepartment.getId())) {
|
if (!sysDepartmentIdList.contains(sysDepartment.getId())) {
|
sysDepartmentIdList.add(sysDepartment.getId());
|
sysDepartmentList.add(sysDepartment);
|
} else {
|
break;
|
}
|
if (sysDepartmentCacheMap.containsKey(sysDepartment.getParentId())) {
|
sysDepartment = sysDepartmentCacheMap.get(sysDepartment.getParentId());
|
} else {
|
Integer parentId = sysDepartment.getParentId();
|
sysDepartment = sysDepartmentService.getById(sysDepartment.getParentId());
|
sysDepartmentCacheMap.put(parentId, sysDepartment);
|
}
|
}
|
}
|
} else {
|
sysDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode()).ne(SysDepartment::getId, myDepartment.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
}
|
List<SysDepartmentDTO> dtoList = new ArrayList<>();
|
dtoList.add(fillChildren(myDepartment, sysDepartmentList, hasUserTreeCodeSet));
|
page.setRecords(dtoList);
|
return page;
|
}
|
|
private SysDepartmentDTO fillChildren(SysDepartment parent, List<SysDepartment> list, Set<String> hasUserTreeCodeSet) {
|
|
SysDepartmentDTO dto = new SysDepartmentDTO();
|
BeanUtils.copyProperties(parent, dto);
|
dto.setKey(dto.getId());
|
List<SysDepartmentDTO> childrenList = new ArrayList<>();
|
for (SysDepartment children : list) {
|
if (children.getParentId().equals(parent.getId())) {
|
childrenList.add(fillChildren(children, list, hasUserTreeCodeSet));
|
}
|
}
|
if (CollectionUtils.isNotEmpty(childrenList)) {
|
dto.setChildrenList(childrenList);
|
}
|
for (String treeCode : hasUserTreeCodeSet) {
|
if (treeCode.startsWith(parent.getTreeCode())) {
|
dto.setCanDelete(false);
|
break;
|
}
|
}
|
return dto;
|
}
|
|
/**
|
* 获取组织架构树形列表-新增、编辑组织架构用,去掉科室级
|
*
|
* @return
|
*/
|
public List<SysDepartmentTreeModel> sysDepartmentTreeList() {
|
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (myDepartment == null) {
|
return new ArrayList<>();
|
}
|
if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
return new ArrayList<>();
|
}
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>()//
|
.lambda().likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode())//
|
.ne(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.OFFICE.getType())//
|
.ne(SysDepartment::getId, myDepartment.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
List<SysDepartmentTreeModel> treeModelList = new ArrayList<>();
|
Map<Integer, List<SysDepartment>> childrenMap = sysDepartmentList.stream()
|
.collect(Collectors.groupingBy(SysDepartment::getParentId));
|
treeModelList.add(fillChildrenTreeModelV2(myDepartment, childrenMap));
|
return treeModelList;
|
}
|
|
private SysDepartmentTreeModel fillChildrenTreeModel(SysDepartment parent, List<SysDepartment> list) {
|
|
SysDepartmentTreeModel treeModel = SysDepartmentTreeModel.of(parent);
|
for (SysDepartment children : list) {
|
if (children.getParentId().equals(parent.getId())) {
|
treeModel.getChildren().add(fillChildrenTreeModel(children, list));
|
treeModel.setIsLeaf(false);
|
}
|
}
|
return treeModel;
|
}
|
|
private SysDepartmentTreeModel fillChildrenTreeModelV2(SysDepartment parent,Map<Integer, List<SysDepartment>> childrenMap) {
|
SysDepartmentTreeModel treeModel = SysDepartmentTreeModel.of(parent);
|
List<SysDepartmentTreeModel> childrenModels = new ArrayList<>();
|
// 使用部门映射直接获取子部门,避免了遍历整个列表
|
List<SysDepartment> children = childrenMap.getOrDefault(parent.getId(),
|
Collections.emptyList());
|
List<SysDepartmentTreeModel> childrenList = children.stream().map(child -> {
|
child.setDepartName(oConvertUtils.replaceBlank(child.getDepartName()));
|
treeModel.setIsLeaf(false);
|
return fillChildrenTreeModelV2(child, childrenMap);
|
}).collect(Collectors.toList());
|
treeModel.setChildren(childrenList.isEmpty() ? new ArrayList<>() :childrenList);
|
childrenMap.remove(treeModel.getId());
|
return treeModel;
|
}
|
|
/**
|
* 获取我的组织架构-树形列表
|
* 用户列表筛选组织用到
|
*
|
* @return
|
*/
|
public List<SysDepartmentTreeModel> getMyDepartmentTreeList(Integer userId) {
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(userId == null ? EnvUtils.getUser().getId() : userId);
|
if (myDepartment == null) {
|
return new ArrayList<>();
|
}
|
if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
myDepartment = sysDepartmentService.getHospital(myDepartment.getParentId());
|
}
|
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>()//
|
.lambda().likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode())//
|
.ne(SysDepartment::getId, myDepartment.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
|
List<SysDepartmentTreeModel> treeModelList = new ArrayList<>();
|
Map<Integer, List<SysDepartment>> childrenMap = sysDepartmentList.stream()
|
.collect(Collectors.groupingBy(SysDepartment::getParentId));
|
treeModelList.add(fillChildrenTreeModelV2(myDepartment, childrenMap));
|
return treeModelList;
|
}
|
|
/**
|
* 添加组织架构表
|
*
|
* @param dto
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
public void save(SysDepartment dto) {
|
|
if (dto.getDepartName().length() > 20) {
|
throw new BusinessException(ErrorCode.ERR_500, "不超过20个字符");
|
}
|
SysDepartment parent = sysDepartmentService.getById(dto.getParentId());
|
if (parent == null) {
|
throw new BusinessException(ErrorCode.PARENT_DEPARTMENT_NOT_FOUND);
|
}
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (!parent.getTreeCode().startsWith(myDepartment.getTreeCode())) {
|
throw new BusinessException(ErrorCode.ERR_500, "无操作权限");
|
}
|
if (dto.getOrgType().equals(DepartmentEnum.OrgTypeEnum.AREA.getType())) {
|
SysDepartment departmentEntity = sysDepartmentService.getOne(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.AREA.getType()).eq(SysDepartment::getDepartName, dto.getDepartName()));
|
if (departmentEntity != null) {
|
throw new BusinessException(ErrorCode.DEPARTMENT_FOUND);
|
}
|
} else {
|
SysDepartment departmentEntity = sysDepartmentService.getOne(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getDepartName, dto.getDepartName()).eq(SysDepartment::getParentId, dto.getParentId()));
|
if (departmentEntity != null) {
|
throw new BusinessException(ErrorCode.DEPARTMENT_FOUND);
|
}
|
}
|
if (!checkOrgTypeRelation(parent.getOrgType(), dto.getOrgType())) {
|
throw new BusinessException(ErrorCode.DEPARTMENT_ORG_TYPE_INVALID);
|
}
|
SysDepartment sysDepartment = new SysDepartment();
|
BeanUtils.copyProperties(dto, sysDepartment);
|
//获取部门树编码
|
sysDepartment.setTreeCode(sysDepartmentService.getTreeCode(dto.getParentId()));
|
sysDepartment.setOrgCode(sysDepartmentService.getOrgCode(dto.getParentId(), dto.getOrgType()));
|
|
//添加服务到期时间
|
if (sysDepartment.getOrgType() == 2) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(new Date());
|
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1);
|
sysDepartment.setExpireDate(calendar.getTime());
|
sysDepartment.setReminderDays(30);
|
}
|
|
sysDepartmentService.save(sysDepartment);
|
//todo 更新缓存数据
|
List<SysDepartment> sysDepartmentList = new ArrayList<>();
|
sysDepartmentList.add(sysDepartment);
|
//updateCache(1, sysDepartmentList,null);
|
CompletableFuture.runAsync(this::delDepartCache);
|
}
|
|
/**
|
* 检查新增、编辑时,父-子组织架构类型是否正确
|
* 区域 - 区域/单位
|
* 单位 - 部门/科室
|
* 部门 - 部门/科室
|
* 科室 - x 不允许作为父级组织
|
*
|
* @param parentOrgType
|
* @param orgType
|
* @return
|
*/
|
private boolean checkOrgTypeRelation(Integer parentOrgType, Integer orgType) {
|
|
if (parentOrgType.equals(DepartmentEnum.OrgTypeEnum.AREA.getType())) {
|
if (orgType.equals(DepartmentEnum.OrgTypeEnum.AREA.getType()) || orgType.equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
return true;
|
}
|
} else if (parentOrgType.equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
if (orgType.equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || orgType.equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
return true;
|
}
|
} else if (parentOrgType.equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType())) {
|
if (orgType.equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || orgType.equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
return true;
|
}
|
}
|
return false;
|
}
|
|
/**
|
* 编辑组织架构表
|
*
|
* @param dto
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
public void edit(SysDepartment dto) {
|
|
SysDepartment department = sysDepartmentService.getById(dto.getId());
|
boolean isDeleteCache = !dto.getDepartOrder().equals(department.getDepartOrder());
|
if (department == null) {
|
throw new BusinessException(ErrorCode.DEPARTMENT_FOUND);
|
}
|
SysDepartment parent = sysDepartmentService.getById(dto.getParentId());
|
if (parent == null) {
|
throw new BusinessException(ErrorCode.PARENT_DEPARTMENT_NOT_FOUND);
|
}
|
if (parent.getId().equals(department.getId())) {
|
throw new BusinessException(ErrorCode.ERR_500, "父级组织不能为自身");
|
}
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
//当前修改的组织不是自己的下属组织
|
if (!department.getTreeCode().startsWith(myDepartment.getTreeCode())) {
|
throw new BusinessException(ErrorCode.ERR_500, "无操作权限");
|
}
|
//选择的父级组织不是自己的下属组织
|
if (!parent.getTreeCode().startsWith(myDepartment.getTreeCode())) {
|
throw new BusinessException(ErrorCode.ERR_500, "无操作权限");
|
}
|
if (dto.getOrgType().equals(DepartmentEnum.OrgTypeEnum.AREA.getType())) {
|
SysDepartment departmentEntity = sysDepartmentService.getOne(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getDepartName, dto.getDepartName()).ne(SysDepartment::getId, dto.getId()));
|
if (departmentEntity != null) {
|
throw new BusinessException(ErrorCode.DEPARTMENT_FOUND);
|
}
|
} else {
|
SysDepartment departmentEntity = sysDepartmentService.getOne(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getDepartName, dto.getDepartName()).eq(SysDepartment::getParentId, dto.getParentId()).ne(SysDepartment::getId, dto.getId()));
|
if (departmentEntity != null) {
|
throw new BusinessException(ErrorCode.DEPARTMENT_FOUND);
|
}
|
}
|
if (!checkOrgTypeRelation(parent.getOrgType(), dto.getOrgType())) {
|
throw new BusinessException(ErrorCode.DEPARTMENT_ORG_TYPE_INVALID);
|
}
|
Integer originParentId = department.getParentId();
|
if (!dto.getParentId().equals(originParentId)) {
|
department.setTreeCode(sysDepartmentService.getTreeCode(dto.getParentId()));
|
//department.setOrgCode(sysDepartmentService.getOrgCode(dto.getParentId(), dto.getOrgType()));
|
}
|
//todo 科室禁用 如果是禁用操作就需要添加审核数据
|
if (department.getStatus() == 1 && dto.getStatus() == 0) {
|
Integer hospitalId = getHospitalId(dto.getParentId());
|
//科室禁用没有通过的,不能重复添加数据
|
Integer count = businessApprovalService.count(new QueryWrapper<MwBusinessApproval>()
|
.eq("hospital_id", hospitalId)
|
.eq("office_id", dto.getId())
|
.eq("status", 0)
|
.eq("type", 1));
|
if (count == 0) {
|
MwBusinessApproval businessApproval = new MwBusinessApproval();
|
businessApproval.setHospitalId(hospitalId);
|
businessApproval.setOfficeId(dto.getId());
|
businessApproval.setOperatorId(EnvUtils.getUser().getId());
|
businessApproval.setLinkman(EnvUtils.getUser().getName());
|
businessApproval.setLinkphone(EnvUtils.getUser().getPhone());
|
businessApproval.setApplyContent("科室(" + department.getDepartName() + ")申请禁用");
|
businessApproval.setApplyMark("无");
|
businessApproval.setStatus(0);
|
businessApproval.setType(1);
|
businessApproval.setApplyDataId(dto.getId());
|
businessApprovalService.save(businessApproval);
|
}
|
} else {
|
department.setStatus(dto.getStatus());
|
}
|
department.setParentId(dto.getParentId());
|
department.setDepartName(dto.getDepartName());
|
department.setOrgType(dto.getOrgType());
|
department.setLevel(dto.getLevel());
|
department.setIsWarehouse(dto.getIsWarehouse());
|
//department.setStatus(dto.getStatus());
|
department.setOfficeType(dto.getOfficeType());
|
department.setDepartOrder(dto.getDepartOrder());
|
department.setUpdateTime(new Date());
|
//加载原始数据
|
List<SysDepartment> sysDepartmentListY = new ArrayList<>();
|
SysDepartment departmentY = sysDepartmentService.getSysDepartmentById(department.getId());
|
sysDepartmentListY.add(departmentY);
|
sysDepartmentService.updateById(department);
|
sysDepartmentService.deleteCache(department.getId());
|
if (!dto.getParentId().equals(originParentId)) {
|
reCalculateChildrenTreeCode(department);
|
sysUserDepartmentService.updateTreeCode();
|
}
|
//todo 更新缓存数据
|
List<SysDepartment> sysDepartmentListX = new ArrayList<>();
|
sysDepartmentListX.add(department);
|
CompletableFuture.runAsync(this::delDepartCache);
|
}
|
private void delDepartCache() {
|
logger.debug("开始删除缓存");
|
redisUtil.del("myRegionTreeList");
|
redisUtil.del("myDepartmentTreeList");
|
redisUtil.del("myHospitalAndOfficeCascadeList");
|
redisUtil.del("myHospitalCascadeList");
|
logger.debug("删除缓存成功");
|
}
|
|
/**
|
*
|
* @param type 类型
|
*/
|
private void updateCacheByType(Integer type){
|
// 创建CountDownLatch, 计数器初始值为4
|
CountDownLatch latch = new CountDownLatch(2);
|
long startTime = System.currentTimeMillis();
|
ExecutorService executorService = Executors.newFixedThreadPool(4);
|
/* if (!type.equals(4)) {
|
// 启动并行任务
|
executorService.submit(() -> {
|
try {
|
long start = System.currentTimeMillis();
|
List<SysDepartmentDTO> sysDepartmentDTOS = sysDepartmentBiz.getMyRegionTreeList(1);
|
redisUtil.set("myRegionTreeList", sysDepartmentDTOS);
|
logger.debug("myRegionTreeList耗时:{}秒", (System.currentTimeMillis() - start) / 1000);
|
} finally {
|
latch.countDown();
|
}
|
});
|
}*/
|
if (!type.equals(3)) {
|
executorService.submit(() -> {
|
try {
|
long start = System.currentTimeMillis();
|
List<SysDepartmentTreeModel> myDepartmentTreeList = sysDepartmentBiz.getMyDepartmentTreeList(
|
1);
|
redisUtil.set("myDepartmentTreeList", myDepartmentTreeList);
|
logger.debug("myDepartmentTreeList耗时:{}秒",
|
(System.currentTimeMillis() - start) / 1000);
|
} finally {
|
latch.countDown();
|
}
|
});
|
}
|
if (!type.equals(1)) {
|
executorService.submit(() -> {
|
try {
|
long start = System.currentTimeMillis();
|
List<SysDepartmentCascadeVO> myHospitalAndOfficeCascadeList = sysDepartmentBiz.getMyHospitalAndOfficeCascadeListV2(
|
1);
|
redisUtil.set("myHospitalAndOfficeCascadeList", myHospitalAndOfficeCascadeList);
|
logger.debug("myHospitalAndOfficeCascadeList耗时:{}秒",
|
(System.currentTimeMillis() - start) / 1000);
|
} finally {
|
latch.countDown();
|
}
|
});
|
}
|
if (!type.equals(2)) {
|
executorService.submit(() -> {
|
try {
|
long start = System.currentTimeMillis();
|
List<SysDepartmentCascadeVO> myHospitalCascadeList = sysDepartmentBiz.getMyHospitalCascadeList(
|
1);
|
redisUtil.set("myHospitalCascadeList", myHospitalCascadeList);
|
logger.debug("myHospitalCascadeList耗时:{}秒",
|
(System.currentTimeMillis() - start) / 1000);
|
} finally {
|
latch.countDown();
|
}
|
});
|
}
|
// 等待所有任务完成
|
try {
|
latch.await();
|
} catch (InterruptedException e) {
|
Thread.currentThread().interrupt();
|
logger.error("任务执行被中断", e);
|
} finally {
|
logger.debug("总计耗时:{}秒", (System.currentTimeMillis() - startTime) / 1000);
|
logger.debug("更新缓存结束");
|
}
|
}
|
|
private Integer getHospitalId(Integer officeId) {
|
SysDepartment sysDepartment = sysDepartmentService.getById(officeId);
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
return sysDepartment.getId();
|
} else {
|
return getHospitalId(sysDepartment.getParentId());
|
}
|
}
|
return null;
|
}
|
|
/**
|
* 医院录屏开关
|
*
|
* @param dto
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
public void editSwitch(SysDepartment dto) {
|
|
SysDepartment department = sysDepartmentService.getById(dto.getId());
|
if (department != null && dto.getSelectSwitch() != null) {
|
department.setSelectSwitch(dto.getSelectSwitch());
|
sysDepartmentService.updateById(department);
|
sysDepartmentService.deleteCache(department.getId());
|
}
|
}
|
|
@Transactional(rollbackFor = Exception.class)
|
public void reCalculateChildrenTreeCode(SysDepartment parent) {
|
|
List<SysDepartment> childrenList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getParentId, parent.getId()));
|
for (SysDepartment children : childrenList) {
|
children.setTreeCode(sysDepartmentService.getTreeCode(children.getParentId()));
|
sysDepartmentService.updateById(children);
|
sysDepartmentService.deleteCache(children.getId());
|
reCalculateChildrenTreeCode(children);
|
}
|
}
|
|
/**
|
* 删除组织架构表
|
*
|
* @param id
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
public void delete(Integer id) {
|
|
if (id == null) {
|
throw new BusinessException(ErrorCode.ERR_500, "id不能为空");
|
}
|
SysDepartment sysDepartment = sysDepartmentService.getById(id);
|
if (sysDepartment == null) {
|
throw new BusinessException(ErrorCode.DEPARTMENT_NOT_FOUND);
|
}
|
int count = sysUserDepartmentService.count(Wrappers.<SysUserDepartment>lambdaQuery().likeRight(SysUserDepartment::getTreeCode, sysDepartment.getTreeCode()));
|
if (count > 0) {
|
throw new BusinessException(ErrorCode.ERR_500, "该组织已存在用户,无法删除");
|
}
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode()));
|
for (SysDepartment departmentEntity : sysDepartmentList) {
|
departmentEntity.setDepartName(departmentEntity.getDepartName() + "-已删除");
|
departmentEntity.setDelFlag(CommonConstant.DEL_FLAG_1);
|
sysDepartmentService.updateById(departmentEntity);
|
sysDepartmentService.removeById(departmentEntity);
|
}
|
Set<Integer> sysDepartmentSet = sysDepartmentList.stream().map(SysDepartment::getId).collect(Collectors.toSet());
|
//
|
sysDepartmentService.deleteCache(sysDepartment.getId());
|
for (Integer childrenId : sysDepartmentSet) {
|
sysDepartmentService.deleteCache(childrenId);
|
}
|
//todo 更新缓存数据
|
List<SysDepartment> sysDepartmentListDe = new ArrayList<>();
|
sysDepartmentListDe.add(sysDepartment);
|
CompletableFuture.runAsync(()->updateCache(3, sysDepartmentListDe,null));
|
redisUtil.del("myRegionTreeList");
|
}
|
|
/**
|
* 获取我的医院列表
|
*
|
* @return
|
*/
|
public List<SysDepartmentTreeModel> getMyHospitalList() {
|
|
List<SysDepartmentTreeModel> treeModelList = new ArrayList<>();
|
//
|
SysDepartment sysDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
SysDepartment hospital = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
treeModelList.add(SysDepartmentTreeModel.of(hospital));
|
} else if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
treeModelList.add(SysDepartmentTreeModel.of(sysDepartment));
|
} else {
|
SysDepartmentTreeModel areaTreeModel = SysDepartmentTreeModel.of(sysDepartment);
|
getChildrenHospitalList(areaTreeModel);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
areaTreeModel.setIsLeaf(false);
|
treeModelList.add(areaTreeModel);
|
}
|
}
|
}
|
return treeModelList;
|
}
|
|
/**
|
* 医院-树形
|
*
|
* @param sysDepartment
|
* @return
|
*/
|
private void getChildrenHospitalList(SysDepartmentTreeModel sysDepartment) {
|
|
List<SysDepartmentTreeModel> childrenVOList = new ArrayList<>();
|
QueryWrapper<SysDepartment> wrapper = new QueryWrapper<>();
|
wrapper.lambda().eq(SysDepartment::getParentId, sysDepartment.getId()).in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()));
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(wrapper);
|
for (SysDepartment children : sysDepartmentList) {
|
SysDepartmentTreeModel childrenTreeModel = SysDepartmentTreeModel.of(children);
|
getChildrenHospitalList(childrenTreeModel);
|
//去除多余树干,例如:广东省-中山市-西区 、 广东省-中山市
|
if (CollectionUtils.isEmpty(childrenTreeModel.getChildren()) && !children.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
continue;
|
}
|
if (CollectionUtils.isNotEmpty(childrenTreeModel.getChildren())) {
|
childrenTreeModel.setIsLeaf(false);
|
}
|
childrenVOList.add(childrenTreeModel);
|
}
|
sysDepartment.setChildren(childrenVOList);
|
}
|
|
/**
|
* 获取我的科室列表
|
*
|
* @return
|
*/
|
public List<SysDepartmentTreeModel> getMyOfficeList() {
|
|
List<SysDepartmentTreeModel> treeModelList = new ArrayList<>();
|
//
|
SysDepartment sysDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
}
|
SysDepartmentTreeModel areaTreeModel = SysDepartmentTreeModel.of(sysDepartment);
|
getChildrenOfficeList(areaTreeModel);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
areaTreeModel.setIsLeaf(false);
|
treeModelList.add(areaTreeModel);
|
}
|
}
|
return treeModelList;
|
}
|
|
/**
|
* 科室-树形
|
*
|
* @param sysDepartment
|
* @return
|
*/
|
private void getChildrenOfficeList(SysDepartmentTreeModel sysDepartment) {
|
|
List<SysDepartmentTreeModel> childrenVOList = new ArrayList<>();
|
QueryWrapper<SysDepartment> wrapper = new QueryWrapper<>();
|
wrapper.lambda().eq(SysDepartment::getParentId, sysDepartment.getId());
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(wrapper);
|
for (SysDepartment children : sysDepartmentList) {
|
SysDepartmentTreeModel childrenTreeModel = SysDepartmentTreeModel.of(children);
|
getChildrenOfficeList(childrenTreeModel);
|
//去除多余树干,例如:广东省-中山市-西区-中医院-门诊部门 、 广东省-中山市
|
if (CollectionUtils.isEmpty(childrenTreeModel.getChildren()) && !children.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
continue;
|
}
|
childrenVOList.add(childrenTreeModel);
|
}
|
sysDepartment.setChildren(childrenVOList);
|
}
|
//##########
|
|
/**
|
* 获取我的医院列表--级联
|
*
|
* @return
|
*/
|
public List<SysDepartmentCascadeVO> getMyHospitalCascadeList(Integer userId) {
|
|
List<SysDepartmentCascadeVO> voList = new ArrayList<>();
|
//
|
SysDepartment sysDepartment = sysDepartmentService.getMyDepartment(userId == null ? EnvUtils.getUser().getId() : userId);
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
SysDepartment hospital = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
voList.add(SysDepartmentCascadeVO.of(hospital));
|
} else if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
voList.add(SysDepartmentCascadeVO.of(sysDepartment));
|
} else {
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(
|
Wrappers.lambdaQuery(SysDepartment.class)
|
.likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode())
|
.ne(SysDepartment::getId, sysDepartment)
|
.in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()))
|
.orderByAsc(SysDepartment::getDepartOrder)
|
.orderByAsc(SysDepartment::getId));
|
Map<Integer, List<SysDepartment>> childrenMap = sysDepartmentList.stream()
|
.collect(Collectors.groupingBy(SysDepartment::getParentId));
|
SysDepartmentCascadeVO areaTreeModel = getChildrenHospitalCascadeListV2(
|
sysDepartment, childrenMap);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
voList.add(areaTreeModel);
|
}
|
}
|
}
|
return voList;
|
}
|
|
/**
|
* 获取我的医院和科室列表--级联
|
*
|
* @return
|
*/
|
public List<SysDepartmentCascadeVO> getMyHospitalAndOfficeCascadeList(Integer userId) {
|
|
List<SysDepartmentCascadeVO> voList = new ArrayList<>();
|
//
|
SysDepartment sysDepartment = sysDepartmentService.getMyDepartment(userId==null?EnvUtils.getUser().getId():userId);
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
SysDepartment hospital = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
SysDepartmentCascadeVO sysDepartmentCascadeVO=SysDepartmentCascadeVO.of(hospital);
|
sysDepartment = sysDepartmentService.getById(hospital.getId());
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
}
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartment);
|
getChildrenOfficeCascadeList_er(areaTreeModel);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
sysDepartmentCascadeVO.setChildren(areaTreeModel.getChildren());
|
}
|
}
|
voList.add(sysDepartmentCascadeVO);
|
} else if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
SysDepartment hospital = sysDepartmentService.getHospital(sysDepartment.getId());
|
SysDepartmentCascadeVO sysDepartmentCascadeVO=SysDepartmentCascadeVO.of(sysDepartment);
|
sysDepartment = sysDepartmentService.getById(hospital.getId());
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
}
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartment);
|
getChildrenOfficeCascadeList_er(areaTreeModel);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
sysDepartmentCascadeVO.setChildren(areaTreeModel.getChildren());
|
}
|
}
|
voList.add(sysDepartmentCascadeVO);
|
} else {
|
if(userId==1){
|
voList = getChildrenHospitalAndOfficeCascadeListNew(sysDepartment);
|
List<SysDepartmentCascadeVO> returnSysDepartmentCascadeVOs = new ArrayList<>();
|
for(SysDepartmentCascadeVO sysDepartmentCascadeVO : voList){
|
if(sysDepartmentCascadeVO.getId()==-1){
|
returnSysDepartmentCascadeVOs.add(sysDepartmentCascadeVO);
|
}
|
}
|
voList = returnSysDepartmentCascadeVOs;
|
}else {
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartment);
|
getChildrenHospitalAndOfficeCascadeList(areaTreeModel);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
voList.add(areaTreeModel);
|
}
|
}
|
}
|
}
|
return voList;
|
}
|
public List<SysDepartmentCascadeVO> getMyHospitalAndOfficeCascadeListV2(Integer userId) {
|
|
List<SysDepartmentCascadeVO> voList = new ArrayList<>();
|
//
|
SysDepartment sysDepartment = sysDepartmentService.getMyDepartment(userId==null?EnvUtils.getUser().getId():userId);
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
SysDepartment hospital = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
SysDepartmentCascadeVO sysDepartmentCascadeVO=SysDepartmentCascadeVO.of(hospital);
|
sysDepartment = sysDepartmentService.getById(hospital.getId());
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
}
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>()//
|
.lambda().likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode())//
|
.ne(SysDepartment::getId, sysDepartment.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
Map<Integer, List<SysDepartment>> childrenMap = sysDepartmentList.stream()
|
.collect(Collectors.groupingBy(SysDepartment::getParentId));
|
SysDepartmentCascadeVO areaTreeModel = getChildrenOfficeCascadeList_erV2(
|
sysDepartment, childrenMap);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
sysDepartmentCascadeVO.setChildren(areaTreeModel.getChildren());
|
}
|
}
|
voList.add(sysDepartmentCascadeVO);
|
} else if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
SysDepartment hospital = sysDepartmentService.getHospital(sysDepartment.getId());
|
SysDepartmentCascadeVO sysDepartmentCascadeVO=SysDepartmentCascadeVO.of(sysDepartment);
|
sysDepartment = sysDepartmentService.getById(hospital.getId());
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
}
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>()//
|
.lambda().likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode())//
|
.ne(SysDepartment::getId, sysDepartment.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
Map<Integer, List<SysDepartment>> childrenMap = sysDepartmentList.stream()
|
.collect(Collectors.groupingBy(SysDepartment::getParentId));
|
SysDepartmentCascadeVO areaTreeModel = getChildrenOfficeCascadeList_erV2(
|
sysDepartment, childrenMap);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
sysDepartmentCascadeVO.setChildren(areaTreeModel.getChildren());
|
}
|
}
|
voList.add(sysDepartmentCascadeVO);
|
} else {
|
if(sysDepartment.getId()== -1){
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.lambdaQuery()
|
.eq(SysDepartment::getStatus, 1)
|
.likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode())//
|
.ne(SysDepartment::getId, sysDepartment.getId())
|
.in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()
|
, DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType(), DepartmentEnum.OrgTypeEnum.OFFICE.getType()))
|
.orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId)
|
.list();
|
Map<Integer, List<SysDepartment>> childrenMap = sysDepartmentList.stream()
|
.collect(Collectors.groupingBy(SysDepartment::getParentId));
|
SysDepartmentCascadeVO sysDepartmentCascadeVO = getChildrenHospitalAndOfficeCascadeListNewV2(
|
sysDepartment, childrenMap);
|
List<SysDepartmentCascadeVO> returnSysDepartmentCascadeVOs = new ArrayList<>();
|
returnSysDepartmentCascadeVOs.add(sysDepartmentCascadeVO);
|
voList = returnSysDepartmentCascadeVOs;
|
}else {
|
QueryWrapper<SysDepartment> wrapper = new QueryWrapper<>();
|
wrapper.lambda()
|
.likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode())//
|
.ne(SysDepartment::getId, sysDepartment.getId())
|
.in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()
|
,DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType(),DepartmentEnum.OrgTypeEnum.OFFICE.getType()))
|
.orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId);
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(wrapper);
|
Map<Integer, List<SysDepartment>> childrenMap = sysDepartmentList.stream()
|
.collect(Collectors.groupingBy(SysDepartment::getParentId));
|
SysDepartmentCascadeVO areaTreeModel = getChildrenHospitalAndOfficeCascadeListV2(
|
sysDepartment, childrenMap);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
voList.add(areaTreeModel);
|
}
|
}
|
}
|
}
|
return voList;
|
}
|
private SysDepartmentCascadeVO getChildrenHospitalAndOfficeCascadeListNewV2(SysDepartment root,Map<Integer, List<SysDepartment>> childrenMap ) {
|
SysDepartmentCascadeVO rootVO = SysDepartmentCascadeVO.of(
|
root);
|
List<SysDepartment> children = childrenMap.getOrDefault(rootVO.getId(),
|
Collections.emptyList());
|
List<SysDepartmentCascadeVO> childrenList = children.stream().map(child -> {
|
return getChildrenHospitalAndOfficeCascadeListNewV2(child, childrenMap);
|
}).collect(Collectors.toList());
|
rootVO.setChildren(childrenList.isEmpty() ? new ArrayList<>() :childrenList);
|
childrenMap.remove(rootVO.getId());
|
return rootVO;
|
}
|
/**
|
* 医院和科室-树形--级联()
|
*
|
* @param root
|
* @return
|
*/
|
|
private List<SysDepartmentCascadeVO> getChildrenHospitalAndOfficeCascadeListNew(SysDepartment root) {
|
if (root == null) {
|
return Collections.emptyList();
|
}
|
List<SysDepartment> records = sysDepartmentService.lambdaQuery()
|
.eq(SysDepartment::getStatus, 1)
|
.in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()
|
, DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType(), DepartmentEnum.OrgTypeEnum.OFFICE.getType()))
|
.orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId)
|
.list();
|
if (CollUtil.isEmpty(records)) {
|
return Collections.emptyList();
|
}
|
List<SysDepartmentCascadeVO> sysDepartmentCascadeVOS = records.stream()
|
.map(SysDepartmentCascadeVO::of).collect(Collectors.toList());
|
return TreeUtils.buildTree(sysDepartmentCascadeVOS);
|
}
|
public List<SysDepartmentCascadeVO> getChildrenHospitalAndOfficeCascadeListNewParallel(SysDepartment root,ExecutorService executorService) {
|
if (root == null) {
|
return Collections.emptyList();
|
}
|
List<SysDepartment> records = sysDepartmentService.lambdaQuery()
|
.eq(SysDepartment::getStatus, 1)
|
.in(SysDepartment::getOrgType, Arrays.asList(
|
DepartmentEnum.OrgTypeEnum.AREA.getType(),
|
DepartmentEnum.OrgTypeEnum.HOSPITAL.getType(),
|
DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType(),
|
DepartmentEnum.OrgTypeEnum.OFFICE.getType()))
|
.orderByAsc(SysDepartment::getDepartOrder)
|
.orderByAsc(SysDepartment::getId)
|
.list();
|
if (records.isEmpty()) {
|
return Collections.emptyList();
|
}
|
List<SysDepartmentCascadeVO> sysDepartmentCascadeVOS = records.stream()
|
.map(SysDepartmentCascadeVO::of)
|
.collect(Collectors.toList());
|
|
Map<Integer, List<SysDepartmentCascadeVO>> groupedByParent = sysDepartmentCascadeVOS.stream()
|
.collect(Collectors.groupingBy(SysDepartmentCascadeVO::getParentId));
|
|
return buildTreeAsync(groupedByParent, root.getId(),executorService);
|
}
|
|
private List<SysDepartmentCascadeVO> buildTreeAsync(Map<Integer, List<SysDepartmentCascadeVO>> groupedByParent, Integer parentId,ExecutorService executorService) {
|
List<SysDepartmentCascadeVO> rootNodes = groupedByParent.getOrDefault(parentId, Collections.emptyList());
|
List<CompletableFuture<Void>> futures = new ArrayList<>();
|
for (SysDepartmentCascadeVO node : rootNodes) {
|
futures.add(CompletableFuture.runAsync(() -> {
|
List<SysDepartmentCascadeVO> children = buildTreeAsync(groupedByParent, Integer.valueOf(node.getValue()),executorService);
|
if (!children.isEmpty() || node.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
node.setChildren(children);
|
}
|
},executorService));
|
}
|
|
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
|
return rootNodes;
|
}
|
public void getChildrenHospitalAndOfficeCascadeListParallel(SysDepartmentCascadeVO sysDepartment,ExecutorService executorService) {
|
List<SysDepartmentCascadeVO> childrenVOList = new ArrayList<>();
|
|
QueryWrapper<SysDepartment> wrapper = new QueryWrapper<>();
|
wrapper.lambda().eq(SysDepartment::getParentId, sysDepartment.getValue())
|
.in(SysDepartment::getOrgType, Arrays.asList(
|
DepartmentEnum.OrgTypeEnum.AREA.getType(),
|
DepartmentEnum.OrgTypeEnum.HOSPITAL.getType(),
|
DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType(),
|
DepartmentEnum.OrgTypeEnum.OFFICE.getType()))
|
.orderByAsc(SysDepartment::getDepartOrder)
|
.orderByAsc(SysDepartment::getId);
|
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(wrapper);
|
List<CompletableFuture<SysDepartmentCascadeVO>> futures = sysDepartmentList.stream()
|
.map(children -> CompletableFuture.supplyAsync(() -> {
|
SysDepartmentCascadeVO childrenTreeModel = SysDepartmentCascadeVO.of(children);
|
getChildrenHospitalAndOfficeCascadeListParallel(childrenTreeModel,executorService);
|
return childrenTreeModel;
|
},executorService))
|
.collect(Collectors.toList());
|
|
List<SysDepartmentCascadeVO> childResults = futures.stream()
|
.map(CompletableFuture::join)
|
.filter(childrenTreeModel ->
|
!CollectionUtils.isEmpty(childrenTreeModel.getChildren()) ||
|
childrenTreeModel.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType()))
|
.collect(Collectors.toList());
|
|
sysDepartment.setChildren(childResults);
|
}
|
private SysDepartmentCascadeVO getChildrenHospitalAndOfficeCascadeListV2(SysDepartment sysDepartment,Map<Integer, List<SysDepartment>> childrenMap) {
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartment);
|
List<SysDepartment> children = childrenMap.getOrDefault(areaTreeModel.getId(),
|
Collections.emptyList());
|
List<SysDepartmentCascadeVO> childrenList = children.stream().map(child -> {
|
return getChildrenHospitalAndOfficeCascadeListV2(child, childrenMap);
|
//去除多余树干,例如:广东省-中山市-西区 、 广东省-中山市
|
}).filter(x -> !(CollectionUtils.isEmpty(x.getChildren()) && !x.getOrgType()
|
.equals(OrgTypeEnum.OFFICE.getType()))).collect(
|
Collectors.toList());
|
areaTreeModel.setChildren(childrenList.isEmpty() ? new ArrayList<>() :childrenList);
|
childrenMap.remove(areaTreeModel.getId());
|
return areaTreeModel;
|
}
|
private void getChildrenHospitalAndOfficeCascadeList(SysDepartmentCascadeVO sysDepartment) {
|
|
List<SysDepartmentCascadeVO> childrenVOList = new ArrayList<>();
|
QueryWrapper<SysDepartment> wrapper = new QueryWrapper<>();
|
wrapper.lambda().eq(SysDepartment::getParentId, sysDepartment.getValue()).in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()
|
,DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType(),DepartmentEnum.OrgTypeEnum.OFFICE.getType())).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId);
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(wrapper);
|
for (SysDepartment children : sysDepartmentList) {
|
SysDepartmentCascadeVO childrenTreeModel = SysDepartmentCascadeVO.of(children);
|
getChildrenHospitalAndOfficeCascadeList(childrenTreeModel);
|
//去除多余树干,例如:广东省-中山市-西区 、 广东省-中山市
|
if (CollectionUtils.isEmpty(childrenTreeModel.getChildren()) && !children.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
continue;
|
}
|
childrenVOList.add(childrenTreeModel);
|
}
|
sysDepartment.setChildren(childrenVOList);
|
}
|
/**
|
* 医院-树形--级联
|
*
|
* @param sysDepartment
|
* @return
|
*/
|
private void getChildrenHospitalCascadeList(SysDepartmentCascadeVO sysDepartment) {
|
List<SysDepartmentCascadeVO> childrenVOList = new ArrayList<>();
|
QueryWrapper<SysDepartment> wrapper = new QueryWrapper<>();
|
wrapper.lambda().eq(SysDepartment::getParentId, sysDepartment.getValue()).in(SysDepartment::getOrgType, Arrays.asList(DepartmentEnum.OrgTypeEnum.AREA.getType(), DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId);
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(wrapper);
|
for (SysDepartment children : sysDepartmentList) {
|
SysDepartmentCascadeVO childrenTreeModel = SysDepartmentCascadeVO.of(children);
|
getChildrenHospitalCascadeList(childrenTreeModel);
|
//去除多余树干,例如:广东省-中山市-西区 、 广东省-中山市
|
if (CollectionUtils.isEmpty(childrenTreeModel.getChildren()) && !children.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
continue;
|
}
|
childrenVOList.add(childrenTreeModel);
|
}
|
sysDepartment.setChildren(childrenVOList);
|
}
|
|
private SysDepartmentCascadeVO getChildrenHospitalCascadeListV2(SysDepartment sysDepartment, Map<Integer, List<SysDepartment>> childrenMap ) {
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartment);
|
List<SysDepartment> children = childrenMap.getOrDefault(sysDepartment.getId(),
|
Collections.emptyList());
|
List<SysDepartmentCascadeVO> childrenList = children.stream().map(child -> {
|
return getChildrenHospitalCascadeListV2(child, childrenMap);
|
}).filter(x ->
|
!(CollectionUtils.isEmpty(x.getChildren())
|
&& !x.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType()))).collect(Collectors.toList());
|
areaTreeModel.setChildren(childrenList.isEmpty() ? new ArrayList<>() :childrenList);
|
childrenMap.remove(areaTreeModel.getId());
|
return areaTreeModel;
|
}
|
/**
|
* 获取我的科室列表
|
*
|
* @return
|
*/
|
public List<SysDepartmentCascadeVO> getMyOfficeCascadeList(Integer parentId) {
|
|
List<SysDepartmentCascadeVO> treeModelList = new ArrayList<>();
|
//
|
SysDepartment sysDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (parentId != null) {
|
sysDepartment = sysDepartmentService.getById(parentId);
|
}
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
}
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartment);
|
getChildrenOfficeCascadeList(areaTreeModel);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
treeModelList.add(areaTreeModel);
|
}
|
}
|
return treeModelList;
|
}
|
|
/**
|
* 获取我的科室列表V2
|
*
|
* @return
|
*/
|
public List<SysDepartmentCascadeVO> getMyOfficeCascadeListV2(Integer parentId, Boolean onlyOffice) {
|
|
List<SysDepartmentCascadeVO> treeModelList = new ArrayList<>();
|
//
|
SysDepartment sysDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
////如果登录账户是科室或者是部门的时候不需要查询医院信息
|
/*if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())){
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartment);
|
getChildrenOfficeCascadeListOffice(areaTreeModel);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
treeModelList.addAll(areaTreeModel.getChildren());
|
}
|
}else {
|
if (parentId != null) {
|
sysDepartment = sysDepartmentService.getById(parentId);
|
}
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
}
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartment);
|
getChildrenOfficeCascadeList(areaTreeModel);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
treeModelList.addAll(areaTreeModel.getChildren());
|
}
|
}
|
}*/
|
if (parentId != null) {
|
sysDepartment = sysDepartmentService.getById(parentId);
|
}
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
}
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartment);
|
getChildrenOfficeCascadeList(areaTreeModel);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
treeModelList.addAll(areaTreeModel.getChildren());
|
}
|
}
|
// 如果只需要科室数据,过滤掉部门层级
|
if (Boolean.TRUE.equals(onlyOffice)) {
|
treeModelList = filterOnlyOffice(treeModelList);
|
}
|
return treeModelList;
|
}
|
|
/**
|
* 递归过滤,只保留科室节点
|
*/
|
private List<SysDepartmentCascadeVO> filterOnlyOffice(List<SysDepartmentCascadeVO> list) {
|
if (CollectionUtils.isEmpty(list)) {
|
return list;
|
}
|
List<SysDepartmentCascadeVO> result = new ArrayList<>();
|
for (SysDepartmentCascadeVO vo : list) {
|
if (DepartmentEnum.OrgTypeEnum.OFFICE.getType().equals(vo.getOrgType())) {
|
// 科室节点直接添加,清空子节点
|
vo.setChildren(null);
|
result.add(vo);
|
} else if (CollectionUtils.isNotEmpty(vo.getChildren())) {
|
// 非科室节点,递归处理子节点
|
result.addAll(filterOnlyOffice(vo.getChildren()));
|
}
|
}
|
return result;
|
}
|
|
/**
|
* 科室-树形-角色部门和科室
|
*
|
* @param sysDepartment
|
* @return
|
*/
|
private void getChildrenOfficeCascadeListOffice(SysDepartmentCascadeVO sysDepartment) {
|
|
List<SysDepartmentCascadeVO> childrenVOList = new ArrayList<>();
|
QueryWrapper<SysDepartment> wrapper = new QueryWrapper<>();
|
wrapper.lambda().eq(SysDepartment::getId, sysDepartment.getValue());
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(wrapper);
|
for (SysDepartment children : sysDepartmentList) {
|
SysDepartmentCascadeVO childrenTreeModel = SysDepartmentCascadeVO.of(children);
|
getChildrenOfficeCascadeList(childrenTreeModel);
|
//去除多余树干,例如:广东省-中山市-西区-中医院-门诊部门 、 广东省-中山市
|
if (CollectionUtils.isEmpty(childrenTreeModel.getChildren()) && (!children.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType()) || children.getIsWarehouse().equals(1))) {
|
continue;
|
}
|
childrenVOList.add(childrenTreeModel);
|
}
|
sysDepartment.setChildren(childrenVOList);
|
}
|
|
/**
|
* 科室-树形-角色和医院
|
*
|
* @param sysDepartment
|
* @return
|
*/
|
private void getChildrenOfficeCascadeList(SysDepartmentCascadeVO sysDepartment) {
|
|
List<SysDepartmentCascadeVO> childrenVOList = new ArrayList<>();
|
QueryWrapper<SysDepartment> wrapper = new QueryWrapper<>();
|
wrapper.lambda().eq(SysDepartment::getParentId, sysDepartment.getValue());
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(wrapper);
|
for (SysDepartment children : sysDepartmentList) {
|
SysDepartmentCascadeVO childrenTreeModel = SysDepartmentCascadeVO.of(children);
|
getChildrenOfficeCascadeList(childrenTreeModel);
|
//去除多余树干,例如:广东省-中山市-西区-中医院-门诊部门 、 广东省-中山市
|
if (CollectionUtils.isEmpty(childrenTreeModel.getChildren()) && (!children.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType()) || children.getIsWarehouse().equals(1))) {
|
continue;
|
}
|
childrenVOList.add(childrenTreeModel);
|
}
|
sysDepartment.setChildren(childrenVOList);
|
}
|
private SysDepartmentCascadeVO getChildrenOfficeCascadeList_erV2(SysDepartment sysDepartment,Map<Integer, List<SysDepartment>> childrenMap) {
|
long start = System.currentTimeMillis();
|
SysDepartmentCascadeVO parent = SysDepartmentCascadeVO.of(sysDepartment);
|
List<SysDepartment> children = childrenMap.getOrDefault(parent.getId(),
|
Collections.emptyList());
|
List<SysDepartmentCascadeVO> childrenList = children.stream().map(child -> {
|
return getChildrenOfficeCascadeList_erV2(child, childrenMap);
|
}).filter(x -> !(CollectionUtils.isEmpty(x.getChildren()) && !x.getOrgType()
|
.equals(OrgTypeEnum.OFFICE.getType()))).collect(Collectors.toList());
|
|
long end = System.currentTimeMillis() - start;
|
System.err.println("----------fillChildrenTreeModel2------"+Thread.currentThread().getName()+"----->"+end);
|
childrenMap.remove(parent.getId());
|
parent.setChildren(childrenList.isEmpty() ? new ArrayList<>() :childrenList);
|
return parent;
|
}
|
/**
|
* 科室-树形-二维码
|
*
|
* @param sysDepartment
|
* @return
|
*/
|
private void getChildrenOfficeCascadeList_er(SysDepartmentCascadeVO sysDepartment) {
|
|
List<SysDepartmentCascadeVO> childrenVOList = new ArrayList<>();
|
QueryWrapper<SysDepartment> wrapper = new QueryWrapper<>();
|
wrapper.lambda().eq(SysDepartment::getParentId, sysDepartment.getValue()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId);
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(wrapper);
|
for (SysDepartment children : sysDepartmentList) {
|
SysDepartmentCascadeVO childrenTreeModel = SysDepartmentCascadeVO.of(children);
|
getChildrenOfficeCascadeList_er(childrenTreeModel);
|
//去除多余树干,例如:广东省-中山市-西区-中医院-门诊部门 、 广东省-中山市
|
if (CollectionUtils.isEmpty(childrenTreeModel.getChildren()) && (!children.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType()))) {
|
continue;
|
}
|
childrenVOList.add(childrenTreeModel);
|
}
|
sysDepartment.setChildren(childrenVOList);
|
}
|
private void getChildrenOfficeCascadeList_erParallel(SysDepartmentCascadeVO sysDepartment,ExecutorService executorService) {
|
List<SysDepartmentCascadeVO> childrenVOList = new ArrayList<>();
|
|
QueryWrapper<SysDepartment> wrapper = new QueryWrapper<>();
|
wrapper.lambda()
|
.eq(SysDepartment::getParentId, sysDepartment.getValue())
|
.orderByAsc(SysDepartment::getDepartOrder)
|
.orderByAsc(SysDepartment::getId);
|
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(wrapper);
|
List<CompletableFuture<Void>> futures = sysDepartmentList.stream()
|
.map(children -> CompletableFuture.runAsync(() -> {
|
SysDepartmentCascadeVO childrenTreeModel = SysDepartmentCascadeVO.of(children);
|
getChildrenOfficeCascadeList_er(childrenTreeModel);
|
if (!childrenTreeModel.getChildren().isEmpty() || children.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
synchronized (childrenVOList) {
|
childrenVOList.add(childrenTreeModel);
|
}
|
}
|
}, executorService))
|
.collect(Collectors.toList());
|
|
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
|
sysDepartment.setChildren(childrenVOList);
|
}
|
/**
|
* 获取我的暂存间列表
|
*
|
* @return
|
*/
|
public List<SysDepartmentCascadeVO> getMyWarehouseOfficeList(Integer officeId) {
|
|
List<SysDepartmentCascadeVO> treeModelList = new ArrayList<>();
|
//获取用户所在部门
|
SysDepartment sysDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (officeId != null) {
|
sysDepartment = sysDepartmentService.getById(officeId);
|
}
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
}
|
List<SysDepartment> sysDepartmentList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode()).eq(SysDepartment::getIsWarehouse, CommonConstant.WARE_HOUSE).eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.OFFICE.getType()));
|
for (SysDepartment sysDepartmentTemp : sysDepartmentList) {
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartmentTemp);
|
treeModelList.add(areaTreeModel);
|
}
|
}
|
return treeModelList;
|
}
|
|
/**
|
* 获取我的科室列表-APP端
|
* 如果登录用户所在部门为区域级,则返回空科室
|
*
|
* @return
|
*/
|
public List<SysDepartmentTreeModel> getMyOfficeListByApp(Integer userId) {
|
|
List<SysDepartmentTreeModel> treeModelList = new ArrayList<>();
|
//
|
SysDepartment sysDepartment = sysDepartmentService.getMyDepartment(userId);
|
if (sysDepartment != null) {
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
} else if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.AREA.getType())) {
|
return treeModelList;
|
}
|
List<SysDepartment> childrenList = sysDepartmentService.list(new QueryWrapper<SysDepartment>()//
|
.lambda()//
|
.likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode())//
|
.eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.OFFICE.getType())//
|
.eq(SysDepartment::getIsWarehouse, 0)//是否是暂存间:0否1是
|
.eq(SysDepartment::getStatus, 1)//状态(1启用,0不启用)
|
.orderByAsc(SysDepartment::getTreeCode));
|
for (SysDepartment children : childrenList) {
|
treeModelList.add(SysDepartmentTreeModel.of(children));
|
}
|
}
|
return treeModelList;
|
}
|
|
/**
|
* 获取前两级区域-不包括平台
|
*
|
* @return
|
*/
|
public List<SysDepartmentCascadeVO> getTwoAreaCascadeList() {
|
|
List<SysDepartmentCascadeVO> voList = new ArrayList<>();
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (!myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.AREA.getType())) {
|
// if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
// voList.add(SysDepartmentCascadeVO.of(myDepartment));
|
// }
|
return voList;
|
}
|
int level = 0;
|
SysDepartment parentDepartment = myDepartment;
|
while (parentDepartment != null && !parentDepartment.getId().equals(-1)) {
|
level++;
|
parentDepartment = sysDepartmentService.getById(parentDepartment.getParentId());
|
}
|
if (level == 0) {
|
SysDepartmentCascadeVO vo = SysDepartmentCascadeVO.of(myDepartment);
|
List<SysDepartment> rootList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.AREA.getType()).eq(SysDepartment::getParentId, myDepartment.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
if (CollectionUtils.isNotEmpty(rootList)) {
|
vo.setChildren(getLevelRegionList(rootList, 2));
|
}
|
voList.add(vo);
|
} else if (level == 1) {
|
SysDepartmentCascadeVO vo = SysDepartmentCascadeVO.of(myDepartment);
|
List<SysDepartment> rootList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.AREA.getType()).eq(SysDepartment::getParentId, myDepartment.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
if (CollectionUtils.isNotEmpty(rootList)) {
|
vo.setChildren(getLevelRegionList(rootList, 1));
|
}
|
voList.add(vo);
|
} else if (level == 2) {
|
voList.add(SysDepartmentCascadeVO.of(myDepartment));
|
}
|
return voList;
|
}
|
|
/**
|
* 获取前三级区域-不包括平台
|
*
|
* @return
|
*/
|
public List<SysDepartmentCascadeVO> getThreeAreaCascadeList() {
|
|
List<SysDepartmentCascadeVO> voList = new ArrayList<>();
|
SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
if (!myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.AREA.getType())) {
|
if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
voList.add(SysDepartmentCascadeVO.of(myDepartment));
|
}
|
return voList;
|
}
|
int level = 0;
|
SysDepartment parentDepartment = myDepartment;
|
while (parentDepartment != null && !parentDepartment.getId().equals(-1)) {
|
level++;
|
parentDepartment = sysDepartmentService.getById(parentDepartment.getParentId());
|
}
|
if (level == 0) {
|
SysDepartmentCascadeVO vo = SysDepartmentCascadeVO.of(myDepartment);
|
List<SysDepartment> rootList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.AREA.getType()).eq(SysDepartment::getParentId, myDepartment.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
if (CollectionUtils.isNotEmpty(rootList)) {
|
vo.setChildren(getLevelRegionList(rootList, 3));
|
}
|
voList.add(vo);
|
} else if (level == 1) {
|
SysDepartmentCascadeVO vo = SysDepartmentCascadeVO.of(myDepartment);
|
List<SysDepartment> rootList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.AREA.getType()).eq(SysDepartment::getParentId, myDepartment.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
if (CollectionUtils.isNotEmpty(rootList)) {
|
vo.setChildren(getLevelRegionList(rootList, 2));
|
}
|
voList.add(vo);
|
} else if (level == 2) {
|
SysDepartmentCascadeVO vo = SysDepartmentCascadeVO.of(myDepartment);
|
List<SysDepartment> rootList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.AREA.getType()).eq(SysDepartment::getParentId, myDepartment.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
if (CollectionUtils.isNotEmpty(rootList)) {
|
vo.setChildren(getLevelRegionList(rootList, 1));
|
}
|
voList.add(vo);
|
} else if (level == 3) {
|
voList.add(SysDepartmentCascadeVO.of(myDepartment));
|
}
|
return voList;
|
}
|
|
private List<SysDepartmentCascadeVO> getLevelRegionList(List<SysDepartment> rootList, int level) {
|
|
if (level < 1) {
|
return null;
|
}
|
List<SysDepartmentCascadeVO> rootCascadeVOList = new ArrayList<>();
|
for (SysDepartment root : rootList) {
|
SysDepartmentCascadeVO rootCascadeVO = SysDepartmentCascadeVO.of(root);
|
List<SysDepartment> childrenList = sysDepartmentService.list(new QueryWrapper<SysDepartment>().lambda().eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.AREA.getType()).eq(SysDepartment::getParentId, root.getId()).orderByAsc(SysDepartment::getDepartOrder).orderByAsc(SysDepartment::getId));
|
if (CollectionUtils.isNotEmpty(childrenList)) {
|
rootCascadeVO.setChildren(getLevelRegionList(childrenList, level - 1));
|
}
|
rootCascadeVOList.add(rootCascadeVO);
|
}
|
return rootCascadeVOList;
|
}
|
|
public List<SysDepartmentCascadeVO> getRegionHospitalCascadeList(Integer departmentId) {
|
|
List<SysDepartmentCascadeVO> voList = new ArrayList<>();
|
SysDepartment sysDepartment = sysDepartmentService.getById(departmentId);
|
if (sysDepartment == null) {
|
return voList;
|
}
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType())) {
|
return voList;
|
} else if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
voList.add(SysDepartmentCascadeVO.of(sysDepartment));
|
} else {
|
SysDepartmentCascadeVO areaTreeModel = SysDepartmentCascadeVO.of(sysDepartment);
|
getChildrenHospitalCascadeList(areaTreeModel);
|
if (CollectionUtils.isNotEmpty(areaTreeModel.getChildren())) {
|
voList.add(areaTreeModel);
|
}
|
}
|
return voList;
|
}
|
|
/**
|
* 批量编辑医院配置(全选开关/手选开关/签名开关)
|
*
|
* @param ids :ids(多个用逗号隔开)
|
* @param selectSwitch:选择开关
|
* @param checkallSwitch:全选开关
|
* @param signatureSwitch:签名开关
|
*/
|
public void batchEdit(String ids, Integer selectSwitch, Integer checkallSwitch, Integer signatureSwitch, Integer environmentalHandoverSwitch, Integer outboundWeighingSwitch, Integer outboundPrintingSwitch, Integer bluetoothPrintSwitch, Integer bluetoothWeighSwitch,Integer chipBoxSwitch) {
|
String[] ids_ = ids.split(",");
|
for (String id : ids_) {
|
SysDepartment sysDepartment = new SysDepartment();
|
sysDepartment.setId(Integer.parseInt(id));
|
if (selectSwitch != null) {
|
sysDepartment.setSelectSwitch(selectSwitch);
|
}
|
if (checkallSwitch != null) {
|
sysDepartment.setCheckallSwitch(checkallSwitch);
|
}
|
if (signatureSwitch != null) {
|
sysDepartment.setSignatureSwitch(signatureSwitch);
|
}
|
if (environmentalHandoverSwitch != null) {
|
sysDepartment.setEnvironmentalHandoverSwitch(environmentalHandoverSwitch);
|
}
|
if (outboundWeighingSwitch != null) {
|
sysDepartment.setOutboundWeighingSwitch(outboundWeighingSwitch);
|
}
|
if (outboundPrintingSwitch != null) {
|
sysDepartment.setOutboundPrintingSwitch(outboundPrintingSwitch);
|
}
|
if (bluetoothPrintSwitch != null) {
|
sysDepartment.setBluetoothPrintSwitch(bluetoothPrintSwitch);
|
}
|
if (bluetoothWeighSwitch != null) {
|
sysDepartment.setBluetoothWeighSwitch(bluetoothWeighSwitch);
|
}
|
if (chipBoxSwitch != null) {
|
sysDepartment.setChipBoxSwitch(chipBoxSwitch);
|
}else {
|
sysDepartment.setChipBoxSwitch(0);
|
}
|
sysDepartmentService.saveOrUpdate(sysDepartment);
|
}
|
}
|
|
public void editHospitalConfiguration(Integer id, Integer type, Integer state) {
|
SysDepartment sysDepartment = new SysDepartment();
|
sysDepartment.setId(id);
|
if (type == 1) {
|
sysDepartment.setCheckallSwitch(state);
|
}
|
if (type == 2) {
|
sysDepartment.setSelectSwitch(state);
|
}
|
if (type == 3) {
|
sysDepartment.setSignatureSwitch(state);
|
}
|
if (type == 4) {
|
sysDepartment.setEnvironmentalHandoverSwitch(state);
|
}
|
if (type == 5) {
|
sysDepartment.setOutboundWeighingSwitch(state);
|
}
|
if (type == 6) {
|
sysDepartment.setOutboundPrintingSwitch(state);
|
}
|
if (type == 7) {
|
sysDepartment.setBluetoothWeighSwitch(state);
|
}
|
if (type == 8) {
|
sysDepartment.setBluetoothPrintSwitch(state);
|
}
|
if (type == 9) {
|
sysDepartment.setChipBoxSwitch(state);
|
}
|
sysDepartmentService.saveOrUpdate(sysDepartment);
|
}
|
|
|
public IPage<CollectAppletAuthorizationListVO> getCollectAppletAuthorization(CollectAppletAuthorizationVO vo, Integer pageNo, Integer pageSize) {
|
return sysDepartmentService.getCollectAppletAuthorization(vo, pageNo, pageSize);
|
}
|
|
|
public void exportCollectAppletAuthorization(CollectAppletAuthorizationVO vo, HttpServletResponse response) throws Exception {
|
ExcelWriter excelWriter = new ExcelWriter(exportCollectAppletAuthorization(vo, "收集小程序授权"), "收集小程序授权");
|
if (excelWriter != null) {
|
response.setContentType("application/octet-stream;charset=utf-8");
|
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("收集小程序授权", "UTF-8") + ".xlsx");
|
excelWriter.flush(response.getOutputStream(), true);
|
excelWriter.close();
|
}
|
}
|
|
private XSSFWorkbook exportCollectAppletAuthorization(CollectAppletAuthorizationVO vo, String name) {
|
IPage<CollectAppletAuthorizationListVO> collectAppletAuthorization = sysDepartmentService.getCollectAppletAuthorization(vo, 1, 100000);
|
List<CollectAppletAuthorizationListVO> records = collectAppletAuthorization.getRecords();
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
XSSFSheet sheet = workbook.createSheet(name);
|
XSSFCellStyle cellStyle = createDefaultCellStyle(workbook);
|
|
XSSFRow row = sheet.createRow(0);//表头
|
XSSFCell cell = row.createCell(0);
|
cell.setCellStyle(cellStyle);
|
cell.setCellValue("收集小程序授权");
|
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4));
|
|
XSSFRow row2 = sheet.createRow(0);//表头
|
|
XSSFCell cel20 = row2.createCell(0);
|
cel20.setCellValue("所属区域");
|
cel20.setCellStyle(cellStyle);
|
|
XSSFCell cel21 = row2.createCell(1);
|
cel21.setCellValue("医院名称");
|
cel21.setCellStyle(cellStyle);
|
|
XSSFCell cel22 = row2.createCell(2);
|
cel22.setCellValue("授权开关");
|
cel22.setCellStyle(cellStyle);
|
|
XSSFCell cel23 = row2.createCell(3);
|
cel23.setCellValue("操作人");
|
cel23.setCellStyle(cellStyle);
|
|
XSSFCell cel24 = row2.createCell(4);
|
cel24.setCellValue("操作时间");
|
cel24.setCellStyle(cellStyle);
|
|
for (int i = 1; i < records.size(); i++) {
|
XSSFRow row1 = sheet.createRow(i);//表头
|
XSSFCell cel2 = row1.createCell(0);
|
cel2.setCellStyle(cellStyle);
|
cel2.setCellValue(records.get(i).getArea());
|
cel2.setCellStyle(cellStyle);
|
|
XSSFCell cel3 = row1.createCell(1);
|
cel3.setCellValue(records.get(i).getHospital());
|
cel3.setCellStyle(cellStyle);
|
|
XSSFCell cel4 = row1.createCell(2);
|
cel4.setCellValue(records.get(i).getAppletSwitch() == 1 ? "开" : "关");
|
cel4.setCellStyle(cellStyle);
|
|
XSSFCell cel5 = row1.createCell(3);
|
cel5.setCellValue(records.get(i).getAppletOperateUser());
|
cel5.setCellStyle(cellStyle);
|
|
XSSFCell cel6 = row1.createCell(4);
|
cel6.setCellValue(records.get(i).getAppletOperateTime());
|
cel6.setCellStyle(cellStyle);
|
}
|
return workbook;
|
}
|
|
|
public void batchEditCollectAppletAuthorization(String ids, Integer status, HttpServletRequest request) {
|
String token = sysUserService.getToken(request);
|
SysUser user = sysUserService.getByToken(token);
|
String[] split = ids.split(",");
|
sysDepartmentService.batchEditCollectAppletAuthorization(Arrays.asList(split), status, user.getId());
|
}
|
|
|
private XSSFCellStyle createDefaultCellStyle(XSSFWorkbook workbook) {
|
|
XSSFCellStyle cellStyle = workbook.createCellStyle();
|
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
XSSFFont font = workbook.createFont();
|
font.setFontName("宋体");
|
font.setFontHeightInPoints((short) 12);
|
cellStyle.setFont(font);
|
return cellStyle;
|
}
|
|
private XSSFCellStyle createDefaultLeftCellStyle(XSSFWorkbook workbook) {
|
|
XSSFCellStyle cellStyle = workbook.createCellStyle();
|
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
cellStyle.setAlignment(HorizontalAlignment.LEFT);
|
XSSFFont font = workbook.createFont();
|
font.setFontName("宋体");
|
font.setFontHeightInPoints((short) 12);
|
cellStyle.setFont(font);
|
return cellStyle;
|
}
|
|
private XSSFCellStyle createDefaultRightCellStyle(XSSFWorkbook workbook) {
|
|
XSSFCellStyle cellStyle = workbook.createCellStyle();
|
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
cellStyle.setAlignment(HorizontalAlignment.RIGHT);
|
XSSFFont font = workbook.createFont();
|
font.setFontName("宋体");
|
font.setFontHeightInPoints((short) 12);
|
cellStyle.setFont(font);
|
return cellStyle;
|
}
|
|
|
public IPage<MonthlySmsAuthorizationListVO> getMonthlySmsAuthorization(MonthlySmsAuthorizationVO vo, Integer pageNo, Integer pageSize) {
|
return sysDepartmentService.getMonthlySmsAuthorization(vo, pageNo, pageSize);
|
}
|
|
|
public void exportMonthlySmsAuthorization(MonthlySmsAuthorizationVO vo, HttpServletResponse response) throws Exception {
|
ExcelWriter excelWriter = new ExcelWriter(exportMonthlySmsAuthorization(vo, "月报短信授权"), "月报短信授权");
|
if (excelWriter != null) {
|
response.setContentType("application/octet-stream;charset=utf-8");
|
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("月报短信授权", "UTF-8") + ".xlsx");
|
excelWriter.flush(response.getOutputStream(), true);
|
excelWriter.close();
|
}
|
}
|
|
private XSSFWorkbook exportMonthlySmsAuthorization(MonthlySmsAuthorizationVO vo, String name) {
|
IPage<MonthlySmsAuthorizationListVO> collectAppletAuthorization = sysDepartmentService.getMonthlySmsAuthorization(vo, 1, 100000);
|
List<MonthlySmsAuthorizationListVO> records = collectAppletAuthorization.getRecords();
|
XSSFWorkbook workbook = new XSSFWorkbook();
|
XSSFSheet sheet = workbook.createSheet(name);
|
XSSFCellStyle cellStyle = createDefaultCellStyle(workbook);
|
|
XSSFRow row = sheet.createRow(0);//表头
|
XSSFCell cell = row.createCell(0);
|
cell.setCellStyle(cellStyle);
|
cell.setCellValue("月报短信授权");
|
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4));
|
|
XSSFRow row2 = sheet.createRow(0);//表头
|
|
XSSFCell cel20 = row2.createCell(0);
|
cel20.setCellValue("所属区域");
|
cel20.setCellStyle(cellStyle);
|
|
XSSFCell cel21 = row2.createCell(1);
|
cel21.setCellValue("医院名称");
|
cel21.setCellStyle(cellStyle);
|
|
XSSFCell cel22 = row2.createCell(2);
|
cel22.setCellValue("授权开关");
|
cel22.setCellStyle(cellStyle);
|
|
XSSFCell cel23 = row2.createCell(3);
|
cel23.setCellValue("操作人");
|
cel23.setCellStyle(cellStyle);
|
|
XSSFCell cel24 = row2.createCell(4);
|
cel24.setCellValue("操作时间");
|
cel24.setCellStyle(cellStyle);
|
|
for (int i = 1; i < records.size(); i++) {
|
XSSFRow row1 = sheet.createRow(i);//表头
|
XSSFCell cel2 = row1.createCell(0);
|
cel2.setCellStyle(cellStyle);
|
cel2.setCellValue(records.get(i).getArea());
|
cel2.setCellStyle(cellStyle);
|
|
XSSFCell cel3 = row1.createCell(1);
|
cel3.setCellValue(records.get(i).getHospital());
|
cel3.setCellStyle(cellStyle);
|
|
XSSFCell cel4 = row1.createCell(2);
|
cel4.setCellValue(records.get(i).getSmsSwitch() == 1 ? "开" : "关");
|
cel4.setCellStyle(cellStyle);
|
|
XSSFCell cel5 = row1.createCell(3);
|
cel5.setCellValue(records.get(i).getSmsOperateUser());
|
cel5.setCellStyle(cellStyle);
|
|
XSSFCell cel6 = row1.createCell(4);
|
cel6.setCellValue(records.get(i).getSmsOperateTime());
|
cel6.setCellStyle(cellStyle);
|
}
|
return workbook;
|
}
|
|
|
public void batchEditMonthlySmsAuthorization(String ids, Integer status, HttpServletRequest request) {
|
String token = sysUserService.getToken(request);
|
SysUser user = sysUserService.getByToken(token);
|
String[] split = ids.split(",");
|
sysDepartmentService.batchEditMonthlySmsAuthorization(Arrays.asList(split), status, user.getId());
|
}
|
|
/**
|
* 获取组织架构缓存数据
|
*
|
* @param type
|
* @return
|
*/
|
public Object getCache(Integer type) {
|
Object ob = new Object();
|
SysDepartment sysDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId());
|
switch (type) {
|
case 1:
|
if (redisUtil.hasKey("myHospitalAndOfficeCascadeList")) {
|
//获取医院部门和科室接口
|
ob = redisUtil.get("myHospitalAndOfficeCascadeList");
|
} else {
|
ob = sysDepartmentBiz.getMyHospitalAndOfficeCascadeListV2(1);
|
redisUtil.set("myHospitalAndOfficeCascadeList", ob);
|
|
}
|
ob = sysDepartmentBiz.getMyHospitalAndOfficeCascadeListV2(1);
|
List<SysDepartmentCascadeVO> list1 = (List<SysDepartmentCascadeVO>) ob;
|
ob = filterateSysDepartmentCascadeVO(list1, sysDepartment);
|
break;
|
case 2:
|
List<SysDepartmentCascadeVO> obVo= new ArrayList<>();
|
if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) {
|
SysDepartment hospital = sysDepartmentService.getHospital(sysDepartment.getParentId());
|
obVo.add(SysDepartmentCascadeVO.of(hospital));
|
ob = obVo;
|
} else if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) {
|
obVo.add(SysDepartmentCascadeVO.of(sysDepartment));
|
ob = obVo;
|
} else {
|
if (redisUtil.hasKey("myHospitalCascadeList")) {
|
//获取医院层级接口
|
ob = redisUtil.get("myHospitalCascadeList");
|
} else {
|
CompletableFuture.runAsync(()-> updateCacheByType(2));
|
ob = sysDepartmentBiz.getMyHospitalCascadeList(1);
|
redisUtil.set("myHospitalCascadeList", ob);
|
}
|
List<SysDepartmentCascadeVO> list2 = (List<SysDepartmentCascadeVO>) ob;
|
ob = filterateSysDepartmentCascadeVO(list2, sysDepartment);
|
}
|
|
break;
|
case 3:
|
if (redisUtil.hasKey("myDepartmentTreeList")) {
|
//获取组织接口
|
ob = redisUtil.get("myDepartmentTreeList");
|
} else {
|
CompletableFuture.runAsync(()-> updateCacheByType(3));
|
ob = sysDepartmentBiz.getMyDepartmentTreeList(1);
|
redisUtil.set("myDepartmentTreeList", ob);
|
}
|
List<SysDepartmentTreeModel> list3 = (List<SysDepartmentTreeModel>) ob;
|
ob = filterateSysDepartmentTreeVO(list3, sysDepartment);
|
break;
|
case 4:
|
if (redisUtil.hasKey("myRegionTreeList")) {
|
//获取组织接口
|
ob = redisUtil.get("myRegionTreeList");
|
} else {
|
ob = sysDepartmentBiz.getMyRegionTreeList(1);
|
redisUtil.set("myRegionTreeList", ob);
|
// CompletableFuture.runAsync(()->updateCacheByType(4));
|
}
|
List<SysDepartmentDTO> list4 = (List<SysDepartmentDTO>) ob;
|
ob = filterateRegionTreeDTO(list4, sysDepartment);
|
break;
|
}
|
return ob;
|
}
|
|
/**
|
*
|
* 根据账号获取数据
|
* @param myRegionList
|
* @param sysDepartment
|
* @return
|
*/
|
private List<SysDepartmentDTO> filterateRegionTreeDTO(List<SysDepartmentDTO> myRegionList, SysDepartment sysDepartment) {
|
TreeFilterRegionTreeUtil treeFilterRegionTreeUtil = new TreeFilterRegionTreeUtil();
|
if (sysDepartment.getId() != -1) {
|
List<Integer> hitIds = new ArrayList<>();
|
hitIds.add(sysDepartment.getId().intValue());
|
myRegionList = treeFilterRegionTreeUtil.searchNode(myRegionList, hitIds);
|
}
|
return myRegionList;
|
}
|
/**
|
* 根据账号获取数据
|
*
|
* @param myHospitalAndOfficeCascadeList
|
* @param sysDepartment
|
* @return
|
*/
|
private List<SysDepartmentCascadeVO> filterateSysDepartmentCascadeVO(List<SysDepartmentCascadeVO> myHospitalAndOfficeCascadeList, SysDepartment sysDepartment) {
|
TreeFilterModelSysDepartmentCascadeUtil treeFilterModelUtil = new TreeFilterModelSysDepartmentCascadeUtil();
|
if (sysDepartment.getId() != -1) {
|
List<Integer> hitIds = new ArrayList<>();
|
hitIds.add(sysDepartment.getId().intValue());
|
myHospitalAndOfficeCascadeList = treeFilterModelUtil.searchNode(myHospitalAndOfficeCascadeList, hitIds);
|
}
|
return myHospitalAndOfficeCascadeList;
|
}
|
|
/**
|
* 根据账号获取数据
|
*
|
* @param myDepartmentTreeList
|
* @param sysDepartment
|
* @return
|
*/
|
private List<SysDepartmentTreeModel> filterateSysDepartmentTreeVO(List<SysDepartmentTreeModel> myDepartmentTreeList, SysDepartment sysDepartment) {
|
TreeFilterSysDepartmentTreeModelUtil treeFilterModelUtil = new TreeFilterSysDepartmentTreeModelUtil();
|
if (sysDepartment.getId() != -1) {
|
List<Integer> hitIds = new ArrayList<>();
|
hitIds.add(sysDepartment.getId().intValue());
|
myDepartmentTreeList = treeFilterModelUtil.searchNode(myDepartmentTreeList, hitIds);
|
}
|
return myDepartmentTreeList;
|
}
|
|
|
/**
|
* 更新缓存数据
|
*
|
* @param type 1:添加缓存数据,2:修改缓存数据,3:删除缓存数据
|
* @return
|
*/
|
public void updateCache(Integer type, List<SysDepartment> sysDepartmentList,List<SysDepartment> sysDepartmentListY) {
|
List<SysDepartmentCascadeVO> myHospitalAndOfficeCascadeList = null;
|
if (redisUtil.hasKey("myHospitalAndOfficeCascadeList")) {
|
//获取医院部门和科室接口
|
myHospitalAndOfficeCascadeList = redisUtil.get("myHospitalAndOfficeCascadeList");
|
} else {
|
myHospitalAndOfficeCascadeList = sysDepartmentBiz.getMyHospitalAndOfficeCascadeList(1);
|
}
|
for (SysDepartment sysDepartment : sysDepartmentList) {
|
//todo 递归处理树形结构1
|
SysDepartment sysDepartmentY = new SysDepartment();
|
if(sysDepartmentListY!=null){
|
for(SysDepartment sysDepartmenty_ : sysDepartmentListY ){
|
if(sysDepartment.getId() == sysDepartmenty_.getId() || sysDepartment.getId().equals(sysDepartmenty_.getId())){
|
sysDepartmentY = sysDepartmenty_;
|
}
|
}
|
}
|
myHospitalAndOfficeCascadeList = setSysDepartmentCascadeVO(myHospitalAndOfficeCascadeList, sysDepartment, type,2,sysDepartmentY);
|
}
|
redisUtil.set("myHospitalAndOfficeCascadeList", myHospitalAndOfficeCascadeList);
|
List<SysDepartmentCascadeVO> myHospitalCascadeList = null;
|
if (redisUtil.hasKey("myHospitalCascadeList")) {
|
//获取医院层级接口
|
myHospitalCascadeList = redisUtil.get("myHospitalCascadeList");
|
} else {
|
myHospitalCascadeList = sysDepartmentBiz.getMyHospitalCascadeList(1);
|
}
|
for (SysDepartment sysDepartment : sysDepartmentList) {
|
//todo 递归处理树形结构2
|
SysDepartment sysDepartmentY = new SysDepartment();
|
if(sysDepartmentListY!=null){
|
for(SysDepartment sysDepartmenty_ : sysDepartmentListY ){
|
if(sysDepartment.getId() == sysDepartmenty_.getId() || sysDepartment.getId().equals(sysDepartmenty_.getId())){
|
sysDepartmentY = sysDepartmenty_;
|
}
|
}
|
}
|
myHospitalCascadeList = setSysDepartmentCascadeVO(myHospitalCascadeList, sysDepartment, type,1,sysDepartmentY);
|
}
|
redisUtil.set("myHospitalCascadeList", myHospitalCascadeList);
|
List<SysDepartmentTreeModel> myDepartmentTreeList = null;
|
if (redisUtil.hasKey("myDepartmentTreeList")) {
|
//获取组织接口
|
myDepartmentTreeList = redisUtil.get("myDepartmentTreeList");
|
} else {
|
myDepartmentTreeList = sysDepartmentBiz.getMyDepartmentTreeList(1);
|
}
|
for (SysDepartment sysDepartment : sysDepartmentList) {
|
//todo 递归处理树形结构3
|
SysDepartment sysDepartmentY = new SysDepartment();
|
if(sysDepartmentListY!=null){
|
for(SysDepartment sysDepartmenty_ : sysDepartmentListY ){
|
if(sysDepartment.getId() == sysDepartmenty_.getId() || sysDepartment.getId().equals(sysDepartmenty_.getId())){
|
sysDepartmentY = sysDepartmenty_;
|
}
|
}
|
}
|
myDepartmentTreeList = setSysDepartmentTreeModel(myDepartmentTreeList, sysDepartment, type,sysDepartmentY);
|
}
|
redisUtil.set("myDepartmentTreeList", myDepartmentTreeList);
|
|
}
|
|
/**
|
* 递归处理树形结构
|
*
|
* @param myHospitalAndOfficeCascadeList 树形对象
|
* @param sysDepartment 新操作的组织架构对象
|
* @param type 1:添加缓存数据,2:修改缓存数据,3:删除缓存数据
|
* @param isHospital 1:医院,2:部门和科室
|
* @return
|
*/
|
private List<SysDepartmentCascadeVO> setSysDepartmentCascadeVO(List<SysDepartmentCascadeVO> myHospitalAndOfficeCascadeList,
|
SysDepartment sysDepartment, Integer type,Integer isHospital,SysDepartment sysDepartmentY) {
|
List<SysDepartmentCascadeVO> voList = new ArrayList<>();
|
switch (type) {
|
case 1:
|
voList = setSysDepartmentCascadeTypeAdd(myHospitalAndOfficeCascadeList,sysDepartment,isHospital);
|
break;
|
case 2:
|
voList = setSysDepartmentCascadeTypeDel(myHospitalAndOfficeCascadeList,sysDepartmentY);
|
voList = setSysDepartmentCascadeTypeAdd(voList,sysDepartment,isHospital);
|
|
break;
|
case 3:
|
voList = setSysDepartmentCascadeTypeDel(myHospitalAndOfficeCascadeList,sysDepartment);
|
break;
|
}
|
return voList;
|
}
|
//处理添加缓存
|
private List<SysDepartmentCascadeVO> setSysDepartmentCascadeTypeAdd(List<SysDepartmentCascadeVO> myHospitalAndOfficeCascadeList,
|
SysDepartment sysDepartment, Integer isHospital) {
|
if (myHospitalAndOfficeCascadeList == null || myHospitalAndOfficeCascadeList.size() == 0) {
|
return myHospitalAndOfficeCascadeList;
|
}
|
for (SysDepartmentCascadeVO sysDepartmentCascadeVO1 : myHospitalAndOfficeCascadeList) {
|
//添加数据
|
SysDepartmentCascadeVO sysDepartmentCascadeVO = new SysDepartmentCascadeVO();
|
if (!sysDepartmentCascadeVO1.getValue().equals(sysDepartment.getParentId().toString())) {
|
Boolean ok = true;
|
if (isHospital == 1 && sysDepartment.getOrgType() > 2) {
|
ok = false;
|
}
|
if (ok) {
|
setSysDepartmentCascadeTypeAdd(sysDepartmentCascadeVO1.getChildren(), sysDepartment, isHospital);
|
}
|
} else {
|
sysDepartmentCascadeVO.setValue(sysDepartment.getId() + "");
|
sysDepartmentCascadeVO.setLabel(sysDepartment.getDepartName());
|
sysDepartmentCascadeVO.setOrgType(sysDepartment.getOrgType());
|
if (sysDepartmentCascadeVO1.getChildren() == null) {
|
List<SysDepartmentCascadeVO> childrenList = new ArrayList<>();
|
childrenList.add(sysDepartmentCascadeVO);
|
sysDepartmentCascadeVO1.setChildren(childrenList);
|
} else {
|
sysDepartmentCascadeVO1.getChildren().add(sysDepartmentCascadeVO);
|
}
|
return myHospitalAndOfficeCascadeList;
|
}
|
}
|
return myHospitalAndOfficeCascadeList;
|
}
|
//处理删除缓存
|
private List<SysDepartmentCascadeVO> setSysDepartmentCascadeTypeDel(List<SysDepartmentCascadeVO> myHospitalAndOfficeCascadeList,
|
SysDepartment sysDepartment) {
|
if (myHospitalAndOfficeCascadeList == null || myHospitalAndOfficeCascadeList.size() == 0) {
|
return myHospitalAndOfficeCascadeList;
|
}
|
for (SysDepartmentCascadeVO sysDepartmentCascadeVO1 : myHospitalAndOfficeCascadeList) {
|
//删除
|
if (!sysDepartmentCascadeVO1.getValue().equals(sysDepartment.getParentId().toString())) {
|
setSysDepartmentCascadeTypeDel(sysDepartmentCascadeVO1.getChildren(), sysDepartment);
|
} else {
|
SysDepartmentCascadeVO sysDepartmentCascadeVO_ = new SysDepartmentCascadeVO();
|
sysDepartmentCascadeVO_.setValue(sysDepartment.getId() + "");
|
sysDepartmentCascadeVO_.setLabel(sysDepartment.getDepartName());
|
sysDepartmentCascadeVO_.setOrgType(sysDepartment.getOrgType());
|
if (sysDepartmentCascadeVO1.getChildren() != null) {
|
sysDepartmentCascadeVO1.getChildren().remove(sysDepartmentCascadeVO_);
|
}
|
return myHospitalAndOfficeCascadeList;
|
}
|
}
|
return myHospitalAndOfficeCascadeList;
|
}
|
/**
|
* 递归处理树形结构
|
*
|
* @param myDepartmentTreeList 树形对象
|
* @param sysDepartment 新操作的组织架构对象
|
* @param type 1:添加缓存数据,2:修改缓存数据,3:删除缓存数据
|
* @return
|
*/
|
private List<SysDepartmentTreeModel> setSysDepartmentTreeModel(List<SysDepartmentTreeModel> myDepartmentTreeList,
|
SysDepartment sysDepartment, Integer type,SysDepartment sysDepartmentY) {
|
List<SysDepartmentTreeModel> voList = new ArrayList<>();
|
switch (type) {
|
case 1:
|
voList = setSysDepartmentTreeModelTypeAdd(myDepartmentTreeList,sysDepartment);
|
break;
|
case 2:
|
voList = setSysDepartmentTreeModelTypeDel(myDepartmentTreeList,sysDepartmentY);
|
voList = setSysDepartmentTreeModelTypeAdd(voList,sysDepartment);
|
|
break;
|
case 3:
|
voList = setSysDepartmentTreeModelTypeDel(myDepartmentTreeList,sysDepartment);
|
break;
|
}
|
return voList;
|
}
|
//处理添加缓存
|
private List<SysDepartmentTreeModel> setSysDepartmentTreeModelTypeAdd(List<SysDepartmentTreeModel> myDepartmentTreeList,
|
SysDepartment sysDepartment) {
|
if (myDepartmentTreeList == null || myDepartmentTreeList.size() == 0) {
|
return myDepartmentTreeList;
|
}
|
for (SysDepartmentTreeModel sysDepartmentTreeModel : myDepartmentTreeList) {
|
//添加数据
|
if (!sysDepartmentTreeModel.getValue().equals(sysDepartment.getParentId())) {
|
setSysDepartmentTreeModelTypeAdd(sysDepartmentTreeModel.getChildren(), sysDepartment);
|
} else {
|
SysDepartmentTreeModel sysDepartmentTreeModelNew = SysDepartmentTreeModel.of(sysDepartment);
|
if (sysDepartmentTreeModel.getChildren() == null) {
|
List<SysDepartmentTreeModel> childrenList = new ArrayList<>();
|
childrenList.add(sysDepartmentTreeModelNew);
|
sysDepartmentTreeModel.setChildren(childrenList);
|
} else {
|
sysDepartmentTreeModel.getChildren().add(sysDepartmentTreeModelNew);
|
}
|
return myDepartmentTreeList;
|
}
|
}
|
return myDepartmentTreeList;
|
}
|
//处理删除缓存
|
private List<SysDepartmentTreeModel> setSysDepartmentTreeModelTypeDel(List<SysDepartmentTreeModel> myDepartmentTreeList,
|
SysDepartment sysDepartment) {
|
if (myDepartmentTreeList == null || myDepartmentTreeList.size() == 0) {
|
return myDepartmentTreeList;
|
}
|
for (SysDepartmentTreeModel sysDepartmentTreeModel : myDepartmentTreeList) {
|
//删除
|
if (!sysDepartmentTreeModel.getValue().equals(sysDepartment.getParentId())) {
|
setSysDepartmentTreeModelTypeDel(sysDepartmentTreeModel.getChildren(), sysDepartment);
|
} else {
|
List<SysDepartmentTreeModel> returnSysDepartmentTreeModels = new ArrayList<>();
|
if (returnSysDepartmentTreeModels != null) {
|
for (SysDepartmentTreeModel sysDepartmentTreeModel1 : sysDepartmentTreeModel.getChildren()) {
|
if (!sysDepartmentTreeModel1.getValue().equals(sysDepartment.getId())) {
|
returnSysDepartmentTreeModels.add(sysDepartmentTreeModel1);
|
}
|
}
|
}
|
sysDepartmentTreeModel.setChildren(returnSysDepartmentTreeModels);
|
return myDepartmentTreeList;
|
}
|
}
|
return myDepartmentTreeList;
|
}
|
}
|