iwork 人员组织同步相关,兼容 iwork 返回

This commit is contained in:
chenbowen
2025-11-25 16:41:29 +08:00
parent e2dbaf12a4
commit 2efb815d59

View File

@@ -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 <T> List<T> readList(JsonNode parent, String field, TypeReference<List<T>> 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);
}