臭名昭著aTrust隔离计划1.臭名昭著aTrust隔离计划2.VPN原理与aTrust隔离网络实践3.docker-easyconnect到底做了什么4.TUN(tunnel-隧道-虚拟网卡)模式
基于Quartz搭建的个人博客1.Quartz个人博客使用教程2.使用 rsync 增量部署 Quartz 博客3.使用 GitHub Actions 自动部署 Quartz 博客5.域名绑定6.CDN加速Obsidian、双向链接与知识图谱
旅行
行程攻略青岛三日游行程攻略
前端
NginxNginx配置与反向代理入门
Nodenpm与npx的区别
中华财险-公司项目
对外接口文档
基础数据码表对外接口(仅支持rpc调用)业务码表对外接口应用主数据对外接口
基础运营查询版本更新日志详情消息中心对外接口站内信对外接口站内信模板配置手册
权限中心权限中心对外接口文档(最新)权限中心对外接口文档前端ACL-CORE FACADE依赖版本
审计中心审计中心对外接口文档audit-center-facade版本
审批中心工作流迁审批流现状工作流迁审批流API能力替换方案老审批流接口文档审批中心接口文档审批中心业务回调FAQ
账号中心内部系统对接单点登录内部系统对接认证中心三方网页应用登录授权账号中心对外接口文档前端账号中心RPC接口文档账户变更对外广播消息文档账户中心对外接口HRMS外部员工变更广播消息文档HRMS外部员工对外接口
组织员工岗位🔥机构映射SDK接口文档员工岗位变更通知说明组织机构管营一体概念与用法组织员工对外广播消息文档组织员工岗位对外接口文档组织员工岗位对外接口文档前端组织员工岗位数据模型组织员工主数据业务场景案例organization-facade版本
hrms(大型人力资源外包管理系统)
项目架构说明HRMS Maven模块与依赖说明
项目说明0.流程中心模块0.组织模块说明1.业务线模块2.计划模块3.项目模块4.协议模块5.供应商模块6.合约域模块7.外包人员模块*核心:外包人员生命周期
项目运维外包人员项目编制差异排查与修复2.HRMS相关问题排查4.修改externalId(externalId和accountId不一致)
需求-系分
1.内部转外包0723外包人员关联历史内部账号系分新增外包人员关联历史账号内容(紧急0723上线)需求
2.工作岗位0820工作岗位0820需求工作岗位0820需求-系分
3.用工模式调整0917内部人员转外包用工系统需求2内部人员转外包用工系统需求-系分
sso(账号中心-单点登录)
项目架构说明aboss-sso项目架构入门AOP统一日志打印链路Maven多模块项目高级知识OAuth2.0
项目说明1.SSO-OAuth2.0与IDaaS登录流程2.外部账号创建流水号并发问题分析
AI
使用说明
第三方插件&技能简介Archify使用与安装指南Ponytail使用指南
CodexCodex CLI与IDE区别及使用指南Codex Hook单独配置与提交通知Codex MCP安装与使用指南Codex第三方插件安装与使用指南
Agent开发1.LLM、Token、上下文窗口与模型参数2.大模型 API、请求参数与响应结构3.Spring AI ChatClient4.Prompt、System Prompt、Prompt 模板6.结构化输出、JSON Schema7.SSE 流式响应8.会话 ID、聊天记录、Redis9.超时、重试、限流、降级10.完成可运行聊天接口
GitGit常用命令与Obsidian推送排查
Java
面试题Java基础与集合面试题
AtomicInteger原子计数与并发安全ConcurrentHashMap并发安全与计数Java线程、线程池与Future
python
基础Python基础语法
HTTPXHRMS员工详情接口调用(Python HTTPX)

https://cic_irc.yuque.com/tyl581/ggwv9w/kqq2zumnm4w057wy

case1:根据出单机构获取所属省市区

说明组织机构管营一体概念与用法:出单机构的可选范围/用法。

