Java8函数式接口优化代码

利用 Java8 函数式编程,更加简洁优化你的代码

场景初衷

之前员工写的项目啊,很多业务都用到这个权限的控制:

  • ==> 需要根据登录的员工账号获取到相对应的项目点权限 (项目点: 医院,护理站等组织),从而对所拥有的这些项目点进行操作,当我看到相关代码的时候,发现很多都是复制粘贴过来的,逻辑几乎是一模一样,最多也就几行不一样的地方,如下图:

优化

在这里插入图片描述

下面这张图是当时的git提交记录,现在的版本又有些改动了:
申请单业务模块的引用:
在这里插入图片描述
服务单业务模块的引用:
在这里插入图片描述

核心代码

  • 获取员工项目点权限的核心代码 (里面具体的代码逻辑写得也不是很ok,也挺low的,【因为也是很之前的员工写的嘛,我也不好去改动,要是出了线上问题,那就gg啦!!】
  • 之后还会找机会继续优化的, 各位大佬暂时先不用太在意!!!
/**
     * 根据登录员工 -> 获取员工所拥有的项目点权限ids, '普通用户角色'时: 指派给自己的单ids
     *
     * @param rp
     * @param query
     * @return
     * - ltFullControl -> 员工是否拥有所有项目点权限 (0:没有  1.拥有)
     * - projectPointIds -> 员工未拥有所有项目点权限时, 拥有的部分项目点权限ids
     * - relationOrderIds -> '普通用户'角色时: 指派给自己的单ids;   超管/易见医护普通用户/其他机构管理员 这3种角色 ==> 返回null
     */
    public Map<String, Object> getEmployeeProjectPointAndRelationOrder(ReqParam rp, Function<ReqParam, List<Long>> query) {
        // 远程调用'获取项目点权限'接口: - ltFullControl: 是否拥有所有单权限;   - projectPointRightsLtOrder: 未拥有所有单权限时,所拥有的部分权限;
        R r = employeeRemoteService.projectPointRightTwo(rp.employeeId, rp.platformCode, rp.companyCode, ProjectPointBusinessTypeEnum.LT_PROJECT_POINT.getCode());
        Assert.state(MedicalErrorCode.SUCCESS.getCode() == r.getCode(), "远程调用时失败");
        Map<String, Object> map = Convert.convert(java.util.Map.class, r.getData());
        // 获取员工角色类型(0:超级管理员,1:易简医护普通用户,2:机构管理员,3:机构普通用户)
        Integer employeeRoleType = Convert.convert(Integer.class, map.get("employeeRoleType"));
        Assert.state(employeeRoleType.compareTo(0) >= 0, "该登录员工未分配角色!");
        // 指派给自己的单ids
        List<Long> relationOrderIds = null;
        // query不为空时: 查询只指派给自己的单ids
        if (ObjectUtil.isNotEmpty(query)) {
            if (employeeRoleType.equals(Convert.toInt(RoleTypeEnum.JGPTYH.getCode()))) {
                // (角色 == 3.机构普通用户) --> 只能看到指派给自己的单
                relationOrderIds = query.apply(rp);
                if (CollUtil.isEmpty(relationOrderIds)) {
                    relationOrderIds.add(-1L);
                }
            }
        }
        // 是否拥有全部项目点权限
        Integer ltFullControl = Convert.convert(Integer.class, map.get("ltFullControl"));
        // 所拥有的部分权限集合
        List<Long> projectPointIds = new ArrayList<>();
        if (ObjectUtil.isNotEmpty(map.get("projectPointRightsLtOrder"))) {
            // 未拥有全部项目点权限时,所拥有的部分权限
            JSONArray jsonArray = JSONUtil.parseArray(map.get("projectPointRightsLtOrder"));
            List<TwoOrderLtResVo> twoOrderLtResVos = JSONUtil.toList(jsonArray, TwoOrderLtResVo.class);
            projectPointIds = twoOrderLtResVos.stream().map(twoOrderLtResVo -> twoOrderLtResVo.getId()).collect(Collectors.toList());
        }
        if (CollUtil.isEmpty(projectPointIds)) {
            projectPointIds = new ArrayList<>();
            projectPointIds.add(-1L);
        }
        Map<String, Object> result = new HashMap<>(3);
        result.put("ltFullControl", ltFullControl);
        result.put("projectPointIds", projectPointIds);
        result.put("relationOrderIds", relationOrderIds);
        return result;
    }
    public Page<LtApplyOrderDTO> getApplyOrderPage(Page page, LtApplyOrderVO vo, ReqParam rp) {
        // 申请单普通用户只能看到指派给自己的单
        List<Long> argRelationOrderIds = ltApplyOrderRelationEmployeeService.listObjs(Wrappers.<LtApplyOrderRelationEmployee>lambdaQuery()
                .eq(LtApplyOrderRelationEmployee::getEmployeeId, rp.employeeId)
                .select(LtApplyOrderRelationEmployee::getApplyOrderId), result -> Long.valueOf(result.toString()));
        // 获取员工所拥有的项目点权限ids, '普通用户角色'时: 指派给自己的单ids
        Map<String, Object> employeeMap = employeeTool.getEmployeeProjectPointAndRelationOrder(rp, arg -> argRelationOrderIds);
        // 员工是否拥有所有项目点权限 (0:没有  1.拥有)
        Integer ltFullControl = Convert.convert(Integer.class, employeeMap.get("ltFullControl"));
        // 员工未拥有所有项目点权限时, 拥有的部分项目点权限ids
        List<Long> projectPointIds = Convert.toList(Long.class, employeeMap.get("projectPointIds"));
        // '普通用户'角色时: 指派给自己的单ids;   超管/易见医护普通用户/其他机构管理员 这3种角色 ==> 返回null
        List<Long> relationOrderIds = Convert.toList(Long.class, employeeMap.get("relationOrderIds"));
        // 查询
        Page<LtApplyOrderDTO> applyOrderPage = baseMapper.getApplyOrderPage(page, vo, ltFullControl, projectPointIds, relationOrderIds);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值