diff --git a/src/main/java/com/weaver/seconddev/entry/action/PermissionTransferAction.java b/src/main/java/com/weaver/seconddev/entry/action/PermissionTransferAction.java new file mode 100644 index 0000000..8941dc6 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/entry/action/PermissionTransferAction.java @@ -0,0 +1,176 @@ +package com.weaver.seconddev.entry.action; + +import cn.hutool.core.convert.Convert; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.weaver.common.base.entity.result.WeaResult; +import com.weaver.esb.api.rpc.EsbServerlessRpcRemoteInterface; +import com.weaver.seconddev.entry.entity.PermissionTransferModule; +import com.weaver.seconddev.entry.entity.RoleDetail; +import com.weaver.seconddev.portal.constant.ApplicationConfigConstant; +import com.weaver.seconddev.portal.util.PapiUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author:dxfeng + * @createTime: 2025/08/04 + * @version: 1.0 + */ +@Slf4j +@Service("PermissionTransferAction") +public class PermissionTransferAction implements EsbServerlessRpcRemoteInterface { + @Override + public WeaResult> execute(Map params) { + Map returnMap = new HashMap<>(); + // 离职员工ID + String employeeId = Convert.toStr(params.get("employeeId"), null); + + // 权限转移操作人员ID + String optUserId = Convert.toStr(params.get("optUserId"), null); + + String papiCode = PapiUtil.getPapiCode(ApplicationConfigConstant.APP_URL, ApplicationConfigConstant.CORP_ID, "B2b"); + String papiToken = PapiUtil.getPapiToken(ApplicationConfigConstant.APP_URL, ApplicationConfigConstant.ORGANIZATION_APP_KEY, ApplicationConfigConstant.ORGANIZATION_APP_SECRET, papiCode); + + // 查询某个人员组织的可以转移的权限数据 + JSONObject jsonObject = new JSONObject(); + // {"type":"resource","opt":"1","targetId":"959466419596591105"} + jsonObject.put("type", "resource"); + jsonObject.put("opt", "1"); + jsonObject.put("targetId", employeeId); + jsonObject.put("access_token", papiToken); + + log.error("jsonObject===" + jsonObject); + String response = HttpRequest.post(ApplicationConfigConstant.APP_URL + "/papi/openapi/api/architecture/permission/transfer/query/v1/module") + .header("Content-Type", "application/json") + .header("optUserId", optUserId) + .body(jsonObject.toJSONString()) + .execute() + .body(); + log.error("response===" + response); + + JSONObject responseJson = JSONObject.parseObject(response); + if (responseJson.getIntValue("code") != 200) { + // 请求失败直接响应失败数据 + return WeaResult.fail(response, true); + } + JSONObject data = responseJson.getJSONObject("data"); + List permissionTransferModuleList = new ArrayList<>(); + PermissionTransferModule roleModule = null; + if (data != null) { + JSONArray permissionTransferModules = data.getJSONArray("permissionTransferModules"); + for (Object permissionTransferModule : permissionTransferModules) { + JSONObject permissionTransferModuleJson = (JSONObject) permissionTransferModule; + PermissionTransferModule module = PermissionTransferModule.builder() + .deleteType(permissionTransferModuleJson.getInteger("deleteType")) + .opt(permissionTransferModuleJson.getInteger("opt")) + .module(permissionTransferModuleJson.getString("module")) + .moduleName(permissionTransferModuleJson.getString("moduleName")) + .subModule(permissionTransferModuleJson.getString("subModule")) + .subModuleName(permissionTransferModuleJson.getString("subModuleName")) + .type(permissionTransferModuleJson.getString("type")) + .content(permissionTransferModuleJson.getString("content")) + .count(permissionTransferModuleJson.getInteger("count")) + .build(); + if ("hrm_role".equals(module.getSubModule())) { + roleModule = module; + } else { + permissionTransferModuleList.add(module); + } + } + } + + // 查询角色明细数据 + List roleDetailList = new ArrayList<>(); + getRoleDetail(employeeId, optUserId, 1, roleDetailList); + + returnMap.put("permissionTransferModuleList", permissionTransferModuleList); + returnMap.put("roleDetailList", roleDetailList); + log.error("returnMap==" + JSON.toJSONString(returnMap)); + return WeaResult.success(returnMap); + } + + + /** + * 获取角色明细数据 + * + * @param employeeId 员工ID + * @param optUserId 操作用户ID + * @param pageNum 当前页码 + * @param roleDetailList 角色明细列表 + * @param roleDetailList + */ + private void getRoleDetail(String employeeId, String optUserId, int pageNum, List roleDetailList) { + String papiCode = PapiUtil.getPapiCode(ApplicationConfigConstant.APP_URL, ApplicationConfigConstant.CORP_ID, "B3b"); + String papiToken = PapiUtil.getPapiToken(ApplicationConfigConstant.APP_URL, ApplicationConfigConstant.ORGANIZATION_APP_KEY, ApplicationConfigConstant.ORGANIZATION_APP_SECRET, papiCode); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("access_token", papiToken); + jsonObject.put("pageNum", pageNum); + jsonObject.put("pageSize", 10); + jsonObject.put("targetId", employeeId); + jsonObject.put("param", new JSONObject()); + jsonObject.put("opt", "1"); + jsonObject.put("module", "hrm"); + jsonObject.put("subModule", "hrm_role"); + jsonObject.put("type", "resource"); + log.error("getRoleDetail>>jsonObject===" + jsonObject); + String response = HttpRequest.post(ApplicationConfigConstant.APP_URL + "/papi/openapi/api/architecture/permission/transfer/query/v1/module/content") + .header("Content-Type", "application/json") + .header("optUserId", optUserId) + .body(jsonObject.toJSONString()) + .execute() + .body(); + log.error("getRoleDetail>>response===" + response); + + JSONObject responseJson = JSONObject.parseObject(response); + if (responseJson.getIntValue("code") != 200) { + // 请求失败直接响应失败数据 + log.error("response==" + response); + roleDetailList = new ArrayList<>(); + return; + } + JSONObject data = responseJson.getJSONObject("data"); + if (data != null) { + JSONObject page = data.getJSONObject("page"); + JSONArray records = page.getJSONArray("records"); + if (records.size() > 0) { + for (Object record : records) { + JSONObject recordJson = (JSONObject) record; + JSONArray columnValueList = recordJson.getJSONArray("columnValueList"); + if (columnValueList.size() > 0) { + JSONObject columnValue = columnValueList.getJSONObject(0); + RoleDetail roleDetail = RoleDetail.builder() + .sourceId(columnValue.getString("sourceId")) + .roleName(columnValue.getString("dataIndex_0")) + .functionCount(columnValue.getInteger("dataIndex_1")) + .memberCount(columnValue.getInteger("dataIndex_2")) + .build(); + roleDetailList.add(roleDetail); + } + } + } + + int pages = page.getIntValue("pages"); + if (pages > pageNum) { + getRoleDetail(employeeId, optUserId, pageNum + 1, roleDetailList); + } + } + } + + public static void main(String[] args) { + Map params = new HashMap<>(); + params.put("employeeId", "1147262704872284161"); + params.put("optUserId", "1147262704872284161"); + PermissionTransferAction permissionTransferAction = new PermissionTransferAction(); + WeaResult> execute = permissionTransferAction.execute(params); + System.out.println(JSON.toJSONString(execute)); + } +} diff --git a/src/main/java/com/weaver/seconddev/entry/entity/PermissionTransferModule.java b/src/main/java/com/weaver/seconddev/entry/entity/PermissionTransferModule.java new file mode 100644 index 0000000..4592047 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/entry/entity/PermissionTransferModule.java @@ -0,0 +1,28 @@ +package com.weaver.seconddev.entry.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2025/08/04 + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class PermissionTransferModule { + private Integer deleteType; + private Integer opt; + private String module; + private String moduleName; + private String subModule; + private String subModuleName; + private String type; + private String content; + private Integer count; + +} diff --git a/src/main/java/com/weaver/seconddev/entry/entity/RoleDetail.java b/src/main/java/com/weaver/seconddev/entry/entity/RoleDetail.java new file mode 100644 index 0000000..578b2e9 --- /dev/null +++ b/src/main/java/com/weaver/seconddev/entry/entity/RoleDetail.java @@ -0,0 +1,28 @@ +package com.weaver.seconddev.entry.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author:dxfeng + * @createTime: 2025/08/04 + * @version: 1.0 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RoleDetail { + private String sourceId; + private String roleName; + /** + * 功能权限数量 + */ + private Integer functionCount; + /** + * 成员数量 + */ + private Integer memberCount; +}