1、组织员工岗位对外接口文档:接口2.根据组织编码查询path详情。

2、对结果进行逆序。

3、取最近的一个经营组织。获取经营组织的详情(所属省市区)。

OrganizationCodeDTO organizationCodeDTO = new OrganizationCodeDTO();
organizationCodeDTO.setBranchOrgCode("出单机构");
ResultModelSupport<List<OrgInfoDTO>> organizationInfoList = organizationRpcFacade.getOrganizationPathByCode(organizationCodeDTO);
if (CollectionUtils.isEmpty(organizationInfoList.getData())) {
    //处理自己的异常提示
    return new ArrayList<>();
}
List<OrgInfoDTO> data = organizationInfoList.getData();
//对结果进行逆序
Collections.reverse(data);
for (OrgInfoDTO orgInfoDTO : data) {
    //查找最近的经营组织
    if (orgInfoDTO.getBranchOrgType() == 0) {
        //直接获取经营组织详情
        OrgOperationDetailDTO orgOperationDetailDTO = orgInfoDTO.getOrgOperationDetailDTO();
        //所属省
        String belongedProvinceCode = orgOperationDetailDTO.getBelongedProvinceCode();
        //所属市
        String belongedCityCode = orgOperationDetailDTO.getBelongedCityCode();
        //所属区
        String belongedDistrictCode = orgOperationDetailDTO.getBelongedDistrictCode();
    }
}

case2:迁移aaas-facade服务转换组织树结构

对应接口3.根据组织编码查询本级以及本级以下所有组织列表(包含子孙节点)

文档地址:组织员工岗位对外接口文档

1、获取List

OrganizationCodeDTO organizationCodeDTO = new OrganizationCodeDTO();
ResultModelSupport<List<OrgInfoDTO>> orgChildByParentCode = organizationRpcFacade.getOrgChildByParentCode(organizationCodeDTO);

2、aaas-facade服务中AbossBranchOrganizationSimpleTreeDTO对象

根据各自的使用场景可以适当精简AbossBranchOrganizationSimpleTreeDTO对象的字段:

import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * @author dongyikuan
 * @version 1.0.0
 * @ClassName AbossBranchOrganizationSimpleTreeDTO.java
 * @Description AbossBranchOrganizationSimpleTreeDTO information
 * @createTime 2023年09月21日 16:14:00
 */
@Data
public class AbossBranchOrganizationSimpleTreeDTO implements Serializable {
    /**
     * 分支机构编码
     */
    private String branchOrgCode;
    /**
     * 分支机构名称
     */
    private String branchOrgName;
    /**
     * 分支机构状态
     */
    private String branchOrgStatus;
    /**
     * 分支机构简称
     */
    private String simpleName;
    /**
     * 分支机构上级编码
     */
    private String branchOrgParentCode;
    /**
     * 分支机构上级名称
     */
    private String branchOrgParentName;
    /**
     * path
     */
    private String branchOrgPath;
    /**
     * 是否专营机构
     */
    private String orgIsFranchise;
    /**
     * 专营类型
     */
    private String orgFranchiseType;
    /**
     * 是否设立出单组织
     */
    private String orgIsSetIssue;
    /**
     * 设立独立账套
     */
    private String orgIsSetBooks;
    /**
     * 机构类型:0.经营组织,1.管理组织,2.销售组织,3.外部组织
     */
    private Integer branchOrgType;
    /**
     * 经营组织状态
     */
    private String branchOrgState;
    /**
     * 所属地域类型
     */
    private String branchOrgRegionType;
    /**
     * 分支机构层级
     */
    private String branchOrgHierarchy;
    /**
     * 分支机构级别
     */
    private String branchOrgLevel;
    /**
     * 是否管营一体
     */
    private String isManageOperation;
    /**
     * 所属省
     */
    private String provinceCode;
    /**
     * 所属市
     */
    private String cityCode;
    /**
     * 所属区
     */
    private String countyCode;
    private List<AbossBranchOrganizationSimpleTreeDTO> childBranchOrgList;
}

