• jeecg微服务中如何实现机构的概念(当前机构只能查到其子机构)


    大家好,我是雄雄。

    在这里插入图片描述

    内容先知

    前言

    以前,我们做的国家平台项目,都是采用现在开源的框架来做的,比如若依bladex,相比之下,若依用的要稍多点儿。因为那时候刚开始接触vue,多方打探,若依比较容易上手。待做了几个项目,将若依用成熟之后,开始用bladexbladex有个很大的改进,就是其内部集成了mybatis-plus,不好上手,等上手了之后就很顺当了。

    最近,新开了个产品,和团队成员三思过后,决定采用微服务去做,框架选择:jeecg-boot.选其主要有以下几个方面的考虑:

    1. 该框架集成了mybatis-plus
    2. 该框架集成的外部插件比较多,比如文件桶企业微信,xxl-job
    3. 正好是个微服务项目,就当来练练手
    4. 网上该框架的资源也比较,遇到Bug之后能有相应的解决方案。

    现在新项目中,有个这样的需求,即:有代理商和机构的概念,当前机构只能查看自己机构及下级机构的信息,无法查看上级机构的信息,介于此,我们将原来的部门的概念,换成了机构的概念,相应的代码也有了调整。

    代码实现

    1. 获取当前用户下的机构id,代码如下:
    	/**
         * 获取当前用户下的机构id
         *
         * @return
         */
        @GetMapping("queryAllDepartByUser")
        public Object queryAllDepartByUser() {
            LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
            List<SysUserDepart> list = sysUserDepartService.list(
                    new QueryWrapper<SysUserDepart>()
                            .eq("user_id", user.getId())
                            .select("dep_id")
            );
            StringBuilder ids = new StringBuilder();
            list.forEach(ud -> {
                ids.append(ud.getDepId()).append(",");
            });
            if (ids.length() > 0) {
                ids.delete(ids.length() - 1, ids.length());
            }
            return ids;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    分析:
    该方法主要实现的功能就是获取当前登录的用户信息,然后根据其机构id和用户id,查询其机构id,最后将机构id返回给前端。

    1. 数据库中加入了两个字段,一个是等级level在,主要是为了确认当前的机构是第几级,好在后面操作。另一个是他的所有父级parentIds,所以我们需要修改一下添加机构的方法,代码如下:
    /**
         * 添加新数据 添加用户新建的部门对象数据,并保存到数据库
         *
         * @param sysDepart
         * @return
         */
        //@RequiresRoles({"admin"})
        @RequestMapping(value = "/add", method = RequestMethod.POST)
        @CacheEvict(value = {CacheConstant.SYS_DEPARTS_CACHE, CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries = true)
        public Result<SysDepart> add(@RequestBody SysDepart sysDepart, HttpServletRequest request) {
            Result<SysDepart> result = new Result<SysDepart>();
            String username = JwtUtil.getUserNameByToken(request);
            try {
                //region 随机生成一个八位字符串的邀请码 如果数据库中存在则重新生成  wangjie 2022-08-23
                String shortBuffer = common.generateShortUuid();
                QueryWrapper<SysDepart> Depart = new QueryWrapper<>();
                Depart.eq("invite_code", shortBuffer);
                List<SysDepart> list = sysDepartService.list(Depart);
                if (list.size() > 0) {
                    shortBuffer = common.generateShortUuid();
                    sysDepart.setInviteCode(shortBuffer);
                } else {
                    sysDepart.setInviteCode(shortBuffer);
                }
    
                sysDepart.setCreateBy(username);
                sysDepartService.saveDepartData(sysDepart, username);
                //获取当前部门的所有父级id
                Result resultPids = queryParentIds(sysDepart.getId(), null);
                JSONObject resultPidsObject = (JSONObject) resultPids.getResult();
                //根据当前部门的id获取值
                JSONObject parentIdsObject = resultPidsObject.getJSONObject(sysDepart.getId());
                JSONArray parentIdsList = parentIdsObject.getJSONArray("parentIds");
                StringBuilder pidsSb = new StringBuilder("");
                parentIdsList.forEach(p -> {
                    pidsSb.append(p);
                    pidsSb.append(",");
                });
                //设置所有父节点的值
                sysDepart.setAncestors(pidsSb.toString());
                sysDepart.setLevel(parentIdsList.size());
                sysDepartService.updateById(sysDepart);
                //清除部门树内存
                // FindsDepartsChildrenUtil.clearSysDepartTreeList();
                // FindsDepartsChildrenUtil.clearDepartIdModel();
                result.success("添加成功!");
            } catch (Exception e) {
                log.error(e.getMessage(), e);
                result.error500("操作失败");
            }
            return result;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    然后其他的方法,我们直接用原生的即可。

  • 相关阅读:
    C++自学精简教程 目录(必读)
    分布式定时任务框架 xxl-job 源码解析
    Android 平台 metaRTC使用源码调试
    《C++ Primer Plus》第九章:内存模型和名称空间(1)
    python基于PHP+MySQL的图书分享平台
    一个简易的低代码
    Android 基础知识1-开发环境搭建
    Debezium系列之:修改源码支持unix_timestamp() as DEFAULT value
    css知识学习系列(12)-每天10个知识点
    从零在win10上测试whisper、faster-whisper、whisperx在CPU和GPU的各自表现情况
  • 原文地址:https://blog.csdn.net/qq_34137397/article/details/126803577