feat(REQ-3581) - 增加监听电子签的事件
This commit is contained in:
parent
b9725fe6a1
commit
d63beeb53b
@ -0,0 +1,136 @@
|
||||
package cn.axzo.nanopart.visa.server.mq.listener.ess;
|
||||
|
||||
import cn.axzo.apollo.workspace.api.workspace.req.GetWorkspaceDetailReq;
|
||||
import cn.axzo.apollo.workspace.api.workspace.res.GetWorkspaceDetailRes;
|
||||
import cn.axzo.basics.common.util.AssertUtil;
|
||||
import cn.axzo.framework.rocketmq.Event;
|
||||
import cn.axzo.framework.rocketmq.EventConsumer;
|
||||
import cn.axzo.framework.rocketmq.EventHandler;
|
||||
import cn.axzo.nanopart.ess.api.domain.contract.EssApproveDetail;
|
||||
import cn.axzo.nanopart.ess.api.domain.contract.EssContractInfo;
|
||||
import cn.axzo.nanopart.ess.api.enums.EssContractState;
|
||||
import cn.axzo.nanopart.ess.api.mq.EssContractStateChangeMessage;
|
||||
import cn.axzo.nanopart.ess.api.request.SaveContractSnapshotRequest;
|
||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecord;
|
||||
import cn.axzo.nanopart.visa.server.domain.ChangeRecordRelation;
|
||||
import cn.axzo.nanopart.visa.server.dto.VisaRelationDto;
|
||||
import cn.axzo.nanopart.visa.server.rpc.EssGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.WorkflowGateway;
|
||||
import cn.axzo.nanopart.visa.server.rpc.WorkspaceGateway;
|
||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordRelationService;
|
||||
import cn.axzo.nanopart.visa.server.service.ChangeRecordService;
|
||||
import cn.axzo.workflow.common.enums.BpmnProcessInstanceResultEnum;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.axzo.nanopart.ess.api.enums.EssContractApproveState.ACCEPT;
|
||||
import static cn.axzo.nanopart.ess.api.enums.MQEvent.ESS_CONTRACT_DOWNLOAD_PDF;
|
||||
import static cn.axzo.nanopart.visa.api.enums.VisaRelationFieldEnum.PROCESS_INSTANCE_OF_ESS;
|
||||
|
||||
/**
|
||||
* 腾讯电子签的处理器
|
||||
*
|
||||
* @author wangli
|
||||
* @since 2025-02-26 15:37
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class EssAllEventHandler implements EventHandler, InitializingBean {
|
||||
@Resource
|
||||
private EventConsumer eventConsumer;
|
||||
@Resource
|
||||
private EssGateway essGateway;
|
||||
@Resource
|
||||
private WorkflowGateway workflowGateway;
|
||||
@Resource
|
||||
private WorkspaceGateway workspaceGateway;
|
||||
@Resource
|
||||
private ChangeRecordService changeRecordService;
|
||||
@Resource
|
||||
private ChangeRecordRelationService changeRecordRelationService;
|
||||
|
||||
@Override
|
||||
public void onEvent(Event event, EventConsumer.Context context) {
|
||||
if (Objects.isNull(event) || Objects.isNull(event.getEventCode())) {
|
||||
log.warn("illegal event code: {}", JSON.toJSONString(event));
|
||||
return;
|
||||
}
|
||||
log.info("all ess event handle : {}", JSON.toJSONString(event));
|
||||
EssContractStateChangeMessage essContractStateChangeMessage = event.normalizedData(EssContractStateChangeMessage.class);
|
||||
EssContractInfo contract = essContractStateChangeMessage.getContract();
|
||||
AssertUtil.isTrue(Objects.nonNull(essContractStateChangeMessage) && Objects.nonNull(contract), "腾讯电子签事件对象异常");
|
||||
|
||||
if (Objects.equals(EssContractState.ALL, contract.getState())) {
|
||||
// 所有单位都完成签署
|
||||
SaveContractSnapshotRequest request = new SaveContractSnapshotRequest();
|
||||
request.setEssContractId(contract.getEssContractId());
|
||||
essGateway.saveContractSnapshot(request);
|
||||
}
|
||||
Optional<ChangeRecord> optVisa = changeRecordService.lambdaQuery().eq(ChangeRecord::getContractId, contract.getEssContractId())
|
||||
.oneOpt();
|
||||
// 取消用印会清空合同 id,这里兼容该情况
|
||||
optVisa.ifPresent(changeRecord -> {
|
||||
log.info("change record : {}", JSON.toJSONString(changeRecord));
|
||||
Map<Long, EssApproveDetail> ouStampStateMap = contract.getApproveDetails().stream()
|
||||
.filter(i -> Objects.nonNull(i.getSignPerson()))
|
||||
.collect(Collectors.toMap(i -> i.getSignPerson().getOuId(), Function.identity(), (s, t) -> s));
|
||||
|
||||
List<ChangeRecordRelation> essInstances = changeRecordRelationService.findByCondition(VisaRelationDto.builder()
|
||||
.visaId(changeRecord.getId())
|
||||
.varName(PROCESS_INSTANCE_OF_ESS.name())
|
||||
.contentExt(BpmnProcessInstanceResultEnum.PROCESSING.getStatus())
|
||||
.build());
|
||||
|
||||
essInstances.forEach(i -> {
|
||||
EssApproveDetail approveDetail = ouStampStateMap.get(Long.valueOf(i.getVarExt()));
|
||||
if (Objects.nonNull(approveDetail) && Objects.equals(ACCEPT, approveDetail.getState())) {
|
||||
|
||||
// 获取单位的企业工作台
|
||||
List<GetWorkspaceDetailRes> workspaces = workspaceGateway.getWorkspace(GetWorkspaceDetailReq.builder()
|
||||
.organizationUnitId(approveDetail.getOuId())
|
||||
.type(1)
|
||||
.build());
|
||||
AssertUtil.isTrue(CollectionUtils.isNotEmpty(workspaces) && workspaces.size() == 1, "未获取到企业工作台信息");
|
||||
GetWorkspaceDetailRes entWorkspace = workspaces.get(0);
|
||||
|
||||
// 同意审批和待办
|
||||
BpmnTaskAuditDTO auditDTO = new BpmnTaskAuditDTO();
|
||||
auditDTO.setTaskId(findTaskId(i.getContentExt(), String.valueOf(approveDetail.getSignPerson().getPersonId())));
|
||||
auditDTO.setApprover(BpmnTaskDelegateAssigner.builder()
|
||||
.tenantId(String.valueOf(entWorkspace.getId()))
|
||||
.ouId(String.valueOf(approveDetail.getOuId()))
|
||||
.personId(String.valueOf(approveDetail.getSignPerson().getPersonId()))
|
||||
.build());
|
||||
log.info("audit info : {}", JSON.toJSONString(auditDTO));
|
||||
workflowGateway.approveProcessInstance(auditDTO);
|
||||
log.info("audit info success");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
log.info("all ess event handle success: {}", JSON.toJSONString(event));
|
||||
}
|
||||
|
||||
private String findTaskId(String processInstanceId, String personId) {
|
||||
return workflowGateway.findTaskIdByInstanceIdAndPersonId(processInstanceId, personId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
eventConsumer.registerHandler(ESS_CONTRACT_DOWNLOAD_PDF.getEventCode(), this);
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,7 @@ import cn.axzo.nanopart.ess.api.EssApi;
|
||||
import cn.axzo.nanopart.ess.api.domain.EssOrgAndSealInfo;
|
||||
import cn.axzo.nanopart.ess.api.request.CreateContractByFileRequest;
|
||||
import cn.axzo.nanopart.ess.api.request.GetSealsRequest;
|
||||
import cn.axzo.nanopart.ess.api.request.SaveContractSnapshotRequest;
|
||||
import cn.axzo.nanopart.ess.api.response.CreateContractByFileResponse;
|
||||
import cn.axzo.pokonyan.util.RpcUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -32,4 +33,8 @@ public class EssGateway {
|
||||
public List<EssOrgAndSealInfo> getOrgEnabledSeals(GetSealsRequest request) {
|
||||
return RpcUtil.rpcApiResultProcessor(() -> essApi.getOrgEnabledSeals(request), "查询单位已启用的印章以及授权人员列表", request);
|
||||
}
|
||||
|
||||
public void saveContractSnapshot(SaveContractSnapshotRequest request) {
|
||||
RpcUtil.rpcApiResultProcessor(() -> essApi.saveContractSnapshot(request), "从腾讯电子签下载合同PDF文件", request);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.axzo.workflow.common.model.request.bpmn.process.BeforeProcessInstanceC
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceAbortDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCheckApproverDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.process.BpmnProcessInstanceCreateDTO;
|
||||
import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskAuditDTO;
|
||||
import cn.axzo.workflow.common.model.request.form.instance.FormVariablesUpdateDTO;
|
||||
import cn.axzo.workflow.common.model.response.bpmn.process.NodesByModelVO;
|
||||
import cn.axzo.workflow.starter.api.WorkflowCoreService;
|
||||
@ -70,4 +71,14 @@ public class WorkflowGateway {
|
||||
public List<NodesByModelVO> nodesBeforeCreateProcessInstance(BeforeProcessInstanceCreateDTO dto) {
|
||||
return workflowCoreService.nodesBeforeCreateProcessInstance(dto);
|
||||
}
|
||||
|
||||
@MethodAroundLog(target = "workflow-engine", source = "nanopart", value = "同意任务")
|
||||
public void approveProcessInstance(BpmnTaskAuditDTO dto) {
|
||||
workflowCoreService.approveTask(dto);
|
||||
}
|
||||
|
||||
@MethodAroundLog(target = "workflow-engine", source = "nanopart", value = "查询指定人在指定审批中的任务 ID")
|
||||
public String findTaskIdByInstanceIdAndPersonId(String processInstanceId, String personId) {
|
||||
return workflowManageService.findTaskIdByInstanceIdAndPersonId(processInstanceId, personId);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user