3、OrgInfoDTO 转换 AbossBranchOrganizationSimpleTreeDTO赋值

//获取data
List<OrgInfoDTO> orgInfoDTOList = orgChildByParentCode.getData();
if (CollectionUtils.isEmpty(orgInfoDTOList)) {
    return new ArrayList<OrgInfoDTO>;
}
//转换map,赋值branchOrgParentName
Map<String, OrgInfoDTO> orgInfoDTOMap = orgInfoDTOList.stream().collect(Collectors.toMap(dto -> dto.getBranchOrgCode(), dto -> dto, (k1, k2) -> k1));
//OrgInfoDTO 转换 AbossBranchOrganizationSimpleTreeDTO
List<AbossBranchOrganizationSimpleTreeDTO> simpleTreeDTOList = new ArrayList<>();
orgInfoDTOList.stream().forEach(orgInfoDTO -> {
                    AbossBranchOrganizationSimpleTreeDTO abossBranchOrganizationSimpleTreeDTO = new AbossBranchOrganizationSimpleTreeDTO();
                    abossBranchOrganizationSimpleTreeDTO.setBranchOrgCode(orgInfoDTO.getBranchOrgCode());
                    abossBranchOrganizationSimpleTreeDTO.setBranchOrgType(orgInfoDTO.getBranchOrgType());
                    abossBranchOrganizationSimpleTreeDTO.setBranchOrgName(orgInfoDTO.getOrgBasicDetailDTO().getBranchOrgName());
                    abossBranchOrganizationSimpleTreeDTO.setBranchOrgStatus(String.valueOf(orgInfoDTO.getOrgBasicDetailDTO().getBranchOrgStatus()));
                    abossBranchOrganizationSimpleTreeDTO.setSimpleName(orgInfoDTO.getOrgBasicDetailDTO().getBranchOrgSimpleName());
                    abossBranchOrganizationSimpleTreeDTO.setBranchOrgParentCode(orgInfoDTO.getOrgBasicDetailDTO().getBranchOrgManageParentCode());
                    abossBranchOrganizationSimpleTreeDTO.setBranchOrgPath(orgInfoDTO.getOrgBasicDetailDTO().getBranchOrgManagePath());
                    abossBranchOrganizationSimpleTreeDTO.setBranchOrgParentName(
                            "210000000000".equals(orgInfoDTO.getOrgBasicDetailDTO().getBranchOrgManageParentCode()) ?
                                    "中华联合财产保险股份有限公司" : Objects.nonNull(orgInfoDTOMap.get(orgInfoDTO.getOrgBasicDetailDTO().getBranchOrgManageParentCode())) ?
                                    orgInfoDTOMap.get(orgInfoDTO.getOrgBasicDetailDTO().getBranchOrgManageParentCode()).getOrgBasicDetailDTO().getBranchOrgName() : null);
                    abossBranchOrganizationSimpleTreeDTO.setOrgIsSetIssue(
                            orgInfoDTO.getBranchOrgType() == 0 ? orgInfoDTO.getOrgOperationDetailDTO().getIsSetIssue() : orgInfoDTO.getBranchOrgType() == 1 ?
                                    orgInfoDTO.getOrgManageDetailDTO().getIsSetIssue() : null);
                    if (Objects.nonNull(orgInfoDTO.getOrgOperationDetailDTO())) {
                        abossBranchOrganizationSimpleTreeDTO.setOrgIsFranchise(orgInfoDTO.getOrgOperationDetailDTO().getIsFranchise());
                        abossBranchOrganizationSimpleTreeDTO.setOrgFranchiseType(orgInfoDTO.getOrgOperationDetailDTO().getFranchiseType());
                        abossBranchOrganizationSimpleTreeDTO.setOrgIsSetBooks(orgInfoDTO.getOrgOperationDetailDTO().getIsSetBooks());
                        abossBranchOrganizationSimpleTreeDTO.setBranchOrgState(orgInfoDTO.getOrgOperationDetailDTO().getBranchOrgState());
                        abossBranchOrganizationSimpleTreeDTO.setBranchOrgRegionType(orgInfoDTO.getOrgOperationDetailDTO().getBelongedRegionType());
                        abossBranchOrganizationSimpleTreeDTO.setBranchOrgHierarchy(orgInfoDTO.getOrgOperationDetailDTO().getBranchOrgHierarchy());
                        abossBranchOrganizationSimpleTreeDTO.setBranchOrgLevel(orgInfoDTO.getOrgOperationDetailDTO().getBranchOrgLevel());
                        abossBranchOrganizationSimpleTreeDTO.setProvinceCode(orgInfoDTO.getOrgOperationDetailDTO().getBelongedProvinceCode());
                        abossBranchOrganizationSimpleTreeDTO.setCityCode(orgInfoDTO.getOrgOperationDetailDTO().getBelongedCityCode());
                        abossBranchOrganizationSimpleTreeDTO.setCountyCode(orgInfoDTO.getOrgOperationDetailDTO().getBelongedDistrictCode());
                    }
                    abossBranchOrganizationSimpleTreeDTO.setIsManageOperation(
                            Objects.nonNull(orgInfoDTO.getOrgManageDetailDTO()) ? orgInfoDTO.getOrgManageDetailDTO().getIsBothManageOperation() : null);
                    simpleTreeDTOList.add(abossBranchOrganizationSimpleTreeDTO);
});

