zhongrj
2024-05-29 a5fac95408a43ad43de9d88c30d06c0918c7bc8f
src/main/java/org/springblade/modules/system/service/impl/DeptServiceImpl.java
@@ -1,37 +1,30 @@
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package org.springblade.modules.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springblade.common.cache.SysCache;
import org.springblade.common.utils.AuthUtils;
import org.springblade.common.utils.NodeTreeUtil;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.node.ForestNodeMerger;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringPool;
import org.springblade.modules.system.entity.Dept;
import org.springblade.modules.system.entity.Region;
import org.springblade.modules.system.mapper.DeptMapper;
import org.springblade.modules.system.node.DeptUserTreeNode;
import org.springblade.modules.system.service.IDeptService;
import org.springblade.modules.system.service.IRegionService;
import org.springblade.modules.system.vo.DeptVO;
import org.springblade.modules.system.wrapper.DeptWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
@@ -46,6 +39,9 @@
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {
   private static final String TENANT_ID = "tenantId";
   private static final String PARENT_ID = "parentId";
   @Autowired
   private IRegionService regionService;
   @Override
   public List<DeptVO> lazyList(String tenantId, Long parentId, Map<String, Object> param) {
@@ -62,12 +58,15 @@
         parentId = 0L;
      }
      // 判断数据权限控制,非超管角色只可看到本级及以下数据
      if (Func.toLong(parentId) == 0L && !AuthUtil.isAdministrator()) {
      if (Func.toLong(parentId) == 0L && !AuthUtils.isAdministratorOrAdmin(AuthUtil.getUserRole())) {
         Long deptId = Func.firstLong(AuthUtil.getDeptId());
         Dept dept = SysCache.getDept(deptId);
         if (dept.getParentId() != 0) {
         if (dept != null && dept.getParentId() != 0) {
            parentId = dept.getParentId();
         }
         List<DeptVO> deptVOS = baseMapper.lazyList(tenantId, parentId, param);
         deptVOS = deptVOS.stream().filter(item -> AuthUtil.getDeptId().contains(item.getId().toString())).collect(Collectors.toList());
         return deptVOS;
      }
      // 判断点击搜索带有查询条件的情况
      if (Func.isEmpty(param.get(PARENT_ID)) && param.size() > 1 && Func.toLong(parentId) == 0L) {
@@ -78,13 +77,38 @@
   @Override
   public List<DeptVO> tree(String tenantId) {
      return ForestNodeMerger.merge(baseMapper.tree(tenantId));
      Long id = null;
      // 判断数据权限控制,非超管角色只可看到本级及以下数据
      if (!AuthUtil.isAdmin()) {
         id = Func.firstLong(AuthUtil.getDeptId());
      }
      List<DeptVO> tree = baseMapper.tree(tenantId, id);
      return ForestNodeMerger.merge(tree);
   }
   @Override
   public List<DeptVO> lazyTree(String tenantId, Long parentId) {
      if (AuthUtil.isAdministrator()) {
         tenantId = StringPool.EMPTY;
      }
      // 判断数据权限控制,非超管角色只可看到本级及以下数据
//      if (Func.toLong(parentId) == 0L && !AuthUtil.isAdministrator()) {
//         Long deptId = Func.firstLong(AuthUtil.getDeptId());
//         Dept dept = SysCache.getDept(deptId);
//         if (dept.getParentId() != 0) {
//            parentId = dept.getParentId();
//         }
//      }
      if (Func.toLong(parentId) == 0L && !AuthUtil.isAdmin()) {
         Long deptId = Func.firstLong(AuthUtil.getDeptId());
         Dept dept = SysCache.getDept(deptId);
         if (dept != null && dept.getParentId() != 0) {
            parentId = dept.getParentId();
         }
         List<DeptVO> merge = ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
         List<DeptVO> copy = BeanUtil.copy(merge, DeptVO.class);
         copy = copy.stream().filter(item -> AuthUtil.getDeptId().contains(item.getId().toString())).collect(Collectors.toList());
         return copy;
      }
      return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
   }
@@ -123,16 +147,29 @@
   }
   @Override
   @Transactional(rollbackFor = Exception.class)
   public boolean removeDept(String ids) {
      Long cnt = baseMapper.selectCount(Wrappers.<Dept>query().lambda().in(Dept::getParentId, Func.toLongList(ids)));
      if (cnt > 0L) {
         throw new ServiceException("请先删除子节点!");
      }
      return removeByIds(Func.toLongList(ids));
      List<Long> longs = Func.toLongList(ids);
      return removeByIds(longs);
   }
   @Override
   public boolean submit(Dept dept) {
      deptHandle(dept);
      // 保存并返回
      return saveOrUpdate(dept);
   }
   /**
    * 机构信息处理
    *
    * @param dept
    */
   private void deptHandle(Dept dept) {
      if (Func.isEmpty(dept.getParentId())) {
         dept.setTenantId(AuthUtil.getTenantId());
         dept.setParentId(BladeConstant.TOP_PARENT_ID);
@@ -148,7 +185,56 @@
         dept.setAncestors(ancestors);
      }
      dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
      return saveOrUpdate(dept);
   }
   /**
    * 自定义新增或修改
    *
    * @param dept
    * @return
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public boolean saveOrUpdateDeptInfo(Dept dept) {
      boolean flag = false;
      deptHandle(dept);
      // 判断类型,如果为物业公司(上级机构名称为物业公司),名称不能重复
      QueryWrapper<Dept> queryWrapper = new QueryWrapper<>();
      queryWrapper.eq("is_deleted", 0).eq("id", dept.getParentId());
      Dept parentDept = getOne(queryWrapper);
      // 如果父机构为物业公司
      if (parentDept != null && parentDept.getDeptName().equals("物业公司")) {
         // 查询当前
         QueryWrapper<Dept> wrapper = new QueryWrapper<>();
         wrapper.eq("is_deleted", 0)
            .eq("dept_name", dept.getDeptName());
         Dept one = getOne(wrapper);
         if (null != one) {
            dept.setId(one.getId());
            flag = updateById(dept);
         } else {
            if (dept.getId() != null && dept.getId() > 0) {
               flag = updateById(dept);
            } else {
               flag = save(dept);
            }
         }
         //保存物业公司信息
         savePropertyCompany(dept);
      } else {
         flag = saveOrUpdate(dept);
      }
      // 保存并返回
      return flag;
   }
   /**
    * 保存物业公司信息
    *
    * @param dept
    */
   @Transactional(rollbackFor = Exception.class)
   public void savePropertyCompany(Dept dept) {
   }
   @Override
@@ -168,4 +254,124 @@
      return DeptWrapper.build().listNodeVO(deptList);
   }
   /**
    * 数据处理(社区绑定)
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public Object dataHandle() {
      // 查询所有的社区
      QueryWrapper<Region> queryWrapper = new QueryWrapper<>();
      queryWrapper.eq("district_code", "361102").eq("region_level", 5);
      List<Region> list = regionService.list(queryWrapper);
      // 遍历
      for (Region region : list) {
         // 查询是否已创建
         QueryWrapper<Dept> wrapper = new QueryWrapper<>();
         wrapper.eq("is_deleted", 0).eq("dept_name", region.getName());
         Dept one = getOne(wrapper);
         if (null == one) {
            // 新增
            Dept dept = new Dept();
            dept.setFullName(region.getName());
            dept.setDeptName(region.getName());
            dept.setDeptCategory(1);
            dept.setTenantId("000000");
            // 查询上级id
            QueryWrapper<Dept> deptQueryWrapper = new QueryWrapper<>();
            deptQueryWrapper.eq("is_deleted", 0).eq("dept_name", region.getTownName());
            Dept parentDept = getOne(deptQueryWrapper);
            if (null != parentDept) {
               dept.setParentId(parentDept.getId());
               dept.setAncestors(parentDept.getAncestors() + "," + parentDept.getId());
            }
            dept.setRegionCode(region.getCode());
            // 新增
            saveOrUpdate(dept);
            // 插入社区表数据
         }
      }
      return null;
   }
   /**
    * 数据处理(社区绑定)--处理机构
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public Object dataHandleCommunity() {
      return null;
   }
   /**
    * 数据处理(区域网格编号绑定)
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public Object dataRegionGridCodeBindHandle() {
      return null;
   }
   @Override
   public List<DeptUserTreeNode> getDeptAndUserTree(DeptUserTreeNode treeNode) {
      // 查询数据
//      Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMap(treeNode);
      Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMapAndChildren(treeNode);
      Map<String, DeptUserTreeNode> userMap = baseMapper.getUserMap(treeNode);
      deptMap.putAll(userMap);
      List<DeptUserTreeNode> deptAndUserNodeTree = NodeTreeUtil.getDeptAndUserNodeTree(deptMap);
      return deptAndUserNodeTree;
   }
   @Override
   public Object getDeptAndUserTreeLazyTree(DeptUserTreeNode treeNode) {
      //传一个部门id,查询出该部门的下一级部门
      Map<String, DeptUserTreeNode> deptMap = baseMapper.getDeptMapAndChild(treeNode);
      String deptIds = "";
      int count = 0;
      for (String key : deptMap.keySet()) {
         count++;
         deptIds += key;
         if (count < deptMap.size()) {
            deptIds += ",";
         }
      }
      Map<String, DeptUserTreeNode> userMap = baseMapper.getUserMapByDeptIds(deptIds);
      deptMap.putAll(userMap);
      List<DeptUserTreeNode> deptAndUserNodeTree = NodeTreeUtil.getDeptAndUserNodeTree(deptMap);
      return deptAndUserNodeTree;
   }
   /**
    * 数据处理(社区绑定)-- 处理社区(派出所下)
    */
   @Override
   @Transactional(rollbackFor = Exception.class)
   public Object dataHandleCommunityByPolice() {
      // 查询所有的派出所
      QueryWrapper<Dept> wrapper = new QueryWrapper<>();
      wrapper.eq("is_deleted", 0).like("dept_name", "派出所");
      List<Dept> list = list(wrapper);
      // 遍历
      for (Dept dept : list) {
      }
      return null;
   }
   /**
    * 查询对应的派出所
    *
    * @param deptId
    * @return
    */
   @Override
   public Dept getDeptByDeptIds(String deptId) {
      return baseMapper.getDeptByDeptIds(deptId);
   }
}