REQ-3581: 备份

This commit is contained in:
yanglin 2025-02-13 14:02:08 +08:00
parent e1015bebc2
commit ea9fde568e
13 changed files with 103 additions and 24 deletions

View File

@ -7,6 +7,7 @@ import cn.axzo.nanopart.ess.api.request.AddSealPersonsRequest;
import cn.axzo.nanopart.ess.api.request.CreateConsoleLoginUrlRequest;
import cn.axzo.nanopart.ess.api.request.CreateContractRequest;
import cn.axzo.nanopart.ess.api.request.DownloadSingedContractPdfRequest;
import cn.axzo.nanopart.ess.api.request.GetContractDetailRequest;
import cn.axzo.nanopart.ess.api.request.GetContractSignUrlRequest;
import cn.axzo.nanopart.ess.api.request.GetEmbedWebUrlRequest;
import cn.axzo.nanopart.ess.api.request.GetPersonAuthStateRequest;
@ -18,6 +19,7 @@ import cn.axzo.nanopart.ess.api.request.RevokeContractRequest;
import cn.axzo.nanopart.ess.api.response.CreateConsoleLoginUrlResponse;
import cn.axzo.nanopart.ess.api.response.CreateContractResponse;
import cn.axzo.nanopart.ess.api.response.DownloadSingedContractPdfResponse;
import cn.axzo.nanopart.ess.api.response.GetContractDetailResponse;
import cn.axzo.nanopart.ess.api.response.GetContractSignUrlResponse;
import cn.axzo.nanopart.ess.api.response.GetEmbedWebUrlResponse;
import cn.axzo.nanopart.ess.api.response.GetPersonAuthStateResponse;
@ -126,4 +128,11 @@ public interface EssApi {
ApiResult<Void> revokeContract(
@RequestBody @Valid RevokeContractRequest request);
/**
* 获取合同详情
*/
@PostMapping("api/ess/getContractDetail")
ApiResult<GetContractDetailResponse> getContractDetail(
@RequestBody @Valid GetContractDetailRequest request);
}

View File

@ -0,0 +1,20 @@
package cn.axzo.nanopart.ess.api.domain;
import cn.axzo.nanopart.ess.api.enums.EssContractApproveState;
import lombok.Getter;
import lombok.Setter;
/**
* @author yanglin
*/
@Setter
@Getter
public class EssApproverDetail {
private Long ouId;
private Long personId;
private EssContractApproveState state;
private long signOrder;
private long approveTime;
private String message;
private long approverDeadline;
}

View File

@ -1,9 +1,11 @@
package cn.axzo.nanopart.ess.api.mq;
package cn.axzo.nanopart.ess.api.domain;
import cn.axzo.nanopart.ess.api.enums.EssContractState;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @author yanglin
*/
@ -44,11 +46,16 @@ public class EssContractInfo {
/**
* 腾讯电子签的资源id
*/
private String essFieldId;
private List<String> essFieldIds;
/**
* 合同状态. INIT: 合同创建, PART: 合同签署中, ALL: 合同签署完成, REJECT: 合同拒签, CANCEL: 合同撤回, WILLEXPIRE: 合同即将过期, DEADLINE: 合同流签(合同过期), RELIEVED: 解除协议已解除), INVALID: 合同已失效, EXCEPTION: 合同异常
*/
private EssContractState state;
/**
* 签署情况
*/
private List<EssApproverDetail> approverDetails;
}

View File

@ -1,5 +1,6 @@
package cn.axzo.nanopart.ess.api.mq;
import cn.axzo.nanopart.ess.api.domain.EssContractInfo;
import lombok.Getter;
import lombok.Setter;

View File

@ -0,0 +1,20 @@
package cn.axzo.nanopart.ess.api.request;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* @author yanglin
*/
@Setter @Getter
public class GetContractDetailRequest {
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
}

View File

@ -0,0 +1,18 @@
package cn.axzo.nanopart.ess.api.response;
import cn.axzo.nanopart.ess.api.domain.EssContractInfo;
import lombok.Getter;
import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
public class GetContractDetailResponse {
/**
* 合同信息
*/
private EssContractInfo contract;
}

View File