List<AbossBranchOrganizationSimpleTreeDTO> organizationSimpleTreeDTOList = changeBranchOrganizationSimpleTree(simpleTreeDTOList);

return organizationSimpleTreeDTOList;

4、转换树结构

private List<AbossBranchOrganizationSimpleTreeDTO> changeBranchOrganizationSimpleTree(List<AbossBranchOrganizationSimpleTreeDTO> abossBranchOrganizationSimpleTreeDTOS) {
    Map<String, AbossBranchOrganizationSimpleTreeDTO> map = abossBranchOrganizationSimpleTreeDTOS.stream().collect(Collectors.toMap(dto -> dto.getBranchOrgCode(), dto -> dto, (k1, k2) -> k1));
    List<AbossBranchOrganizationSimpleTreeDTO> targetList = new ArrayList<>();
    Iterator<AbossBranchOrganizationSimpleTreeDTO> iterator = abossBranchOrganizationSimpleTreeDTOS.iterator();
    while (iterator.hasNext()) {
        AbossBranchOrganizationSimpleTreeDTO it = iterator.next();
        if (map.containsKey(it.getBranchOrgParentCode())) {
            AbossBranchOrganizationSimpleTreeDTO innerDto = map.get(it.getBranchOrgParentCode());
            List<AbossBranchOrganizationSimpleTreeDTO> child = innerDto.getChildBranchOrgList();
            if (CollectionUtils.isEmpty(child)) {
                child = new ArrayList<>();
                child.add(it);
                innerDto.setChildBranchOrgList(child);
            } else {
                child.add(it);
            }
        } else {
            targetList.add(it);
        }
    }
    return targetList;
}

case3:根据员工工号获取员工所在的分公司

1、获取员工的归属组织,branchOrgCode。

2、根据归属组织获取path详情。

