mirror of https://gitee.com/stylefeng/roses
【7.2.5】【org】简化获取上级组织机构
parent
293a2a4fdf
commit
e5431884c9
|
@ -24,6 +24,7 @@
|
|||
*/
|
||||
package cn.stylefeng.roses.kernel.system.api;
|
||||
|
||||
import cn.stylefeng.roses.kernel.system.api.enums.DetectModeEnum;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.organization.HrOrganizationDTO;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.organization.HrOrganizationRequest;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.organization.OrganizationTreeNode;
|
||||
|
@ -74,27 +75,16 @@ public interface OrganizationServiceApi {
|
|||
/**
|
||||
* 获取指定组织机构的上级组织机构是什么
|
||||
* <p>
|
||||
* 逐级向上获取直到获取到最高级
|
||||
* 自下而上:逐级向上获取直到获取到最高级
|
||||
* 自上而下:逐级向下获取,直到获取到本层机构
|
||||
*
|
||||
* @param orgId 指定机构id
|
||||
* @param parentLevelNum 上级机构的层级数,从0开始,0代表直接返回本部门
|
||||
* @param detectModeEnum 自上而下还是自下而上
|
||||
* @return 上级机构的id
|
||||
* @author fengshuonan
|
||||
* @date 2022/9/18 15:02
|
||||
*/
|
||||
Long getParentLevelOrgId(Long orgId, Integer parentLevelNum);
|
||||
|
||||
/**
|
||||
* 获取该部门从最高一级上级开始计算的子组织
|
||||
* <p>
|
||||
* 逐级向下获取,直到获取到本层机构
|
||||
*
|
||||
* @param orgId 指定机构id
|
||||
* @param highestLevelNum 自上而下的层级数,从0开始,0代表直接返回本部门
|
||||
* @return 计算后的上级机构id
|
||||
* @author fengshuonan
|
||||
* @date 2022/10/1 11:37
|
||||
*/
|
||||
Long getHighestLevelOrgId(Long orgId, Integer highestLevelNum);
|
||||
Long getParentLevelOrgId(Long orgId, Integer parentLevelNum, DetectModeEnum detectModeEnum);
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
package cn.stylefeng.roses.kernel.system.api.enums;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.stylefeng.roses.kernel.rule.base.ReadableEnum;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 指定查找模式
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2022/10/1 18:02
|
||||
*/
|
||||
@Getter
|
||||
public enum DetectModeEnum implements ReadableEnum<DetectModeEnum> {
|
||||
|
||||
/**
|
||||
* 自下而上
|
||||
* <p>
|
||||
* 从下往上一级一级找
|
||||
*/
|
||||
TO_TOP(1, "自下而上"),
|
||||
|
||||
/**
|
||||
* 自上而下
|
||||
* <p>
|
||||
* 从最高级开始一级一级往下找
|
||||
*/
|
||||
TO_DOWN(2, "自上而下");
|
||||
|
||||
private final Integer code;
|
||||
|
||||
private final String name;
|
||||
|
||||
DetectModeEnum(Integer code, String name) {
|
||||
this.code = code;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getKey() {
|
||||
return code;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DetectModeEnum parseToEnum(String originValue) {
|
||||
if (ObjectUtil.isEmpty(originValue)) {
|
||||
return null;
|
||||
}
|
||||
for (DetectModeEnum value : DetectModeEnum.values()) {
|
||||
if (value.code.equals(Convert.toInt(originValue))) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.organization.controller;
|
||||
|
||||
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.ResBizTypeEnum;
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict;
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
|
||||
|
@ -66,19 +65,6 @@ public class HrOrgApproverController {
|
|||
return new SuccessResponseData<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户,指定部门负责人
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2022/9/18 14:46
|
||||
*/
|
||||
@GetResource(name = "获取当前用户,指定部门负责人", path = "/hrOrgApprover/getAssignOrgApprover")
|
||||
public ResponseData<List<Long>> getAssignOrgApprover(@Validated(HrOrgApproverRequest.getAssignOrgApprover.class) HrOrgApproverRequest hrOrgApproverRequest) {
|
||||
Long userId = LoginContext.me().getLoginUser().getUserId();
|
||||
List<Long> result = hrOrgApproverService.getUserOrgApprover(userId, hrOrgApproverRequest.getOrgApproverType(), hrOrgApproverRequest.getParentLevel());
|
||||
return new SuccessResponseData<>(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取组织机构审批人类型列表
|
||||
*
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.organization.service;
|
||||
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict;
|
||||
import cn.stylefeng.roses.kernel.system.api.enums.DetectModeEnum;
|
||||
import cn.stylefeng.roses.kernel.system.modular.organization.entity.HrOrgApprover;
|
||||
import cn.stylefeng.roses.kernel.system.modular.organization.pojo.request.HrOrgApproverRequest;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
@ -59,11 +60,12 @@ public interface HrOrgApproverService extends IService<HrOrgApprover> {
|
|||
* @param userId 指定用户的部门负责人
|
||||
* @param orgApproverType 部门负责人类型
|
||||
* @param parentLevel 从0开始,0为获取指定用户同部门的领导,1为上一级部门的领导,以此类推
|
||||
* @param detectModeEnum 指定查找的模式,自上而下找对应的负责人,还是自下而上
|
||||
* @return 用户的部门负责人id集合
|
||||
* @author fengshuonan
|
||||
* @date 2022/9/18 14:52
|
||||
*/
|
||||
List<Long> getUserOrgApprover(Long userId, Integer orgApproverType, Integer parentLevel);
|
||||
List<Long> getUserOrgApprover(Long userId, Integer orgApproverType, Integer parentLevel, DetectModeEnum detectModeEnum);
|
||||
|
||||
/**
|
||||
* 获取指定部门的部门负责人
|
||||
|
@ -71,11 +73,12 @@ public interface HrOrgApproverService extends IService<HrOrgApprover> {
|
|||
* @param deptId 指定部门id
|
||||
* @param orgApproverType 部门负责人类型
|
||||
* @param parentLevel 从0开始,0为获取指定同部门的领导,1为上一级部门的领导,以此类推
|
||||
* @param detectModeEnum 指定查找的模式,自上而下找对应的负责人,还是自下而上
|
||||
* @return 负责人id集合
|
||||
* @author fengshuonan
|
||||
* @date 2022/9/18 14:52
|
||||
*/
|
||||
List<Long> getDeptOrgApprover(Long deptId, Integer orgApproverType, Integer parentLevel);
|
||||
List<Long> getDeptOrgApprover(Long deptId, Integer orgApproverType, Integer parentLevel, DetectModeEnum detectModeEnum);
|
||||
|
||||
/**
|
||||
* 获取所有审批人类型列表
|
||||
|
|
|
@ -9,6 +9,7 @@ import cn.stylefeng.roses.kernel.system.api.OrganizationServiceApi;
|
|||
import cn.stylefeng.roses.kernel.system.api.UserOrgServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.UserServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.constants.SystemConstants;
|
||||
import cn.stylefeng.roses.kernel.system.api.enums.DetectModeEnum;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.organization.BindUserItem;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserDTO;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.user.SysUserOrgDTO;
|
||||
|
@ -158,7 +159,7 @@ public class HrOrgApproverServiceImpl extends ServiceImpl<HrOrgApproverMapper, H
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getUserOrgApprover(Long userId, Integer orgApproverType, Integer parentLevel) {
|
||||
public List<Long> getUserOrgApprover(Long userId, Integer orgApproverType, Integer parentLevel, DetectModeEnum detectModeEnum) {
|
||||
|
||||
// 获取用户的所属机构id
|
||||
SysUserOrgDTO sysUserOrgDTO = userOrgServiceApi.getUserOrgByUserId(userId);
|
||||
|
@ -170,14 +171,14 @@ public class HrOrgApproverServiceImpl extends ServiceImpl<HrOrgApproverMapper, H
|
|||
}
|
||||
|
||||
// 获取指定部门的负责人id信息
|
||||
return getDeptOrgApprover(orgId, orgApproverType, parentLevel);
|
||||
return getDeptOrgApprover(orgId, orgApproverType, parentLevel, detectModeEnum);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getDeptOrgApprover(Long deptId, Integer orgApproverType, Integer parentLevel) {
|
||||
public List<Long> getDeptOrgApprover(Long deptId, Integer orgApproverType, Integer parentLevel, DetectModeEnum detectModeEnum) {
|
||||
|
||||
// 根据参数的级别,获取组织机构的父级机构
|
||||
Long parentLevelOrgId = this.organizationServiceApi.getParentLevelOrgId(deptId, parentLevel);
|
||||
Long parentLevelOrgId = this.organizationServiceApi.getParentLevelOrgId(deptId, parentLevel, detectModeEnum);
|
||||
|
||||
// 如果没有上级组织机构,则直接返回为空
|
||||
if (ObjectUtil.isEmpty(parentLevelOrgId)) {
|
||||
|
|
|
@ -50,6 +50,7 @@ import cn.stylefeng.roses.kernel.system.api.RoleDataScopeServiceApi;
|
|||
import cn.stylefeng.roses.kernel.system.api.RoleServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.UserOrgServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.UserServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.enums.DetectModeEnum;
|
||||
import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException;
|
||||
import cn.stylefeng.roses.kernel.system.api.exception.enums.organization.OrganizationExceptionEnum;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.organization.HrOrganizationDTO;
|
||||
|
@ -414,13 +415,12 @@ public class HrOrganizationServiceImpl extends ServiceImpl<HrOrganizationMapper,
|
|||
}
|
||||
|
||||
@Override
|
||||
public Long getParentLevelOrgId(Long orgId, Integer parentLevelNum) {
|
||||
public Long getParentLevelOrgId(Long orgId, Integer parentLevelNum, DetectModeEnum detectModeEnum) {
|
||||
if (DetectModeEnum.TO_TOP.equals(detectModeEnum)) {
|
||||
return calcParentOrgId(orgId, parentLevelNum, true);
|
||||
} else {
|
||||
return calcParentOrgId(orgId, parentLevelNum, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getHighestLevelOrgId(Long orgId, Integer highestLevelNum) {
|
||||
return calcParentOrgId(orgId, highestLevelNum, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue