Explorar o código

Merge branch 'V0.0.1' of http://10.87.10.227:4000/jzyd_yyds/soc into V0.0.1

jiawuxian %!s(int64=2) %!d(string=hai) anos
pai
achega
067d3c6087

+ 4 - 1
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/constant/CacheConstants.java

@@ -2,7 +2,7 @@ package com.xunmei.common.core.constant;
 
 /**
  * 缓存常量信息
- * 
+ *
  * @author xunmei
  */
 public class CacheConstants
@@ -56,4 +56,7 @@ public class CacheConstants
      * 登录IP黑名单 cache key
      */
     public static final String SYS_LOGIN_BLACKIPLIST = SYS_CONFIG_KEY + "sys.login.blackIPList";
+
+
+    public static final String ORG_CACHE_LIST_KEY = "sys_org_list";
 }

+ 3 - 3
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeptController.java

@@ -88,7 +88,7 @@ public class SysDeptController extends BaseController {
         dept.setCreateBy(SecurityUtils.getUsername());
         dept.setCreateTime(new Date());
 
-        return toAjax(orgService.save(dept));
+        return toAjax(orgService.saveOrUpdateOrg(dept));
     }
 
     /**
@@ -111,7 +111,7 @@ public class SysDeptController extends BaseController {
 //        }
         dept.setUpdateBy(SecurityUtils.getUsername());
         dept.setUpdateTime(new Date());
-        return toAjax(orgService.updateById(dept));
+        return toAjax(orgService.saveOrUpdateOrg(dept));
     }
 
     /**
@@ -128,7 +128,7 @@ public class SysDeptController extends BaseController {
             return warn("部门存在用户,不允许删除");
         }
 //        deptService.checkDeptDataScope(deptId);
-        return toAjax(orgService.removeById(deptId));
+        return toAjax(orgService.removeOrg(deptId));
     }
 
     /**

+ 34 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysOrgService.java

@@ -84,4 +84,38 @@ public interface ISysOrgService extends IService<SysOrg> {
     List<SysOrg> selectByOrgType(Integer orgType);
 
     SysOrg getSysOrgByUserId(Long userId);
+
+
+    /**
+     * 查询部门树结构信息
+     *
+     * @param dept 部门信息
+     * @return 部门树信息集合
+     */
+    List<SysOrg> selectDeptTreeList(SysOrg dept);
+
+    /**
+     * 缓存机构数据
+      */
+    void loadingOrgCache();
+
+    /**
+     * 清楚机构缓存
+     */
+    void clearOrgCache();
+
+    /**
+     * 保存或者更新机构
+     * @param org
+     * @return
+     */
+    boolean saveOrUpdateOrg(SysOrg org);
+
+    /**
+     * 删除机构
+     * @param orgId
+     * @return
+     */
+    boolean removeOrg(Long orgId);
+
 }

+ 19 - 5
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysDeptServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.constant.UserConstants;
 import com.xunmei.common.core.exception.ServiceException;
@@ -11,6 +12,7 @@ import com.xunmei.common.core.text.Convert;
 import com.xunmei.common.core.utils.SpringUtils;
 import com.xunmei.common.core.utils.StringUtils;
 import com.xunmei.common.datascope.annotation.DataScope;
+import com.xunmei.common.redis.service.RedisService;
 import com.xunmei.common.security.utils.SecurityUtils;
 import com.xunmei.system.api.domain.SysDept;
 import com.xunmei.system.api.domain.SysOrg;
@@ -42,6 +44,9 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
     @Autowired
     private SysOrgMapper orgMapper;
 
+    @Autowired
+    private RedisService redisService;
+
 
     /**
      * 查询部门管理数据
@@ -108,16 +113,25 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
         if (ObjectUtil.isNull(sysOrg)) {
             throw new ServiceException("当前用户没有部门信息");
         }
-        final LambdaQueryWrapper<SysOrg> wrapper = new LambdaQueryWrapper<>();
+        List<SysOrg> cacheList = redisService.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
+        List<SysOrg> orgs = new ArrayList<>();
+        for (SysOrg org : cacheList) {
+            String path = org.getPath();
+            if(StringUtils.isNotEmpty(path) && path.startsWith(sysOrg.getPath())){
+                orgs.add(org);
+            }
+        }
+
+        /*final LambdaQueryWrapper<SysOrg> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(SysOrg::getDeleted, 0);
-        wrapper.isNotNull(SysOrg::getParentId);
+        wrapper.isNotNull(SysOrg::getParentId);*/
         Long parentId = Constants.TOP_ORG_PARENT_ID;
         if (ObjectUtil.notEqual(Constants.TOP_ORG_PARENT_ID, sysOrg.getParentId())) {
             parentId = sysOrg.getParentId();
-            wrapper.likeRight(SysOrg::getPath, sysOrg.getPath());
+            //wrapper.likeRight(SysOrg::getPath, sysOrg.getPath());
         }