EmployeeCodeQueryDTO employeeCodeQueryDTO = new EmployeeCodeQueryDTO();
        employeeCodeQueryDTO.setEmployeeCodeList("员工编码集合");
        PageResultModelSupport<PageInfo<EmployeeInfoDTO>> employeeInfoByCodes = employeeBasicRpcFacade.getEmployeeInfoByCodes(employeeCodeQueryDTO);
        List<EmployeeInfoDTO> employeeInfoDTOList = (List<EmployeeInfoDTO>) employeeInfoByCodes.getData();
        if (CollectionUtils.isEmpty(employeeInfoDTOList)) {
            //处理自己的异常提示
            return new ArrayList<>();
        }
        employeeInfoDTOList.stream().forEach(employeeInfoDTO -> {
            //员工的归属组织
            String branchOrgCode = employeeInfoDTO.getBranchOrgCode();
            //根据员工归属组织获取path详情
            OrganizationCodeDTO organizationCodeDTO = new OrganizationCodeDTO();
            organizationCodeDTO.setBranchOrgCode(branchOrgCode);
            ResultModelSupport<List<OrgInfoDTO>> organizationInfoList = organizationRpcFacade.getOrganizationPathByCode(organizationCodeDTO);
            if (CollectionUtils.isEmpty(organizationInfoList.getData())) {
                //处理自己的异常提示
                return new ArrayList<>();
            }
            List<OrgInfoDTO> data = organizationInfoList.getData();
            OrgInfoDTO orgInfoDTO = data.stream()
                    .filter(infoDTO -> infoDTO.getBranchOrgType() == 0)
                    .filter(infoDTO -> infoDTO.getOrgOperationDetailDTO().getBranchOrgHierarchy().equals("1"))
                    .findFirst().get();
            //orgInfoDTO 就是分公司详情。
        });

case4:OrgInfoDTO转换AbossBranchTreeResDTO

/**
     * orgInfoDTOList 转换 abossBranchTreeResDTOList
     *
     * @param orgInfoDTOList
     * @return
     */
public static List<AbossBranchTreeResDTO> convertListByManage(List<OrgInfoDTO> orgInfoDTOList) {
    //转换map,赋值branchOrgParentName
    Map<String, OrgInfoDTO> orgInfoDTOMap = orgInfoDTOList.stream().collect(Collectors.toMap(dto -> dto.getBranchOrgCode(), dto -> dto, (k1, k2) -> k1));
    //OrgInfoDTO 转换 AbossBranchTreeResDTO
    return orgInfoDTOList.stream().map(orgInfoDTO -> convertByManage(orgInfoDTO, orgInfoDTOMap)).collect(Collectors.toList());
}

