diff --git a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/contract/EssApproveDetail.java b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/contract/EssApproveDetail.java index 4f27db43..69354154 100644 --- a/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/contract/EssApproveDetail.java +++ b/ess/ess-api/src/main/java/cn/axzo/nanopart/ess/api/domain/contract/EssApproveDetail.java @@ -46,6 +46,11 @@ public class EssApproveDetail { */ private long approverDeadlineMs; + /** + * 单位id, 动态签署人在没有签署的时候可能为空 + */ + private Long ouId; + /** * 单位名称, 动态签署人在没有签署的时候可能为空 */ diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java index 6dcf3aaf..f4af4fd6 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/controller/CallbackController.java @@ -1,6 +1,7 @@ package cn.axzo.nanopart.ess.server.ess.controller; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.maokai.api.vo.response.OrganizationalUnitVO; import cn.axzo.nanopart.ess.api.EssCallbackApi; import cn.axzo.nanopart.ess.api.domain.contract.EssApproveDetail; import cn.axzo.nanopart.ess.api.enums.EssContractApproveState; @@ -23,11 +24,14 @@ import cn.axzo.nanopart.ess.server.ess.OrgManager; import cn.axzo.nanopart.ess.server.ess.domain.JsonObjectAsString; import cn.axzo.nanopart.ess.server.ess.domain.OrgOpenId; import cn.axzo.nanopart.ess.server.ess.domain.PersonOpenId; +import cn.axzo.nanopart.ess.server.ess.support.EssSupport; +import cn.axzo.nanopart.ess.server.ess.support.OrgProfiles; import com.alibaba.fastjson.JSONObject; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.springframework.beans.factory.InitializingBean; import org.springframework.transaction.support.TransactionTemplate; import org.springframework.web.bind.annotation.RestController; @@ -36,6 +40,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import static cn.axzo.nanopart.ess.api.request.CallbackRequest.ContractStateChanged; @@ -60,6 +65,7 @@ class CallbackController implements EssCallbackApi, InitializingBean { private final EssContractDao essContractDao; private final EssSealPersonDao essSealPersonDao; private final TransactionTemplate transactionTemplate; + private final EssSupport essSupport; private final Map handlers = new HashMap<>(); @Override @@ -145,6 +151,12 @@ class CallbackController implements EssCallbackApi, InitializingBean { log.warn("unknown contract state: {}", changes.getFlowStatus()); return changes.getFlowId(); } + List ouIds = changes.getFlowApproverInfo().stream() + .map(CallbackRequest.FlowApproverDetail::getProxyOrganizationOpenId) + .map(this::parseLong) + .filter(Objects::nonNull) + .collect(toList()); + OrgProfiles orgProfiles = OrgProfiles.wrap(essSupport.getOrgProfiles(ouIds)); List approveDetails = changes.getFlowApproverInfo().stream() .map(info -> { EssApproveDetail detail = new EssApproveDetail(); @@ -158,8 +170,13 @@ class CallbackController implements EssCallbackApi, InitializingBean { detail.setApproveTimeMs(info.getApproveTime() * 1000); detail.setMessage(info.getApproveMessage()); detail.setApproverDeadlineMs(info.getApproverDeadline() * 1000); - detail.setOuName(info.getProxyOrganizationName()); detail.setPhoneNumber(info.getPhoneNumber()); + Long ouId = parseLong(info.getProxyOrganizationOpenId()); + OrganizationalUnitVO org = orgProfiles.find(ouId).orElse(null); + if (org != null) { + detail.setOuName(org.getName()); + detail.setOuId(org.getId()); + } return detail; }) .collect(toList()); @@ -184,6 +201,12 @@ class CallbackController implements EssCallbackApi, InitializingBean { }); } + private Long parseLong(String value) { + if (StringUtils.isBlank(value) || !NumberUtils.isDigits(value)) + return null; + return Long.parseLong(value); + } + @Override public ApiResult callback(CallbackRequest request) { log.info("ess callback: {}", request); diff --git a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/support/OrgProfiles.java b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/support/OrgProfiles.java index 20fc6965..71ab8787 100644 --- a/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/support/OrgProfiles.java +++ b/ess/ess-server/src/main/java/cn/axzo/nanopart/ess/server/ess/support/OrgProfiles.java @@ -27,6 +27,8 @@ public class OrgProfiles { } public Optional find(Long ouId) { + if (ouId == null) + return Optional.empty(); return profiles.stream() .filter(p -> p.getId().equals(ouId)) .findFirst();