-        List<SysOrg> depts = orgMapper.selectList(wrapper);
-        final Map<Long, List<SysOrg>> collect = depts.stream().collect(Collectors.groupingBy(SysOrg::getParentId));
+        /*List<SysOrg> depts = orgMapper.selectList(wrapper);*/
+        final Map<Long, List<SysOrg>> collect = orgs.stream().collect(Collectors.groupingBy(SysOrg::getParentId));
         return handleTree(collect, parentId);
     }
 

+ 103 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysOrgServiceImpl.java

@@ -5,19 +5,31 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.constant.CacheConstants;
+import com.xunmei.common.core.constant.Constants;
+import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.core.utils.SpringUtils;
 import com.xunmei.common.core.utils.StringUtils;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.redis.service.RedisService;
+import com.xunmei.common.security.utils.SecurityUtils;
+import com.xunmei.system.api.domain.SysDept;
 import com.xunmei.system.api.domain.SysOrg;
+import com.xunmei.system.domain.vo.TreeSelect;
 import com.xunmei.system.mapper.SysOrgMapper;
 import com.xunmei.system.mapper.SysUserMapper;
 import com.xunmei.system.service.ISysOrgService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.PostConstruct;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 【请填写功能名称】Service业务层处理
@@ -32,6 +44,21 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     @Autowired
     private SysUserMapper sysUserMapper;
 
+    @Autowired
+    private RedisService redisService;
+
+
+    /**
+     * 项目启动时,缓存机构数据
+     */
+    @PostConstruct
+    public void init()
+    {
+        loadingOrgCache();
+    }
+
+
+
     @Override
     public TableDataInfo<SysOrg> selectPage(SysOrg org) {
         //未删除
@@ -60,6 +87,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
             query.like("name", org.getName());
             org.setName(null);
         }
+        query.lambda().orderByAsc(SysOrg::getPath);
         //获取数据
         page = baseMapper.selectPage(page, query);
         //抓换为TableDataInfo适配前端
@@ -196,4 +224,79 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
     public SysOrg getSysOrgByUserId(Long userId) {
         return sysUserMapper.selectSysByUserId(userId);
     }
+
+    @Override
+    public List<SysOrg> selectDeptTreeList(SysOrg dept) {
+        Long userId = SecurityUtils.getUserId();
+        SysOrg sysOrg = baseMapper.selectSysOrgByUserId(userId);
+        if (ObjectUtil.isNull(sysOrg)) {
+            throw new ServiceException("当前用户没有部门信息");
+        }
+        final LambdaQueryWrapper<SysOrg> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysOrg::getDeleted, 0);
+        wrapper.isNotNull(SysOrg::getParentId);
+        Long parentId = Constants.TOP_ORG_PARENT_ID;
+        if (ObjectUtil.notEqual(Constants.TOP_ORG_PARENT_ID, sysOrg.getParentId())) {
+            parentId = sysOrg.getParentId();
+            wrapper.likeRight(SysOrg::getPath, sysOrg.getPath());
+        }
+        List<SysOrg> depts = baseMapper.selectList(wrapper);
+        final Map<Long, List<SysOrg>> collect = depts.stream().collect(Collectors.groupingBy(SysOrg::getParentId));
+        return handleTree(collect, parentId);
+    }
+
+    @Override
+    public void loadingOrgCache() {
+        QueryWrapper<SysOrg> qw = new QueryWrapper<>();
+        qw.lambda().ge(SysOrg::getDeleted,0);
+        List<SysOrg> list = baseMapper.selectList(qw);
+        redisService.setCacheList(CacheConstants.ORG_CACHE_LIST_KEY, list);
+    }
+
+    @Override
+    public void clearOrgCache() {
+        redisService.deleteObject(CacheConstants.ORG_CACHE_LIST_KEY);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean saveOrUpdateOrg(SysOrg org) {
+
+        boolean isOk = false;
+        if(org.getId() != null){
+            isOk = this.updateById(org);
+        }else{
+            isOk = this.save(org);
+        }
+
+        /*
+         * 重置缓存
+         */
+        this.clearOrgCache();
+        this.loadingOrgCache();
+
+        return isOk;
+    }
+
+    @Override
+    public boolean removeOrg(Long orgId) {
+        boolean rel = this.removeById(orgId);
+        /*
+         * 重置缓存
+         */
+        this.clearOrgCache();
+        this.loadingOrgCache();
+        return rel;
+    }
+
+    private static List<SysOrg> handleTree(Map<Long, List<SysOrg>> map, Long parentId) {
+        List<SysOrg> orgList = map.get(parentId);
+        if (ObjectUtil.isNotEmpty(orgList)) {
+            orgList.forEach(org -> {
+                final List<SysOrg> tree = handleTree(map, org.getId());
+                org.setChildren(tree);
+            });
+        }
+        return orgList;
+    }
 }