diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/integration/iwork/impl/IWorkOrgRestServiceImpl.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/integration/iwork/impl/IWorkOrgRestServiceImpl.java index 6af85650..89133941 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/integration/iwork/impl/IWorkOrgRestServiceImpl.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/integration/iwork/impl/IWorkOrgRestServiceImpl.java @@ -280,7 +280,8 @@ public class IWorkOrgRestServiceImpl implements IWorkOrgRestService { respVO.setCode(envelope.code()); respVO.setMessage(envelope.message()); respVO.setSuccess(envelope.success()); - if (!envelope.success()) { + JsonNode dataNode = envelope.success() ? readNode(envelope.root(), "data") : null; + if (dataNode == null) { respVO.setTotalSize(0); respVO.setTotalPage(0); respVO.setPageSize(0); @@ -288,11 +289,10 @@ public class IWorkOrgRestServiceImpl implements IWorkOrgRestService { respVO.setDataList(Collections.emptyList()); return respVO; } - JsonNode dataNode = requireNode(envelope.root(), "data"); - respVO.setTotalSize(readInt(dataNode, "totalSize")); - respVO.setTotalPage(readInt(dataNode, "totalPage")); - respVO.setPageSize(readInt(dataNode, "pageSize")); - respVO.setPageNumber(readInt(dataNode, "pageNumber")); + respVO.setTotalSize(readInt(dataNode, 0, "totalSize")); + respVO.setTotalPage(readInt(dataNode, 0, "totalPage", "totalPageCount")); + respVO.setPageSize(readInt(dataNode, 0, "pageSize", "pagesize")); + respVO.setPageNumber(readInt(dataNode, 0, "pageNumber", "page", "curpage")); respVO.setDataList(readList(dataNode, "dataList", SUBCOMPANY_LIST_TYPE)); return respVO; } @@ -304,7 +304,8 @@ public class IWorkOrgRestServiceImpl implements IWorkOrgRestService { respVO.setCode(envelope.code()); respVO.setMessage(envelope.message()); respVO.setSuccess(envelope.success()); - if (!envelope.success()) { + JsonNode dataNode = envelope.success() ? readNode(envelope.root(), "data") : null; + if (dataNode == null) { respVO.setTotalSize(0); respVO.setTotalPage(0); respVO.setPageSize(0); @@ -312,11 +313,10 @@ public class IWorkOrgRestServiceImpl implements IWorkOrgRestService { respVO.setDataList(Collections.emptyList()); return respVO; } - JsonNode dataNode = requireNode(envelope.root(), "data"); - respVO.setTotalSize(readInt(dataNode, "totalSize")); - respVO.setTotalPage(readInt(dataNode, "totalPage")); - respVO.setPageSize(readInt(dataNode, "pageSize")); - respVO.setPageNumber(readInt(dataNode, "pageNumber")); + respVO.setTotalSize(readInt(dataNode, 0, "totalSize")); + respVO.setTotalPage(readInt(dataNode, 0, "totalPage", "totalPageCount")); + respVO.setPageSize(readInt(dataNode, 0, "pageSize", "pagesize")); + respVO.setPageNumber(readInt(dataNode, 0, "pageNumber", "page", "curpage")); respVO.setDataList(readList(dataNode, "dataList", DEPARTMENT_LIST_TYPE)); return respVO; } @@ -328,7 +328,8 @@ public class IWorkOrgRestServiceImpl implements IWorkOrgRestService { respVO.setCode(envelope.code()); respVO.setMessage(envelope.message()); respVO.setSuccess(envelope.success()); - if (!envelope.success()) { + JsonNode dataNode = envelope.success() ? readNode(envelope.root(), "data") : null; + if (dataNode == null) { respVO.setTotalSize(0); respVO.setTotalPage(0); respVO.setPageSize(0); @@ -336,11 +337,10 @@ public class IWorkOrgRestServiceImpl implements IWorkOrgRestService { respVO.setDataList(Collections.emptyList()); return respVO; } - JsonNode dataNode = requireNode(envelope.root(), "data"); - respVO.setTotalSize(readInt(dataNode, "totalSize")); - respVO.setTotalPage(readInt(dataNode, "totalPage")); - respVO.setPageSize(readInt(dataNode, "pageSize")); - respVO.setPageNumber(readInt(dataNode, "pageNumber")); + respVO.setTotalSize(readInt(dataNode, 0, "totalSize")); + respVO.setTotalPage(readInt(dataNode, 0, "totalPage", "totalPageCount")); + respVO.setPageSize(readInt(dataNode, 0, "pageSize", "pagesize")); + respVO.setPageNumber(readInt(dataNode, 0, "pageNumber", "page", "curpage")); respVO.setDataList(readList(dataNode, "dataList", JOB_TITLE_LIST_TYPE)); return respVO; } @@ -352,7 +352,8 @@ public class IWorkOrgRestServiceImpl implements IWorkOrgRestService { respVO.setCode(envelope.code()); respVO.setMessage(envelope.message()); respVO.setSuccess(envelope.success()); - if (!envelope.success()) { + JsonNode dataNode = envelope.success() ? readNode(envelope.root(), "data") : null; + if (dataNode == null) { respVO.setTotalSize(0); respVO.setTotalPage(0); respVO.setPageSize(0); @@ -360,11 +361,10 @@ public class IWorkOrgRestServiceImpl implements IWorkOrgRestService { respVO.setDataList(Collections.emptyList()); return respVO; } - JsonNode dataNode = requireNode(envelope.root(), "data"); - respVO.setTotalSize(readInt(dataNode, "totalSize")); - respVO.setTotalPage(readInt(dataNode, "totalPage")); - respVO.setPageSize(readInt(dataNode, "pageSize")); - respVO.setPageNumber(readInt(dataNode, "pageNumber")); + respVO.setTotalSize(readInt(dataNode, 0, "totalSize")); + respVO.setTotalPage(readInt(dataNode, 0, "totalPage", "totalPageCount")); + respVO.setPageSize(readInt(dataNode, 0, "pageSize", "pagesize")); + respVO.setPageNumber(readInt(dataNode, 0, "pageNumber", "page", "curpage")); respVO.setDataList(readList(dataNode, "dataList", USER_LIST_TYPE)); return respVO; } @@ -408,33 +408,50 @@ public class IWorkOrgRestServiceImpl implements IWorkOrgRestService { return new ParsedEnvelope(code, message, success, node); } - private JsonNode requireNode(JsonNode parent, String field) { - // 强制要求下游节点存在,避免静默回退 - if (parent == null || !parent.has(field) || parent.get(field).isNull()) { - throw ServiceExceptionUtil.exception(IWORK_ORG_REMOTE_FAILED, "iWork 响应缺少字段: " + field); + private JsonNode readNode(JsonNode parent, String field) { + if (parent == null || !parent.has(field)) { + return null; } - return parent.get(field); + JsonNode value = parent.get(field); + return value == null || value.isNull() ? null : value; } - private int readInt(JsonNode parent, String field) { - JsonNode valueNode = requireNode(parent, field); - if (valueNode.isNumber()) { - return valueNode.intValue(); + private int readInt(JsonNode parent, int defaultValue, String... fieldNames) { + if (parent == null || fieldNames == null) { + return defaultValue; } - if (valueNode.isTextual()) { - try { - return Integer.parseInt(valueNode.asText()); - } catch (NumberFormatException ex) { - throw ServiceExceptionUtil.exception(IWORK_ORG_REMOTE_FAILED, "iWork 字段格式错误: " + field); + for (String field : fieldNames) { + if (!StringUtils.hasText(field)) { + continue; } + JsonNode valueNode = readNode(parent, field); + if (valueNode == null) { + continue; + } + if (valueNode.isNumber()) { + return valueNode.intValue(); + } + if (valueNode.isTextual()) { + try { + return Integer.parseInt(valueNode.asText()); + } catch (NumberFormatException ex) { + log.warn("[iWork-Org] 字段格式非数值,使用默认值: {}", field); + return defaultValue; + } + } + log.warn("[iWork-Org] 字段类型非整数,使用默认值: {}", field); + return defaultValue; } - throw ServiceExceptionUtil.exception(IWORK_ORG_REMOTE_FAILED, "iWork 字段类型错误: " + field); + return defaultValue; } private List readList(JsonNode parent, String field, TypeReference> typeReference) { - JsonNode arrayNode = requireNode(parent, field); + JsonNode arrayNode = readNode(parent, field); + if (arrayNode == null) { + return Collections.emptyList(); + } if (!arrayNode.isArray()) { - throw ServiceExceptionUtil.exception(IWORK_ORG_REMOTE_FAILED, "iWork 字段必须为数组: " + field); + log.warn("[iWork-Org] 字段应为数组但实际不是,尝试转换: {}", field); } return objectMapper.convertValue(arrayNode, typeReference); }