🚩🚩****如果仅仅需要某一种类型的组织,可以按照类型去获取对应的组织DTO,一个组织只会有一种类型。

    /**
     * OrgInfoDTO 转换 AbossBranchTreeResDTO
     *
     * @param orgInfoDTO
     * @param orgInfoDTOMap
     * @return
     */
    private static AbossBranchTreeResDTO convertByManage(OrgInfoDTO orgInfoDTO, Map<String, OrgInfoDTO> orgInfoDTOMap) {
        AbossBranchTreeResDTO abossBranchTreeResDTO = new AbossBranchTreeResDTO();
        abossBranchTreeResDTO.setBranchOrgCode(orgInfoDTO.getBranchOrgCode());
        //获取基本信息
        getOrgBasicInfoByManage(orgInfoDTO, orgInfoDTOMap, abossBranchTreeResDTO);
        //获取经营组织
        if (Objects.nonNull(orgInfoDTO.getOrgOperationDetailDTO())) {
            getOperationOrgInfo(orgInfoDTO, abossBranchTreeResDTO);
        }
        //获取管理组织
        if (Objects.nonNull(orgInfoDTO.getOrgManageDetailDTO())) {
            OrgManageDetailDTO orgManageDetailDTO = orgInfoDTO.getOrgManageDetailDTO();
            abossBranchTreeResDTO.setIsManageOpreation(orgManageDetailDTO.getIsBothManageOperation());
            abossBranchTreeResDTO.setIsClaimsDept(orgManageDetailDTO.getIsClaimsDept());
            abossBranchTreeResDTO.setOrgIsSetIssue(orgManageDetailDTO.getIsSetIssue());
            abossBranchTreeResDTO.setBranchOrgUnitType(orgManageDetailDTO.getBranchOrgUnitTypeManage());
        }
        //获取销售组织
        if (Objects.nonNull(orgInfoDTO.getOrgSaleDetaiDTO())) {
            OrgSaleDetaiDTO orgSaleDetaiDTO = orgInfoDTO.getOrgSaleDetaiDTO();
            abossBranchTreeResDTO.setBranchOrgManagementChannel(orgSaleDetaiDTO.getBranchOrgOperationChannel());
            abossBranchTreeResDTO.setBranchOrgUnitType(orgSaleDetaiDTO.getBranchOrgUnitTypeSale());
        }
        return abossBranchTreeResDTO;
    }
    /**
     * 获取基本信息
     *
     * @param orgInfoDTO
     * @param orgInfoDTOMap
     * @param abossBranchTreeResDTO
     */
    private static void getOrgBasicInfoByManage(OrgInfoDTO orgInfoDTO, Map<String, OrgInfoDTO> orgInfoDTOMap, AbossBranchTreeResDTO abossBranchTreeResDTO) {
        OrgBasicDetailDTO orgBasicDetailDTO = orgInfoDTO.getOrgBasicDetailDTO();
        abossBranchTreeResDTO.setBranchOrgName(orgBasicDetailDTO.getBranchOrgName());
        abossBranchTreeResDTO.setBranchOrgSimpleName(orgBasicDetailDTO.getBranchOrgSimpleName());
        abossBranchTreeResDTO.setBranchOrgType(String.valueOf(orgInfoDTO.getBranchOrgType()));

        //行政维度
        abossBranchTreeResDTO.setBranchOrgParentCode(orgBasicDetailDTO.getBranchOrgManageParentCode());
        abossBranchTreeResDTO.setBranchOrgPath(orgBasicDetailDTO.getBranchOrgManagePath());
        OrgInfoDTO parentOrgInfoDTO = orgInfoDTOMap.get(orgBasicDetailDTO.getBranchOrgManageParentCode());

        abossBranchTreeResDTO.setBranchOrgParentName(Objects.nonNull(parentOrgInfoDTO) ? parentOrgInfoDTO.getOrgBasicDetailDTO().getBranchOrgName() : null);
        abossBranchTreeResDTO.setOrgIsSetIssue(orgInfoDTO.getBranchOrgType() == 0 ? orgInfoDTO.getOrgOperationDetailDTO().getIsSetIssue() : orgInfoDTO.getBranchOrgType() == 1 ? orgInfoDTO.getOrgManageDetailDTO().getIsSetIssue() : null);
    }

    /**
     * 获取经营组织
     *
     * @param orgInfoDTO
     * @param abossBranchTreeResDTO
     */
    private static void getOperationOrgInfo(OrgInfoDTO orgInfoDTO, AbossBranchTreeResDTO abossBranchTreeResDTO) {
        OrgOperationDetailDTO orgOperationDetailDTO = orgInfoDTO.getOrgOperationDetailDTO();
        abossBranchTreeResDTO.setOrgIsFranchise(orgOperationDetailDTO.getIsFranchise());
        abossBranchTreeResDTO.setOrgFranchiseType(orgOperationDetailDTO.getFranchiseType());
        abossBranchTreeResDTO.setOrgIsSetBooks(orgOperationDetailDTO.getIsSetBooks());
        abossBranchTreeResDTO.setBranchOrgHierarchy(orgOperationDetailDTO.getBranchOrgHierarchy());
        abossBranchTreeResDTO.setBranchOrgLevel(orgOperationDetailDTO.getBranchOrgLevel());
        abossBranchTreeResDTO.setBelongRegionType(orgOperationDetailDTO.getBelongedRegionType());
        abossBranchTreeResDTO.setBranchOrgRegionType(orgOperationDetailDTO.getBelongedRegionType());
        abossBranchTreeResDTO.setBranchOrgCategory(orgOperationDetailDTO.getBranchOrgCategory());
        abossBranchTreeResDTO.setOrgIsSetIssue(orgOperationDetailDTO.getIsSetIssue());
    }