@ -2,7 +2,7 @@ package cn.axzo.nanopart.ess.server.dao;
import cn.axzo.nanopart.ess.api.enums.EssContractState;
import cn.axzo.nanopart.ess.server.entity.EssContract;
import cn.axzo.nanopart.ess.server.entity.EssContract.ApproverDetail;
import cn.axzo.nanopart.ess.api.domain.EssApproverDetail;
import cn.axzo.nanopart.ess.server.mapper.EssContractMapper;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -31,7 +31,7 @@ public class EssContractDao extends ServiceImpl<EssContractMapper, EssContract>
.update();
}
public void updateState(String essContractId, EssContractState state, List<ApproverDetail> details) {
public void updateState(String essContractId, EssContractState state, List<EssApproverDetail> details) {
lambdaUpdate()
.eq(EssContract::getEssContractId, essContractId)
.set(EssContract::getState, state)

View File

@ -1,7 +1,7 @@
package cn.axzo.nanopart.ess.server.entity;
import cn.axzo.foundation.dao.support.mysql.type.BaseListTypeHandler;
import cn.axzo.nanopart.ess.api.enums.EssContractApproveState;
import cn.axzo.nanopart.ess.api.domain.EssApproverDetail;
import cn.axzo.nanopart.ess.api.enums.EssContractState;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import com.alibaba.fastjson.JSON;
@ -69,10 +69,10 @@ public class EssContract extends BaseEntity<EssContract> {
private Object approvers;
/**
* 状态描述
* 签署情况
*/
@TableField(typeHandler = ApproverDetailListHandler.class)
private List<ApproverDetail> approverDetails;
private List<EssApproverDetail> approverDetails;
/**
* 扩展字段
@ -89,17 +89,6 @@ public class EssContract extends BaseEntity<EssContract> {
public static class RecordExt {
}
@Setter @Getter
public static class ApproverDetail {
private Long ouId;
private Long personId;
private EssContractApproveState state;
private long signOrder;
private long approveTime;
private String message;
private long approverDeadline;
}
// @formatter:off
public static class StringListHandler
extends BaseListTypeHandler<String> {}

View File

@ -4,7 +4,7 @@ import cn.axzo.basics.common.BeanMapper;
import cn.axzo.framework.rocketmq.Event;
import cn.axzo.framework.rocketmq.EventProducer;
import cn.axzo.nanopart.ess.api.enums.MQEvent;
import cn.axzo.nanopart.ess.api.mq.EssContractInfo;
import cn.axzo.nanopart.ess.api.domain.EssContractInfo;
import cn.axzo.nanopart.ess.api.mq.EssContractStateChangeMessage;
import cn.axzo.nanopart.ess.server.dao.EssContractDao;
import cn.axzo.nanopart.ess.server.entity.EssContract;

View File

@ -11,7 +11,7 @@ import cn.axzo.nanopart.ess.server.dao.EssPersonDao;
import cn.axzo.nanopart.ess.server.dao.EssSealPersonDao;
import cn.axzo.nanopart.ess.server.dao.domain.OuAndPersonId;
import cn.axzo.nanopart.ess.server.entity.EssContract;
import cn.axzo.nanopart.ess.server.entity.EssContract.ApproverDetail;
import cn.axzo.nanopart.ess.api.domain.EssApproverDetail;
import cn.axzo.nanopart.ess.server.entity.EssOrg;
import cn.axzo.nanopart.ess.server.entity.EssPerson;
import cn.axzo.nanopart.ess.server.entity.EssSealPerson;
@ -112,7 +112,7 @@ public class ContractManager {
public void updateContractState(String essContractId,
EssContractState state,
List<ApproverDetail> details) {
List<EssApproverDetail> details) {
essContractDao.updateState(essContractId, state, details);
broadcaster.fireContractStateChanged(essContractId);
}

View File

@ -12,6 +12,7 @@ import cn.axzo.nanopart.ess.api.request.GetSealsRequest;
import cn.axzo.nanopart.ess.api.request.GetUnitAuthStatesRequest;
import cn.axzo.nanopart.ess.api.response.GetPersonAuthStateResponse;
import cn.axzo.nanopart.ess.api.response.GetUnitAuthStatesResponse;
import cn.axzo.nanopart.ess.server.dao.EssContractDao;
import cn.axzo.nanopart.ess.server.dao.EssOrgDao;
import cn.axzo.nanopart.ess.server.dao.EssPersonDao;
import cn.axzo.nanopart.ess.server.dao.EssSealDao;
@ -52,6 +53,7 @@ public class QueryService {
private final EssOrgDao essOrgDao;
private final EssPersonDao essPersonDao;
private final EssSealDao essSealDao;
private final EssContractDao essContractDao;
private final EssSealPersonDao essSealPersonDao;
private final EssSupport essSupport;

View File

@ -1,7 +1,9 @@
package cn.axzo.nanopart.ess.server.ess.controller;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.nanopart.ess.api.EssApi;
import cn.axzo.nanopart.ess.api.domain.EssContractInfo;
import cn.axzo.nanopart.ess.api.domain.EssOrgAndSealInfo;
import cn.axzo.nanopart.ess.api.enums.EssContractState;
import cn.axzo.nanopart.ess.api.request.AddSealAuthorizationRequest;
@ -9,6 +11,7 @@ import cn.axzo.nanopart.ess.api.request.AddSealPersonsRequest;
import cn.axzo.nanopart.ess.api.request.CreateConsoleLoginUrlRequest;
import cn.axzo.nanopart.ess.api.request.CreateContractRequest;
import cn.axzo.nanopart.ess.api.request.DownloadSingedContractPdfRequest;
import cn.axzo.nanopart.ess.api.request.GetContractDetailRequest;
import cn.axzo.nanopart.ess.api.request.GetContractSignUrlRequest;
import cn.axzo.nanopart.ess.api.request.GetEmbedWebUrlRequest;
import cn.axzo.nanopart.ess.api.request.GetPersonAuthStateRequest;
@ -21,6 +24,7 @@ import cn.axzo.nanopart.ess.api.request.SealAndPersonRequest;
import cn.axzo.nanopart.ess.api.response.CreateConsoleLoginUrlResponse;
import cn.axzo.nanopart.ess.api.response.CreateContractResponse;
import cn.axzo.nanopart.ess.api.response.DownloadSingedContractPdfResponse;
import cn.axzo.nanopart.ess.api.response.GetContractDetailResponse;
import cn.axzo.nanopart.ess.api.response.GetContractSignUrlResponse;
import cn.axzo.nanopart.ess.api.response.GetEmbedWebUrlResponse;
import cn.axzo.nanopart.ess.api.response.GetPersonAuthStateResponse;
@ -192,4 +196,13 @@ class ApiController implements EssApi {
return ApiResult.ok();
}
@Override
public ApiResult<GetContractDetailResponse> getContractDetail(GetContractDetailRequest request) {
EssContract contract = essContractDao.find(request.getEssContractId()).orElse(null);
BizAssertions.assertNotNull(contract, "合同不存在: {}", request.getEssContractId());
GetContractDetailResponse response = new GetContractDetailResponse();
response.setContract(BeanMapper.copyBean(contract, EssContractInfo.class));
return ApiResult.ok(response);
}
}

View File

@ -10,7 +10,7 @@ import cn.axzo.nanopart.ess.api.request.CallbackRequest;
import cn.axzo.nanopart.ess.api.request.CallbackRequest.OrgAuthorizationFinish;
import cn.axzo.nanopart.ess.api.request.CallbackRequest.SuperAdminChanged;
import cn.axzo.nanopart.ess.server.dao.EssLogDao;
import cn.axzo.nanopart.ess.server.entity.EssContract.ApproverDetail;
import cn.axzo.nanopart.ess.api.domain.EssApproverDetail;
import cn.axzo.nanopart.ess.server.entity.EssLog;
import cn.axzo.nanopart.ess.server.ess.ContractManager;
import cn.axzo.nanopart.ess.server.ess.OrgManager;
@ -104,10 +104,10 @@ class CallbackController implements EssCallbackApi, InitializingBean {
log.warn("unknown contract state: {}", changes.getFlowStatus());
return changes.getFlowId();
}
List<ApproverDetail> details = changes.getFlowApproverInfo().stream()
List<EssApproverDetail> details = changes.getFlowApproverInfo().stream()
.map(info -> {
PersonOpenId personOpenId = PersonOpenId.parse(info.getProxyOperatorOpenId());
ApproverDetail detail = new ApproverDetail();
EssApproverDetail detail = new EssApproverDetail();
detail.setOuId(personOpenId.getOuId());
detail.setPersonId(personOpenId.getPersonId());
detail.setState(EssContractApproveState.fromEssCode(info.getApproveStatus()));