REQ-3581: 接口

This commit is contained in:
yanglin 2025-02-27 09:39:20 +08:00
parent 37bf2db22f
commit 6a516391c1
63 changed files with 1311 additions and 1235 deletions

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api;
import cn.axzo.framework.domain.web.result.ApiResult;
@ -40,116 +41,104 @@ import java.util.List;
@FeignClient(name = "nanopart", url = "${axzo.service.nanopart:http://nanopart:8080}")
public interface EssApi {
/**
* 查询单位电子签开通情况
*/
@PostMapping("api/ess/getOrgAuthStates")
ApiResult<List<GetOrgAuthStatesResponse>> getOrgAuthStates(
@RequestBody @Valid GetOrgAuthStatesRequest request);
/**
* 查询单位电子签开通情况
*/
@PostMapping("api/ess/getOrgAuthStates")
ApiResult<List<GetOrgAuthStatesResponse>> getOrgAuthStates(@RequestBody @Valid GetOrgAuthStatesRequest request);
/**
* 查询用户电子签开通情况(认证)
*/
@PostMapping("api/ess/getPersonAuthState")
ApiResult<GetPersonAuthStateResponse> getPersonAuthState(
@RequestBody @Valid GetPersonAuthStateRequest request);
/**
* 查询用户电子签开通情况(认证)
*/
@PostMapping("api/ess/getPersonAuthState")
ApiResult<GetPersonAuthStateResponse> getPersonAuthState(@RequestBody @Valid GetPersonAuthStateRequest request);
/**
* 获取电子签登录链接
*/
@PostMapping("api/ess/createConsoleLoginUrl")
ApiResult<CreateConsoleLoginUrlResponse> createConsoleLoginUrl(
@RequestBody @Valid CreateConsoleLoginUrlRequest request);
/**
* 获取电子签登录链接
*/
@PostMapping("api/ess/createConsoleLoginUrl")
ApiResult<CreateConsoleLoginUrlResponse> createConsoleLoginUrl(
@RequestBody @Valid CreateConsoleLoginUrlRequest request);
/**
* 获取内嵌页面链接, 有效期为5分钟
*/
@PostMapping("api/ess/getEmbedWebUrl")
ApiResult<GetEmbedWebUrlResponse> getEmbedWebUrl(
@RequestBody @Valid GetEmbedWebUrlRequest request);
/**
* 获取内嵌页面链接, 有效期为5分钟
*/
@PostMapping("api/ess/getEmbedWebUrl")
ApiResult<GetEmbedWebUrlResponse> getEmbedWebUrl(@RequestBody @Valid GetEmbedWebUrlRequest request);
/**
* 查询单位已启用的印章以及授权人员列表等等
*/
@PostMapping("api/ess/getOrgEnabledSeals")
ApiResult<List<EssOrgAndSealInfo>> getOrgEnabledSeals(
@RequestBody @Valid GetSealsRequest request);
/**
* 查询单位已启用的印章以及授权人员列表等等
*/
@PostMapping("api/ess/getOrgEnabledSeals")
ApiResult<List<EssOrgAndSealInfo>> getOrgEnabledSeals(@RequestBody @Valid GetSealsRequest request);
/**
* 查询印章管理员
*/
@PostMapping("api/ess/getSealPersons")
ApiResult<List<EssSealPersonInfo>> getSealPersons(
@RequestBody @Valid GetSealPersonRequest request);
/**
* 查询印章管理员
*/
@PostMapping("api/ess/getSealPersons")
ApiResult<List<EssSealPersonInfo>> getSealPersons(@RequestBody @Valid GetSealPersonRequest request);
/**
* 添加印章人员
*/
@PostMapping("api/ess/addSealPerson")
ApiResult<Void> addSealPerson(
@RequestBody @Valid AddSealPersonRequest request);
/**
* 添加印章人员
*/
@PostMapping("api/ess/addSealPerson")
ApiResult<Void> addSealPerson(@RequestBody @Valid AddSealPersonRequest request);
/**
* 删除印章人员
*/
@PostMapping("api/ess/removeSealPerson")
ApiResult<Void> removeSealPerson(
@RequestBody @Valid RemoveSealPersonRequest request);
/**
* 删除印章人员
*/
@PostMapping("api/ess/removeSealPerson")
ApiResult<Void> removeSealPerson(@RequestBody @Valid RemoveSealPersonRequest request);
/**
* 单个人印章授权(去授权)
*/
@PostMapping("api/ess/addSealAuthorization")
ApiResult<Void> addSealAuthorization(
@RequestBody @Valid AddSealAuthorizationRequest request);
/**
* 单个人印章授权(去授权)
*/
@PostMapping("api/ess/addSealAuthorization")
ApiResult<Void> addSealAuthorization(@RequestBody @Valid AddSealAuthorizationRequest request);
/**
* 单个人印章取消授权
*/
@PostMapping("api/ess/removeSealAuthorization")
ApiResult<Void> removeSealAuthorization(
@RequestBody @Valid RemoveSealAuthorizationRequest request);
/**
* 单个人印章取消授权
*/
@PostMapping("api/ess/removeSealAuthorization")
ApiResult<Void> removeSealAuthorization(@RequestBody @Valid RemoveSealAuthorizationRequest request);
/**
* 通过文件创建合同
*/
@PostMapping("api/ess/createContractByFile")
ApiResult<CreateContractByFileResponse> createContractByFile(
@RequestBody @Valid CreateContractByFileRequest request);
/**
* 通过文件创建合同
*/
@PostMapping("api/ess/createContractByFile")
ApiResult<CreateContractByFileResponse> createContractByFile(
@RequestBody @Valid CreateContractByFileRequest request);
/**
* 获取签署链接, 有效期为5分钟
*/
@PostMapping("api/ess/getContractSignUrl")
ApiResult<GetSignUrlResponse> getContractSignUrl(
@RequestBody @Valid GetSignUrlRequest request);
/**
* 获取签署链接, 有效期为5分钟
*/
@PostMapping("api/ess/getContractSignUrl")
ApiResult<GetSignUrlResponse> getContractSignUrl(@RequestBody @Valid GetSignUrlRequest request);
/**
* 获取合同PDF文件地址. 下载链接有效期为5分钟
*/
@PostMapping("api/ess/getContractPDFUrl")
ApiResult<DownloadSingedContractPdfResponse> getContractPDFUrl(
@RequestBody @Valid DownloadSingedContractPdfRequest request);
/**
* 获取合同PDF文件地址. 下载链接有效期为5分钟
*/
@PostMapping("api/ess/getContractPDFUrl")
ApiResult<DownloadSingedContractPdfResponse> getContractPDFUrl(
@RequestBody @Valid DownloadSingedContractPdfRequest request);
/**
* 从腾讯电子签下载合同PDF文件
*/
@PostMapping("api/ess/saveContractSnapshot")
ApiResult<Void> saveContractSnapshot(
@RequestBody @Valid SaveContractSnapshotRequest request);
/**
* 从腾讯电子签下载合同PDF文件
*/
@PostMapping("api/ess/saveContractSnapshot")
ApiResult<Void> saveContractSnapshot(@RequestBody @Valid SaveContractSnapshotRequest request);
/**
* 撤销合同
*/
@PostMapping("api/ess/revokeContract")
ApiResult<Void> revokeContract(
@RequestBody @Valid RevokeContractRequest request);
/**
* 撤销合同
*/
@PostMapping("api/ess/revokeContract")
ApiResult<Void> revokeContract(@RequestBody @Valid RevokeContractRequest request);
/**
* 获取合同详情, 通过合同id
*/
@PostMapping("api/ess/getContractByContractId")
ApiResult<GetContractDetailByContractIdResponse> getContractByContractId(
@RequestBody @Valid GetContractDetailByContractIdRequest request);
/**
* 获取合同详情, 通过合同id
*/
@PostMapping("api/ess/getContractByContractId")
ApiResult<GetContractDetailByContractIdResponse> getContractByContractId(
@RequestBody @Valid GetContractDetailByContractIdRequest request);
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api;
import org.springframework.cloud.openfeign.EnableFeignClients;

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api;
import cn.axzo.framework.domain.web.result.ApiResult;
@ -15,7 +16,7 @@ import javax.validation.Valid;
@FeignClient(name = "nanopart", url = "${axzo.service.nanopart:http://nanopart:8080}")
public interface EssCallbackApi {
@PostMapping("api/ess/callback")
ApiResult<Object> callback(@RequestBody @Valid CallbackRequest request);
@PostMapping("api/ess/callback")
ApiResult<Object> callback(@RequestBody @Valid CallbackRequest request);
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain;
import lombok.Getter;
@ -9,13 +10,14 @@ import java.util.List;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class CreateContractByFile extends CreateContractInfo {
/**
* 合同文件base64: Base64.getEncoder().encodeToString(file.getBytes())
*/
@NotEmpty(message = "base64Files不能为空")
private List<String> base64Files;
/**
* 合同文件base64: Base64.getEncoder().encodeToString(file.getBytes())
*/
@NotEmpty(message = "base64Files不能为空")
private List<String> base64Files;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain;
import cn.axzo.nanopart.ess.api.domain.contract.Approver;
@ -20,55 +21,54 @@ import static java.util.stream.Collectors.toSet;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public abstract class CreateContractInfo {
/**
* 合同名称
*/
@NotBlank(message = "contractName不能为空")
private String contractName;
/**
* 合同名称
*/
@NotBlank(message = "contractName不能为空")
private String contractName;
/**
* 合同签署方
*/
@Valid
@NotEmpty(message = "approvers不能为空")
private List<Approver> approvers;
/**
* 合同签署方
*/
@Valid
@NotEmpty(message = "approvers不能为空")
private List<Approver> approvers;
/**
* 合同签署方的签署约束种类
*/
@NotNull(message = "approverConstraint不能为空")
private Constraint constraint = Constraint.ONE_PERSON_PER_ORG;
/**
* 合同签署方的签署约束种类
*/
@NotNull(message = "approverConstraint不能为空")
private Constraint constraint = Constraint.ONE_PERSON_PER_ORG;
/**
* 签署方签署控件印章/签名等的生成方式.
* 0: 在合同流程发起时由发起人指定签署方的签署控件的位置和数量
* 1: 签署方在签署时自行添加签署控件可以拖动位置和控制数量
*/
@Range(min = 0, max = 1, message = "signBeanTag必须是0或1")
private Long signBeanTag = 1L;
/**
* 签署方签署控件印章/签名等的生成方式.
* 0: 在合同流程发起时由发起人指定签署方的签署控件的位置和数量
* 1: 签署方在签署时自行添加签署控件可以拖动位置和控制数量
*/
@Range(min = 0, max = 1, message = "signBeanTag必须是0或1")
private Long signBeanTag = 1L;
/**
* 是否按 approvers 中指定的顺序进行签署
*/
private boolean signOrdered = false;
/**
* 是否按 approvers 中指定的顺序进行签署
*/
private boolean signOrdered = false;
/**
* 合同流程的签署截止时间格式为Unix标准时间戳, 透传给腾讯电子签
* 如果未设置签署截止时间则默认为合同流程创建后的365天时截止
* 如果在签署截止时间前未完成签署则合同状态会变为已过期导致合同作废
*/
private Long deadlineMs;
/**
* 合同流程的签署截止时间格式为Unix标准时间戳, 透传给腾讯电子签
* 如果未设置签署截止时间则默认为合同流程创建后的365天时截止
* 如果在签署截止时间前未完成签署则合同状态会变为已过期导致合同作废
*/
private Long deadlineMs;
@JsonIgnore
public Set<Long> getApproverOuIds() {
if (approvers == null)
return Collections.emptySet();
return approvers.stream()
.map(Approver::getOuId)
.collect(toSet());
}
@JsonIgnore
public Set<Long> getApproverOuIds() {
if (approvers == null)
return Collections.emptySet();
return approvers.stream().map(Approver::getOuId).collect(toSet());
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain;
import com.alibaba.fastjson.JSON;
@ -14,18 +15,18 @@ import java.util.List;
@Getter
public class EssOrgAndSealInfo {
/**
* 单位信息
*/
private EssOrgInfo org;
/**
* 单位信息
*/
private EssOrgInfo org;
/**
* 印章信息
*/
private List<EssSealInfo> seals = new ArrayList<>();
/**
* 印章信息
*/
private List<EssSealInfo> seals = new ArrayList<>();
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain;
import lombok.Getter;
@ -6,32 +7,33 @@ import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class EssOrgInfo {
/**
* 单位id
*/
private Long ouId;
/**
* 单位id
*/
private Long ouId;
/**
* 单位名称
*/
private String ouName;
/**
* 单位名称
*/
private String ouName;
/**
* 单位是否认证
*/
private boolean isOrgAuthorized;
/**
* 单位是否认证
*/
private boolean isOrgAuthorized;
/**
* 超级管理员人员id
*/
private Long superAdminPersonId;
/**
* 超级管理员人员id
*/
private Long superAdminPersonId;
/**
* 单位记录创建人id
*/
private Long createByPersonId;
/**
* 单位记录创建人id
*/
private Long createByPersonId;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain;
import cn.axzo.nanopart.ess.api.enums.EssSealType;
@ -14,28 +15,28 @@ import java.util.List;
@Getter
public class EssSealInfo {
/**
* 单位id
*/
private Long ouId;
/**
* 单位id
*/
private Long ouId;
/**
* 印章在腾讯的id
*/
private String essSealId;
/**
* 印章在腾讯的id
*/
private String essSealId;
/**
* 印章类型. OFFICIAL: 公章, CONTRACT: 合同专用章, FINANCE: 财务专用章, PERSONNEL: 人事专用章, INVOICE: 发票专用章, LEGAL_PERSON_SEAL: 法定代表人章, OTHER: 其它
*/
private EssSealType type;
/**
* 印章类型. OFFICIAL: 公章, CONTRACT: 合同专用章, FINANCE: 财务专用章, PERSONNEL: 人事专用章, INVOICE: 发票专用章, LEGAL_PERSON_SEAL: 法定代表人章, OTHER: 其它
*/
private EssSealType type;
/**
* 授权人员列表
*/
private List<EssSealPersonInfo> sealPersons = new ArrayList<>();
/**
* 授权人员列表
*/
private List<EssSealPersonInfo> sealPersons = new ArrayList<>();
public void addSealPerson(EssSealPersonInfo person) {
sealPersons.add(person);
}
public void addSealPerson(EssSealPersonInfo person) {
sealPersons.add(person);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain;
import lombok.Getter;
@ -6,47 +7,48 @@ import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class EssSealPersonInfo {
/**
* 单位id
*/
private Long ouId;
/**
* 单位id
*/
private Long ouId;
/**
* 印章用户信息
*/
private PersonProfileInfo sealPerson = new PersonProfileInfo();
/**
* 印章用户信息
*/
private PersonProfileInfo sealPerson = new PersonProfileInfo();
/**
* 印章授权人信息
*/
private PersonProfileInfo authorizedByPerson = new PersonProfileInfo();
/**
* 印章授权人信息
*/
private PersonProfileInfo authorizedByPerson = new PersonProfileInfo();
/**
* 印章id
*/
private String essSealId;
/**
* 印章id
*/
private String essSealId;
/**
* 是否已经激活(实名认证)
*/
private boolean isPersonAuthorized;
/**
* 是否已经激活(实名认证)
*/
private boolean isPersonAuthorized;
/**
* 授权时间, unix时间戳
*/
private Long authorizeTimeMs;
/**
* 授权时间, unix时间戳
*/
private Long authorizeTimeMs;
/**
* 是否已经认证(印章授权)
*/
private boolean isSealAuthorized;
/**
* 是否已经认证(印章授权)
*/
private boolean isSealAuthorized;
/**
* 是否是超级管理员
*/
private boolean isSuperAdmin;
/**
* 是否是超级管理员
*/
private boolean isSuperAdmin;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain;
import lombok.Getter;
@ -12,16 +13,16 @@ import javax.validation.constraints.NotNull;
@Getter
public class OperatorInfo implements OrgPerson {
/**
* 发起方单位id
*/
@NotNull(message = "ouId不能为空")
private Long ouId;
/**
* 发起方单位id
*/
@NotNull(message = "ouId不能为空")
private Long ouId;
/**
* 发起方人员id
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* 发起方人员id
*/
@NotNull(message = "personId不能为空")
private Long personId;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain;
import cn.axzo.nanopart.ess.api.domain.contract.OrgPersonInfo;
@ -9,19 +10,18 @@ import java.util.Objects;
*/
public interface OrgPerson {
Long getOuId();
Long getOuId();
Long getPersonId();
Long getPersonId();
default OrgPersonInfo toOrgPersonInfo() {
OrgPersonInfo orgPersonInfo = new OrgPersonInfo();
orgPersonInfo.setOuId(getOuId());
orgPersonInfo.setPersonId(getPersonId());
return orgPersonInfo;
}
default OrgPersonInfo toOrgPersonInfo() {
OrgPersonInfo orgPersonInfo = new OrgPersonInfo();
orgPersonInfo.setOuId(getOuId());
orgPersonInfo.setPersonId(getPersonId());
return orgPersonInfo;
}
static boolean equals(OrgPerson a, OrgPerson b) {
return Objects.equals(a.getOuId(), b.getOuId())
&& Objects.equals(a.getPersonId(), b.getPersonId());
}
static boolean equals(OrgPerson a, OrgPerson b) {
return Objects.equals(a.getOuId(), b.getOuId()) && Objects.equals(a.getPersonId(), b.getPersonId());
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain;
import lombok.AccessLevel;
@ -13,23 +14,19 @@ import java.util.Optional;
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class OrgPersons<T extends OrgPerson> {
private final Collection<T> persons;
private final Collection<T> persons;
public static <T extends OrgPerson> OrgPersons<T> wrap(Collection<T> persons) {
return new OrgPersons<>(persons);
}
public static <T extends OrgPerson> OrgPersons<T> wrap(Collection<T> persons) {
return new OrgPersons<>(persons);
}
public Optional<T> findByPerson(OrgPerson person) {
return persons.stream()
.filter(p -> Objects.equals(p.getOuId(), person.getOuId())
&& Objects.equals(p.getPersonId(), person.getPersonId()))
.findFirst();
}
public Optional<T> findByPerson(OrgPerson person) {
return persons.stream().filter(p -> Objects.equals(p.getOuId(), person.getOuId())
&& Objects.equals(p.getPersonId(), person.getPersonId())).findFirst();
}
public Optional<T> findByOrgId(Long ouId) {
return persons.stream()
.filter(p -> Objects.equals(p.getOuId(), ouId))
.findFirst();
}
public Optional<T> findByOrgId(Long ouId) {
return persons.stream().filter(p -> Objects.equals(p.getOuId(), ouId)).findFirst();
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain;
import lombok.Getter;
@ -6,22 +7,23 @@ import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class PersonProfileInfo {
/**
* 自然人id
*/
private Long personId;
/**
* 自然人id
*/
private Long personId;
/**
* 姓名
*/
private String personName;
/**
* 姓名
*/
private String personName;
/**
* 头像
*/
private String avatar;
/**
* 头像
*/
private String avatar;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain.contract;
import cn.axzo.nanopart.ess.api.domain.OrgPerson;
@ -21,70 +22,74 @@ import java.util.List;
@Getter
public class Approver implements OrgPerson {
/**
* 签署方人员信息, 如果是动态签署人, 则传null, 在获取签署链接时再指定签署人
*/
@Valid
private OrgPersonInfo signPerson;
/**
* 签署方人员信息, 如果是动态签署人, 则传null, 在获取签署链接时再指定签署人
*/
@Valid
private OrgPersonInfo signPerson;
/**
* 签署选项
*/
private SignOption signOption = new SignOption();
/**
* 签署选项
*/
private SignOption signOption = new SignOption();
/**
* 在指定签署方时可选择企业B端或个人C端等不同的参与者类型
*/
@NotNull(message = "approverType不能为空")
private EssApproverType approverType = EssApproverType.ORGANIZATION;
/**
* 在指定签署方时可选择企业B端或个人C端等不同的参与者类型
*/
@NotNull(message = "approverType不能为空")
private EssApproverType approverType = EssApproverType.ORGANIZATION;
/**
* 签署方在签署合同之前需要强制阅读合同的时长可指定为3秒至300秒之间的任意值
*/
@Range(min = 3, max = 300, message = "preReadTime必须在3-300之间")
@NotNull(message = "preReadTime不能为空")
private Long preReadTimeSeconds = 5L;
/**
* 签署方在签署合同之前需要强制阅读合同的时长可指定为3秒至300秒之间的任意值
*/
@Range(min = 3, max = 300, message = "preReadTime必须在3-300之间")
@NotNull(message = "preReadTime不能为空")
private Long preReadTimeSeconds = 5L;
/**
* 指定盖章时, 使用的章类型
*/
private List<EssSealType> sealTypes;
/**
* 指定盖章时, 使用的章类型
*/
private List<EssSealType> sealTypes;
/**
* 扩展信息, 内部使用
*/
private JSONObject internal;
/**
* 扩展信息, 内部使用
*/
private JSONObject internal;
public void setEssRecipientId(String essRecipientId) {
getOrCreateExtension().put("essRecipientId", essRecipientId);
}
public void setEssRecipientId(String essRecipientId) {
getOrCreateExtension().put("essRecipientId", essRecipientId);
}
@JsonIgnore @JSONField(serialize = false)
public String getEssRecipientId() {
if (internal == null)
return null;
return internal.getString("essRecipientId");
}
@JsonIgnore
@JSONField(serialize = false)
public String getEssRecipientId() {
if (internal == null)
return null;
return internal.getString("essRecipientId");
}
@JsonIgnore @JSONField(serialize = false)
public JSONObject getOrCreateExtension() {
if (internal == null)
internal = new JSONObject();
return internal;
}
@JsonIgnore
@JSONField(serialize = false)
public JSONObject getOrCreateExtension() {
if (internal == null)
internal = new JSONObject();
return internal;
}
public boolean isSignPersonPreset() {
return signPerson != null;
}
public boolean isSignPersonPreset() {
return signPerson != null;
}
@JsonIgnore @JSONField(serialize = false)
public Long getOuId() {
return signPerson == null ? 0L : signPerson.getOuId();
}
@JsonIgnore
@JSONField(serialize = false)
public Long getOuId() {
return signPerson == null ? 0L : signPerson.getOuId();
}
@JsonIgnore @JSONField(serialize = false)
public Long getPersonId() {
return signPerson == null ? 0L : signPerson.getPersonId();
}
@JsonIgnore
@JSONField(serialize = false)
public Long getPersonId() {
return signPerson == null ? 0L : signPerson.getPersonId();
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain.contract;
import cn.axzo.nanopart.ess.api.enums.EssContractApproveState;
@ -11,53 +12,53 @@ import lombok.Setter;
@Getter
public class EssApproveDetail {
/**
* 签署人, 动态签署人在没有签署的时候可能为null
*/
private OrgPersonInfo signPerson;
/**
* 签署人, 动态签署人在没有签署的时候可能为null
*/
private OrgPersonInfo signPerson;
/**
* 签署编号
*/
private String recipientId;
/**
* 签署编号
*/
private String recipientId;
/**
* 签署状态
*/
private EssContractApproveState state;
/**
* 签署状态
*/
private EssContractApproveState state;
/**
* 签署顺序
*/
private long signOrder;
/**
* 签署顺序
*/
private long signOrder;
/**
* 对应签署人签署此合同的时间
*/
private long approveTimeMs;
/**
* 对应签署人签署此合同的时间
*/
private long approveTimeMs;
/**
* 对应签署人状态的简单描述, : 已签署或者拒签的原因等
*/
private String message;
/**
* 对应签署人状态的简单描述, : 已签署或者拒签的原因等
*/
private String message;
/**
* 对应签署人的签署截止时间
*/
private long approverDeadlineMs;
/**
* 对应签署人的签署截止时间
*/
private long approverDeadlineMs;
/**
* 单位id, 动态签署人在没有签署的时候可能为空
*/
private Long ouId;
/**
* 单位id, 动态签署人在没有签署的时候可能为空
*/
private Long ouId;
/**
* 单位名称, 动态签署人在没有签署的时候可能为空
*/
private String ouName;
/**
* 单位名称, 动态签署人在没有签署的时候可能为空
*/
private String ouName;
/**
* 对应签署人的手机号, 动态签署人在没有签署的时候可能为空
*/
private String phoneNumber;
/**
* 对应签署人的手机号, 动态签署人在没有签署的时候可能为空
*/
private String phoneNumber;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain.contract;
import cn.axzo.nanopart.ess.api.enums.EssContractState;
@ -13,60 +14,60 @@ import java.util.List;
@Getter
public class EssContractInfo {
/**
* 发起合同的应用或业务场景
*/
private String appCode;
/**
* 发起合同的应用或业务场景
*/
private String appCode;
/**
* 业务编码
*/
private String bizCode;
/**
* 业务编码
*/
private String bizCode;
/**
* 幂等编码
*/
private String idempotentCode;
/**
* 幂等编码
*/
private String idempotentCode;
/**
* 合同发起方单位id
*/
private Long creatorOuId;
/**
* 合同发起方单位id
*/
private Long creatorOuId;
/**
* 合同发起方人员id
*/
private Long creatorPersonId;
/**
* 合同发起方人员id
*/
private Long creatorPersonId;
/**
* 合同名称
*/
private String contractName;
/**
* 合同名称
*/
private String contractName;
/**
* 电子签那边的合同id
*/
private String essContractId;
/**
* 电子签那边的合同id
*/
private String essContractId;
/**
* 合同状态. INIT: 合同创建, PART: 合同签署中, ALL: 合同签署完成, REJECT: 合同拒签, CANCEL: 合同撤回, WILLEXPIRE: 合同即将过期, DEADLINE: 合同流签(合同过期), RELIEVED: 解除协议已解除), INVALID: 合同已失效, EXCEPTION: 合同异常
*/
private EssContractState state;
/**
* 合同状态. INIT: 合同创建, PART: 合同签署中, ALL: 合同签署完成, REJECT: 合同拒签, CANCEL: 合同撤回, WILLEXPIRE: 合同即将过期, DEADLINE: 合同流签(合同过期), RELIEVED: 解除协议已解除), INVALID: 合同已失效, EXCEPTION: 合同异常
*/
private EssContractState state;
/**
* 合并签署方信息, 如果是动态签署, 里面的签署人信息可能为nul
*/
private List<Approver> approvers;
/**
* 合并签署方信息, 如果是动态签署, 里面的签署人信息可能为nul
*/
private List<Approver> approvers;
/**
* 合同的签署方的签署情况
* <p/>
* 每次腾讯的回调都是给的全量签署情况数据, 如果业务依赖签署情况推荐业务状态, 需要自行做幂等处理
*/
private List<EssApproveDetail> approveDetails;
/**
* 合同的签署方的签署情况
* <p/>
* 每次腾讯的回调都是给的全量签署情况数据, 如果业务依赖签署情况推荐业务状态, 需要自行做幂等处理
*/
private List<EssApproveDetail> approveDetails;
/**
* 腾讯电子签那边的消息
*/
private String essMessage;
/**
* 腾讯电子签那边的消息
*/
private String essMessage;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain.contract;
import cn.axzo.nanopart.ess.api.domain.OrgPerson;
@ -9,19 +10,20 @@ import javax.validation.constraints.NotNull;
/**
* @author yanglin
*/
@Setter @Getter
public class OrgPersonInfo implements OrgPerson {
@Setter
@Getter
public class OrgPersonInfo implements OrgPerson {
/**
* 单位id
*/
@NotNull(message = "ouId不能为空")
private Long ouId;
/**
* 单位id
*/
@NotNull(message = "ouId不能为空")
private Long ouId;
/**
* 人员id
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* 人员id
*/
@NotNull(message = "personId不能为空")
private Long personId;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain.contract;
import lombok.Getter;
@ -8,17 +9,18 @@ import lombok.Setter;
*
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class SignOption {
/**
* 是否可以拒签. false-可以拒签, true-不可以拒签
*/
private boolean noRefuse = true;
/**
* 是否可以拒签. false-可以拒签, true-不可以拒签
*/
private boolean noRefuse = true;
/**
* 是否可以转发. false-可以转发 true-不可以转发
*/
private boolean noTransfer = true;
/**
* 是否可以转发. false-可以转发 true-不可以转发
*/
private boolean noTransfer = true;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.enums;
/**
@ -5,7 +6,7 @@ package cn.axzo.nanopart.ess.api.enums;
*/
public enum Constraint {
// 一个子客只允许一个用户盖章
ONE_PERSON_PER_ORG
// 一个子客只允许一个用户盖章
ONE_PERSON_PER_ORG
}

View File

@ -1,11 +1,12 @@
package cn.axzo.nanopart.ess.api.enums;
/**
* @author yanglin
*/
public enum EssApproverType {
// 企业/ 企业员工
ORGANIZATION,
// 企业/ 企业员工自动签
ENTERPRISESERVER
// 企业/ 企业员工
ORGANIZATION,
// 企业/ 企业员工自动签
ENTERPRISESERVER
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.enums;
import lombok.Getter;
@ -10,17 +11,17 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public enum EssConsoleUrlEndpoint {
PC("PC", "(默认)web控制台链接, 需要在PC浏览器中打开"),
CHANNEL("CHANNEL", "H5跳转到电子签小程序链接, 一般用于发送短信中带的链接, 打开后进入腾讯电子签小程序"),
SHORT_URL("SHORT_URL", "H5跳转到电子签小程序链接的短链形式, 一般用于发送短信中带的链接, 打开后进入腾讯电子签小程序"),
WEIXIN_QRCODE_URL("WEIXIN_QRCODE_URL", "直接跳转至电子签小程序的二维码链接,无需通过中转页。您需要自行将其转换为二维码,使用微信扫码后可直接进入。请注意,直接点击链接是无效的。"),
APP("APP", "APP或小程序跳转电子签小程序链接, 一般用于贵方小程序或者APP跳转过来, 打开后进入腾讯电子签小程序"),
H5("H5", "H5长链接跳转H5链接, 一般用于贵方H5跳转过来, 打开后进入腾讯电子签H5页面"),
SHORT_H5("SHORT_H5", "H5短链跳转H5的短链形式, 一般用于发送短信中带的链接, 打开后进入腾讯电子签H5页面")
PC("PC", "(默认)web控制台链接, 需要在PC浏览器中打开"),
CHANNEL("CHANNEL", "H5跳转到电子签小程序链接, 一般用于发送短信中带的链接, 打开后进入腾讯电子签小程序"),
SHORT_URL("SHORT_URL", "H5跳转到电子签小程序链接的短链形式, 一般用于发送短信中带的链接, 打开后进入腾讯电子签小程序"),
WEIXIN_QRCODE_URL("WEIXIN_QRCODE_URL", "直接跳转至电子签小程序的二维码链接,无需通过中转页。您需要自行将其转换为二维码,使用微信扫码后可直接进入。请注意,直接点击链接是无效的。"),
APP("APP", "APP或小程序跳转电子签小程序链接, 一般用于贵方小程序或者APP跳转过来, 打开后进入腾讯电子签小程序"),
H5("H5", "H5长链接跳转H5链接, 一般用于贵方H5跳转过来, 打开后进入腾讯电子签H5页面"),
SHORT_H5("SHORT_H5", "H5短链跳转H5的短链形式, 一般用于发送短信中带的链接, 打开后进入腾讯电子签H5页面")
;
;
private final String code;
private final String description;
private final String code;
private final String description;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.enums;
import lombok.AccessLevel;
@ -11,29 +12,28 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public enum EssContractApproveState {
PENDING("待签署"),
ACCEPT("已签署"),
REJECT("拒绝"),
DEADLINE("过期没人处理"),
CANCEL("流程已撤回"),
STOP("流程已终止"),
WAITPICKUP("待领取"),
FILLPENDING("待填写"),
FILLACCEPT("填写完成"),
FORWARD("已转他人处理"),
RELIEVED("解除协议(已解除)"),
FILLREJECT("拒绝填写"),
EXCEPTION("异常")
;
PENDING("待签署"),
ACCEPT("已签署"),
REJECT("拒绝"),
DEADLINE("过期没人处理"),
CANCEL("流程已撤回"),
STOP("流程已终止"),
WAITPICKUP("待领取"),
FILLPENDING("待填写"),
FILLACCEPT("填写完成"),
FORWARD("已转他人处理"),
RELIEVED("解除协议(已解除)"),
FILLREJECT("拒绝填写"),
EXCEPTION("异常");
private final String description;
private final String description;
public static EssContractApproveState fromEssCode(String code) {
for (EssContractApproveState value : values()) {
if (value.name().equalsIgnoreCase(code)) {
return value;
}
}
return null;
}
public static EssContractApproveState fromEssCode(String code) {
for (EssContractApproveState value : values()) {
if (value.name().equalsIgnoreCase(code)) {
return value;
}
}
return null;
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.enums;
import lombok.AccessLevel;
@ -11,29 +12,29 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public enum EssContractState {
INIT("合同创建", false),
PART("合同签署中", false),
ALL("合同签署完成", true),
REJECT("合同拒签", true),
CANCEL("合同撤回", true),
WILLEXPIRE("合同即将过期", false),
DEADLINE("合同流签(合同过期)", true),
RELIEVED("解除协议(已解除)", true),
INVALID("合同失效", true),
EXCEPTION("合同异常", true),
INIT("合同创建", false),
PART("合同签署中", false),
ALL("合同签署完成", true),
REJECT("合同拒签", true),
CANCEL("合同撤回", true),
WILLEXPIRE("合同即将过期", false),
DEADLINE("合同流签(合同过期)", true),
RELIEVED("解除协议(已解除)", true),
INVALID("合同失效", true),
EXCEPTION("合同异常", true),
;
;
private final String description;
private final boolean finalState;
private final String description;
private final boolean finalState;
public static EssContractState fromEssCode(String code) {
for (EssContractState value : values()) {
if (value.name().equalsIgnoreCase(code)) {
return value;
}
}
return null;
}
public static EssContractState fromEssCode(String code) {
for (EssContractState value : values()) {
if (value.name().equalsIgnoreCase(code)) {
return value;
}
}
return null;
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.enums;
import lombok.Getter;
@ -10,23 +11,23 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public enum EssEmbedType {
// 生成创建印章的嵌入页面
CREATE_SEAL(false, "CREATE_SEAL", EssContext.SEAL),
// 生成预览印章列表的嵌入页面
PREVIEW_SEAL_LIST(false, "PREVIEW_SEAL_LIST", EssContext.SEAL),
// 生成预览印章详情的嵌入页面
PREVIEW_SEAL_DETAIL(true, "PREVIEW_SEAL_DETAIL", EssContext.SEAL),
// 生成预览合同文档的嵌入页面H5链接支持移动端的浏览器中打开
PREVIEW_CONTRACT(true, "PREVIEW_FLOW", EssContext.CONTRACT),
// 生成预览合同详情的嵌入页面仅支持PC的浏览器中打开
PREVIEW_CONTRACT_DETAIL(true, "PREVIEW_FLOW_DETAIL", EssContext.CONTRACT);
// 生成创建印章的嵌入页面
CREATE_SEAL(false, "CREATE_SEAL", EssContext.SEAL),
// 生成预览印章列表的嵌入页面
PREVIEW_SEAL_LIST(false, "PREVIEW_SEAL_LIST", EssContext.SEAL),
// 生成预览印章详情的嵌入页面
PREVIEW_SEAL_DETAIL(true, "PREVIEW_SEAL_DETAIL", EssContext.SEAL),
// 生成预览合同文档的嵌入页面H5链接支持移动端的浏览器中打开
PREVIEW_CONTRACT(true, "PREVIEW_FLOW", EssContext.CONTRACT),
// 生成预览合同详情的嵌入页面仅支持PC的浏览器中打开
PREVIEW_CONTRACT_DETAIL(true, "PREVIEW_FLOW_DETAIL", EssContext.CONTRACT);
private final boolean businessIdRequired;
private final String essCode;
private final EssContext essContext;
private final boolean businessIdRequired;
private final String essCode;
private final EssContext essContext;
public enum EssContext {
SEAL, CONTRACT
}
public enum EssContext {
SEAL, CONTRACT
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.enums;
import lombok.AccessLevel;
@ -8,10 +9,10 @@ import lombok.RequiredArgsConstructor;
*/
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public enum EssPersonState {
// 创建
CREATED,
// 认证
AUTHORIZED,
// 离职
RESIGNED
// 创建
CREATED,
// 认证
AUTHORIZED,
// 离职
RESIGNED
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.enums;
import lombok.Getter;
@ -9,13 +10,12 @@ import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public enum EssSealState {
// 创建
CREATE,
// 删除
DELETED,
// 停用
DISABLED,
// 启用
ENABLED
;
// 创建
CREATE,
// 删除
DELETED,
// 停用
DISABLED,
// 启用
ENABLED;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.enums;
import lombok.Getter;
@ -11,34 +12,34 @@ import java.util.List;
@Getter
public enum EssSealType {
OFFICIAL("公章", "OFFICIAL"),
CONTRACT("合同专用章", "CONTRACT"),
FINANCE("财务专用章", "FINANCE"),
PERSONNEL("人事专用章", "PERSONNEL"),
INVOICE("发票专用章", "INVOICE"),
LEGAL_PERSON_SEAL("法定代表人章", "LEGAL_PERSON_SEAL"),
OTHER("其他", "EMPLOYEE_QUALIFICATION_SEAL");
OFFICIAL("公章", "OFFICIAL"),
CONTRACT("合同专用章", "CONTRACT"),
FINANCE("财务专用章", "FINANCE"),
PERSONNEL("人事专用章", "PERSONNEL"),
INVOICE("发票专用章", "INVOICE"),
LEGAL_PERSON_SEAL("法定代表人章", "LEGAL_PERSON_SEAL"),
OTHER("其他", "EMPLOYEE_QUALIFICATION_SEAL");
private final String description;
private final String[] essCodes;
private final String description;
private final String[] essCodes;
EssSealType(String description, String... essCodes) {
this.description = description;
this.essCodes = essCodes;
}
EssSealType(String description, String... essCodes) {
this.description = description;
this.essCodes = essCodes;
}
public List<String> getEssCodes() {
return Arrays.asList(essCodes);
}
public List<String> getEssCodes() {
return Arrays.asList(essCodes);
}
public static EssSealType fromEssCode(String essCode) {
for (EssSealType value : values()) {
for (String code : value.essCodes) {
if (code.equals(essCode)) {
return value;
}
}
}
return OTHER;
}
public static EssSealType fromEssCode(String essCode) {
for (EssSealType value : values()) {
for (String code : value.essCodes) {
if (code.equals(essCode)) {
return value;
}
}
}
return OTHER;
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.enums;
import cn.axzo.framework.rocketmq.Event;
@ -13,26 +14,23 @@ import java.util.Arrays;
@Getter
public enum MQEvent {
ESS_CONTRACT_STATE_CHANGE("nanopart", "ess-contract-state-change", "腾讯电子签合同状态变化"),
ESS_CONTRACT_DOWNLOAD_PDF("nanopart", "ess-contract-download-pdf", "腾讯电子签合同下载PDF"),
ESS_CONTRACT_STATE_CHANGE("nanopart", "ess-contract-state-change", "腾讯电子签合同状态变化"),
ESS_CONTRACT_DOWNLOAD_PDF("nanopart", "ess-contract-download-pdf", "腾讯电子签合同下载PDF"),
;
private final String model;
private final String tag;
private final String desc;
private final Event.EventCode eventCode;
;
private final String model;
private final String tag;
private final String desc;
private final Event.EventCode eventCode;
MQEvent(String model, String tag, String desc) {
this.eventCode = Event.EventCode.builder()
.module(model)
.name(tag)
.build();
this.model = model;
this.tag = tag;
this.desc = desc;
}
MQEvent(String model, String tag, String desc) {
this.eventCode = Event.EventCode.builder().module(model).name(tag).build();
this.model = model;
this.tag = tag;
this.desc = desc;
}
public static MQEvent getByName(String name){
return Arrays.stream(MQEvent.values()).filter(item -> item.name().equals(name)).findFirst().orElse(null);
}
public static MQEvent getByName(String name) {
return Arrays.stream(MQEvent.values()).filter(item -> item.name().equals(name)).findFirst().orElse(null);
}
}

View File

@ -1,8 +1,9 @@
package cn.axzo.nanopart.ess.api.enums;
/**
* @author yanglin
*/
public enum SignUrlEndpoint {
PC, WEIXIN_APP
PC, WEIXIN_APP
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.mq;
import cn.axzo.nanopart.ess.api.domain.contract.EssContractInfo;
@ -11,14 +12,14 @@ import lombok.Setter;
@Getter
public class EssContractDownloadPDFEvent extends MqMessage {
/**
* 合同信息
*/
private EssContractInfo contract;
/**
* 合同信息
*/
private EssContractInfo contract;
/**
* 是否重复下载
*/
private boolean retryDownload;
/**
* 是否重复下载
*/
private boolean retryDownload;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.mq;
import cn.axzo.nanopart.ess.api.domain.contract.EssContractInfo;
@ -11,9 +12,9 @@ import lombok.Setter;
@Getter
public class EssContractStateChangeMessage extends MqMessage {
/**
* 合同信息, 处理签署详情时需要做幂等
*/
private EssContractInfo contract;
/**
* 合同信息, 处理签署详情时需要做幂等
*/
private EssContractInfo contract;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.mq;
import cn.hutool.core.lang.UUID;
@ -15,19 +16,19 @@ import java.util.Date;
@Getter
public abstract class MqMessage implements Serializable {
/**
* 消息唯一id
*/
private String messageId = UUID.randomUUID().toString();
/**
* 消息唯一id
*/
private String messageId = UUID.randomUUID().toString();
/**
* 消息发送时间
*/
private Date messageSendTime = new Date();
/**
* 消息发送时间
*/
private Date messageSendTime = new Date();
/**
* 消息发送时间, 字符串格式
*/
private String messageSendTimeStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(messageSendTime);
/**
* 消息发送时间, 字符串格式
*/
private String messageSendTimeStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(messageSendTime);
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -10,29 +11,30 @@ import javax.validation.constraints.NotNull;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class AddSealAuthorizationRequest implements SealAndPersonRequest {
/**
* 印章id
*/
@NotBlank(message = "essSealId不能为空")
private String essSealId;
/**
* 印章id
*/
@NotBlank(message = "essSealId不能为空")
private String essSealId;
/**
* 人员id
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* 人员id
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* 前端忽略
*/
@NotNull(message = "operatorPersonId不能为空")
private Long operatorPersonId;
/**
* 前端忽略
*/
@NotNull(message = "operatorPersonId不能为空")
private Long operatorPersonId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -10,23 +11,24 @@ import javax.validation.constraints.NotNull;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class AddSealPersonRequest {
/**
* 印章id
*/
@NotBlank(message = "essSealId不能为空")
private String essSealId;
/**
* 印章id
*/
@NotBlank(message = "essSealId不能为空")
private String essSealId;
/**
* 人员id列表
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* 人员id列表
*/
@NotNull(message = "personId不能为空")
private Long personId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -10,10 +11,10 @@ import lombok.Setter;
@Setter
@Getter
public class CallbackContent {
private String encrypt;
private String encrypt;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -13,195 +14,202 @@ import java.util.List;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class CallbackRequest {
@JsonProperty(value = "MsgId")
@JSONField(name = "MsgId")
private String MsgId;
@JsonProperty(value = "MsgType")
@JSONField(name = "MsgType")
private String MsgType;
@JsonProperty(value = "MsgVersion")
@JSONField(name = "MsgVersion")
private String MsgVersion;
@JsonProperty(value = "MsgData")
@JSONField(name = "MsgData")
private JSONObject MsgData;
@JsonProperty(value = "MsgId")
@JSONField(name = "MsgId")
private String MsgId;
@JsonProperty(value = "MsgType")
@JSONField(name = "MsgType")
private String MsgType;
@JsonProperty(value = "MsgVersion")
@JSONField(name = "MsgVersion")
private String MsgVersion;
@JsonProperty(value = "MsgData")
@JSONField(name = "MsgData")
private JSONObject MsgData;
public <T> T readMsgData(Class<T> clazz) {
return MsgData.toJavaObject(clazz);
}
public <T> T readMsgData(Class<T> clazz) {
return MsgData.toJavaObject(clazz);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Setter @Getter
public static class OrgAuthorizationFinish {
// 第三方应用的应用编号
private String ApplicationId;
// 第三方平台子客企业的唯一标识定义Agent中的ProxyOrganizationOpenId一样
private String ProxyOrganizationOpenId;
// 开通服务的第三方平台子客企业员工的唯一标识
private String ProxyOperatorOpenId;
// 子企业的ProxyAppId, 现在还没有地方使用此ProxyAppId, 可忽略
private String ProxyAppId;
// 是否开通, true表示开通, false表示未开通
private boolean OpenSuccess;
// 子企业的企业名字
private String OrganizationName;
// 子企业的企业社会统一信用代码
private String USCC;
// 子企业的法人的姓名
private String LegalName;
// 子企业的法人的OpenId
private String LegalOpenId;
// 子企业超管的姓名
private String AdminName;
// 子企业超管的手机号打码
private String AdminMobile;
}
@Setter
@Getter
public static class OrgAuthorizationFinish {
// 第三方应用的应用编号
private String ApplicationId;
// 第三方平台子客企业的唯一标识定义Agent中的ProxyOrganizationOpenId一样
private String ProxyOrganizationOpenId;
// 开通服务的第三方平台子客企业员工的唯一标识
private String ProxyOperatorOpenId;
// 子企业的ProxyAppId, 现在还没有地方使用此ProxyAppId, 可忽略
private String ProxyAppId;
// 是否开通, true表示开通, false表示未开通
private boolean OpenSuccess;
// 子企业的企业名字
private String OrganizationName;
// 子企业的企业社会统一信用代码
private String USCC;
// 子企业的法人的姓名
private String LegalName;
// 子企业的法人的OpenId
private String LegalOpenId;
// 子企业超管的姓名
private String AdminName;
// 子企业超管的手机号打码
private String AdminMobile;
}
@Setter @Getter
public static class OrgPersonJoin {
// 第三方应用的应用编号
private String ApplicationId;
// 第三方平台子客企业的唯一标识定义Agent中的ProxyOrganizationOpenId一样, 可以参考Agent结构体
private String ProxyOrganizationOpenId;
// 加入企业的第三方平台子客企业员工的唯一标识
private String ProxyOperatorOpenId;
// 员工姓名
private String EmployeeName;
// 员工手机号打码
private String EmployeeMobile;
}
@Setter
@Getter
public static class OrgPersonJoin {
// 第三方应用的应用编号
private String ApplicationId;
// 第三方平台子客企业的唯一标识定义Agent中的ProxyOrganizationOpenId一样, 可以参考Agent结构体
private String ProxyOrganizationOpenId;
// 加入企业的第三方平台子客企业员工的唯一标识
private String ProxyOperatorOpenId;
// 员工姓名
private String EmployeeName;
// 员工手机号打码
private String EmployeeMobile;
}
@Setter @Getter
public static class SealOperate {
// 第三方应用的应用编号
private String ApplicationId;
// 第三方平台子客企业的唯一标识
private String ProxyOrganizationOpenId;
// 执行对应印章动作的第三方平台子客企业员工的唯一标识
private String ProxyOperatorOpenId;
/**
* 1. 如果印章授权给员工的行为, 此处为被授权员工的OpenId
* 2. 如果是取消某员工的印章授权, 此处为被取消授权员工的OpenId
* 3. 其他印章行为没有此字段
*/
private String AuthorizedOperatorOpenId;
// 对应的印章ID为32位字符串
private String SealId;
/**
* 对应的印章类型, 类型的值包括:
* OFFICIAL:企业公章
* CONTRACT:企业合同专用章
* ORGANIZATION_SEAL:客户本地上传的企业印章
* LEGAL_PERSON_SEAL:客户本地上传的法人印章
* FINANCE:财务专用章
* PERSONNEL:人事专用章
*/
private String SealType;
/**
* 印章创建 Create
* 印章删除 Delete
* 印章停用 Disable
* 印章启用 Enable
* 印章授权给某些员工 Valid
* 取消某些员工的印章授权 Invalid
*/
private String Operate;
/**
* 1. 如果印章启用或者停用行为, 是此印章权限的员工们的OpenId
* 2. 其他印章行为没有此字段
*/
private JSONArray AuthorizedUsers;
}
@Setter
@Getter
public static class SealOperate {
// 第三方应用的应用编号
private String ApplicationId;
// 第三方平台子客企业的唯一标识
private String ProxyOrganizationOpenId;
// 执行对应印章动作的第三方平台子客企业员工的唯一标识
private String ProxyOperatorOpenId;
/**
* 1. 如果印章授权给员工的行为, 此处为被授权员工的OpenId
* 2. 如果是取消某员工的印章授权, 此处为被取消授权员工的OpenId
* 3. 其他印章行为没有此字段
*/
private String AuthorizedOperatorOpenId;
// 对应的印章ID为32位字符串
private String SealId;
/**
* 对应的印章类型, 类型的值包括:
* OFFICIAL:企业公章
* CONTRACT:企业合同专用章
* ORGANIZATION_SEAL:客户本地上传的企业印章
* LEGAL_PERSON_SEAL:客户本地上传的法人印章
* FINANCE:财务专用章
* PERSONNEL:人事专用章
*/
private String SealType;
/**
* 印章创建 Create
* 印章删除 Delete
* 印章停用 Disable
* 印章启用 Enable
* 印章授权给某些员工 Valid
* 取消某些员工的印章授权 Invalid
*/
private String Operate;
/**
* 1. 如果印章启用或者停用行为, 是此印章权限的员工们的OpenId
* 2. 其他印章行为没有此字段
*/
private JSONArray AuthorizedUsers;
}
@Setter @Getter
public static class ContractStateChanged {
// 第三方平台子客企业的唯一标识
private String ApplicationId;
// 第三方平台子客企业的唯一标识
private String ProxyOrganizationOpenId;
// 第三方平台子客企业员工的唯一标识
private String ProxyOperatorOpenId;
// 用PDF文件创建签署流程和用模板创建签署流程创建签署流程时候传递的CustomerData参数
private String CustomerData;
// 触发回调的合同流程ID为32位字符串
private String FlowId;
// 触发回调的合同流程的名称
private String FlowName;
// 触发回调的合同流程的类别分类
private String FlowType;
// 合同状态具体含义可以参考上述其他说明中的 会出现回调的合同状态
private String FlowStatus;
// 当合同流程状态为合同拒签, 合同撤回等状态时此字段为拒签或撤销原因其他状态时此字段为空值
private String FlowMessage;
// 合同流程的创建时间戳格式为Unix标准时间戳
private Integer CreateOn;
// 签署流程的签署截止时间格式为Unix标准时间戳
private Integer Deadline;
// 合同(流程)关注方信息列表, 结构体定义可以查看开发者中的CcInfo
private JSONArray CcInfo;
// 合同(流程)签署人信息列表, 结构体的定义可以参考下面的FlowApproverDetail
private List<FlowApproverDetail> FlowApproverInfo;
// 如果合同归属合同组, 此结构体为合同组的信息, 结构体的定义可以参考下面的FlowGroupMessageDetail
private JSONObject FlowGroupMessage;
// 此回调触发的时间,格式为Unix标准时间戳
private Integer OccurTime;
}
@Setter
@Getter
public static class ContractStateChanged {
// 第三方平台子客企业的唯一标识
private String ApplicationId;
// 第三方平台子客企业的唯一标识
private String ProxyOrganizationOpenId;
// 第三方平台子客企业员工的唯一标识
private String ProxyOperatorOpenId;
// 用PDF文件创建签署流程和用模板创建签署流程创建签署流程时候传递的CustomerData参数
private String CustomerData;
// 触发回调的合同流程ID为32位字符串
private String FlowId;
// 触发回调的合同流程的名称
private String FlowName;
// 触发回调的合同流程的类别分类
private String FlowType;
// 合同状态具体含义可以参考上述其他说明中的 会出现回调的合同状态
private String FlowStatus;
// 当合同流程状态为合同拒签, 合同撤回等状态时此字段为拒签或撤销原因其他状态时此字段为空值
private String FlowMessage;
// 合同流程的创建时间戳格式为Unix标准时间戳
private Integer CreateOn;
// 签署流程的签署截止时间格式为Unix标准时间戳
private Integer Deadline;
// 合同(流程)关注方信息列表, 结构体定义可以查看开发者中的CcInfo
private JSONArray CcInfo;
// 合同(流程)签署人信息列表, 结构体的定义可以参考下面的FlowApproverDetail
private List<FlowApproverDetail> FlowApproverInfo;
// 如果合同归属合同组, 此结构体为合同组的信息, 结构体的定义可以参考下面的FlowGroupMessageDetail
private JSONObject FlowGroupMessage;
// 此回调触发的时间,格式为Unix标准时间戳
private Integer OccurTime;
}
@Setter @Getter
public static class FlowApproverDetail {
// 如果第三方子企业员工签署, 此字段为第三方子企业员工的唯一标识
private String ProxyOperatorOpenId;
// 如果第三方子企业员工签署, 此字段为第三方子企业的名称
private String ProxyOrganizationName;
// 如果saas企业员工签署, 此字段为saas企业的名称
private String OrganizationName;
// 如果第三方子企业员工签署, 此字段为第三方子企业的唯一标识
private String ProxyOrganizationOpenId;
// 对应签署人的手机号
private String PhoneNumber;
// 如果合同是顺序签署, SignOrder对应签署人的签署顺序
private long SignOrder;
// 对应签署人的参与角色ID
private String RecipientId;
// 对应签署人的名字
private String ApproveName;
// 对应签署人的状态, 具体含义可以参考上述其他说明中的 签署人状态
private String ApproveStatus;
// 对应签署人状态的简单描述, : 已签署或者拒签的原因等
private String ApproveMessage;
// 对应签署人签署此合同的时间格式为Unix标准时间戳
private long ApproveTime;
// 对应签署人签署此合同的证书信息, 此功能为白名单功能, 使用前请联系对接的客户经理沟通
private String CaSign;
// 对应签署人的签署截止时间格式为Unix标准时间戳
private long ApproverDeadline;
}
@Setter
@Getter
public static class FlowApproverDetail {
// 如果第三方子企业员工签署, 此字段为第三方子企业员工的唯一标识
private String ProxyOperatorOpenId;
// 如果第三方子企业员工签署, 此字段为第三方子企业的名称
private String ProxyOrganizationName;
// 如果saas企业员工签署, 此字段为saas企业的名称
private String OrganizationName;
// 如果第三方子企业员工签署, 此字段为第三方子企业的唯一标识
private String ProxyOrganizationOpenId;
// 对应签署人的手机号
private String PhoneNumber;
// 如果合同是顺序签署, SignOrder对应签署人的签署顺序
private long SignOrder;
// 对应签署人的参与角色ID
private String RecipientId;
// 对应签署人的名字
private String ApproveName;
// 对应签署人的状态, 具体含义可以参考上述其他说明中的 签署人状态
private String ApproveStatus;
// 对应签署人状态的简单描述, : 已签署或者拒签的原因等
private String ApproveMessage;
// 对应签署人签署此合同的时间格式为Unix标准时间戳
private long ApproveTime;
// 对应签署人签署此合同的证书信息, 此功能为白名单功能, 使用前请联系对接的客户经理沟通
private String CaSign;
// 对应签署人的签署截止时间格式为Unix标准时间戳
private long ApproverDeadline;
}
@Setter @Getter
public static class SuperAdminChanged {
// 第三方应用的应用编号
private String ApplicationId;
// 第三方平台子客企业的唯一标识
private String ProxyOrganizationOpenId;
// 新的超管的企业的第三方平台子客企业员工的唯一标识
private String ChangeToUserOpenId;
// 新的超管的名字
private String ChangeToUserName;
// 新的超管的手机号
private String ChangeToUserMobile;
// 老的超管的企业的第三方平台子客企业员工的唯一标识
private String OldAdminOpenId;
// 老的超管的名字
private String OldAdminName;
// 老的超管的手机号
private String OldAdminMobile;
}
@Setter
@Getter
public static class SuperAdminChanged {
// 第三方应用的应用编号
private String ApplicationId;
// 第三方平台子客企业的唯一标识
private String ProxyOrganizationOpenId;
// 新的超管的企业的第三方平台子客企业员工的唯一标识
private String ChangeToUserOpenId;
// 新的超管的名字
private String ChangeToUserName;
// 新的超管的手机号
private String ChangeToUserMobile;
// 老的超管的企业的第三方平台子客企业员工的唯一标识
private String OldAdminOpenId;
// 老的超管的名字
private String OldAdminName;
// 老的超管的手机号
private String OldAdminMobile;
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import cn.axzo.nanopart.ess.api.domain.OrgPerson;
@ -15,38 +16,38 @@ import javax.validation.constraints.NotNull;
@Getter
public class CreateConsoleLoginUrlRequest implements OrgPerson {
/**
* 单位id
*/
@NotNull(message = "单位id不能为空")
private Long ouId;
/**
* 单位id
*/
@NotNull(message = "单位id不能为空")
private Long ouId;
/**
* 人员id
*/
@NotNull(message = "人员id不能为空")
private Long personId;
/**
* 人员id
*/
@NotNull(message = "人员id不能为空")
private Long personId;
/**
* 具体传啥问产品:
* PC: (默认)web控制台链接, 需要在PC浏览器中打开
* CHANNEL: H5跳转到电子签小程序链接, 一般用于发送短信中带的链接, 打开后进入腾讯电子签小程序
* SHORT_URL: H5跳转到电子签小程序链接的短链形式, 一般用于发送短信中带的链接, 打开后进入腾讯电子签小程序
* WEIXIN_QRCODE_URL: 直接跳转至电子签小程序的二维码链接无需通过中转页您需要自行将其转换为二维码使用微信扫码后可直接进入请注意直接点击链接是无效的
* APP: APP或小程序跳转电子签小程序链接, 一般用于贵方小程序或者APP跳转过来, 打开后进入腾讯电子签小程序
* H5: H5长链接跳转H5链接, 一般用于贵方H5跳转过来, 打开后进入腾讯电子签H5页面
* SHORT_H5: H5短链跳转H5的短链形式, 一般用于发送短信中带的链接, 打开后进入腾讯电子签H5页面
*/
@NotNull(message = "endpoint不能为空")
private EssConsoleUrlEndpoint endpoint;
/**
* 具体传啥问产品:
* PC: (默认)web控制台链接, 需要在PC浏览器中打开
* CHANNEL: H5跳转到电子签小程序链接, 一般用于发送短信中带的链接, 打开后进入腾讯电子签小程序
* SHORT_URL: H5跳转到电子签小程序链接的短链形式, 一般用于发送短信中带的链接, 打开后进入腾讯电子签小程序
* WEIXIN_QRCODE_URL: 直接跳转至电子签小程序的二维码链接无需通过中转页您需要自行将其转换为二维码使用微信扫码后可直接进入请注意直接点击链接是无效的
* APP: APP或小程序跳转电子签小程序链接, 一般用于贵方小程序或者APP跳转过来, 打开后进入腾讯电子签小程序
* H5: H5长链接跳转H5链接, 一般用于贵方H5跳转过来, 打开后进入腾讯电子签H5页面
* SHORT_H5: H5短链跳转H5的短链形式, 一般用于发送短信中带的链接, 打开后进入腾讯电子签H5页面
*/
@NotNull(message = "endpoint不能为空")
private EssConsoleUrlEndpoint endpoint;
/**
* 调试参数, 不填
*/
private transient boolean essCheckLoginPerson = true;
/**
* 调试参数, 不填
*/
private transient boolean essCheckLoginPerson = true;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import cn.axzo.nanopart.ess.api.domain.CreateContractByFile;
@ -18,21 +19,22 @@ import javax.validation.constraints.NotNull;
@Getter
public class CreateContractByFileRequest extends CreateContractRequest {
/**
* 通过上传PDF发起合同
*/
@Valid
@NotNull(message = "byFile不能为空")
private CreateContractByFile byFile;
/**
* 通过上传PDF发起合同
*/
@Valid
@NotNull(message = "byFile不能为空")
private CreateContractByFile byFile;
@JsonIgnore @JSONField(serialize = false)
public CreateContractInfo getContract() {
return byFile;
}
@JsonIgnore
@JSONField(serialize = false)
public CreateContractInfo getContract() {
return byFile;
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import cn.axzo.nanopart.ess.api.domain.CreateContractInfo;
@ -19,32 +20,33 @@ import java.util.UUID;
@Getter
public abstract class CreateContractRequest {
/**
* 发起合同的应用或业务场景
*/
@NotBlank(message = "appCode不能为空")
private String appCode;
/**
* 发起合同的应用或业务场景
*/
@NotBlank(message = "appCode不能为空")
private String appCode;
/**
* 业务编码
*/
@NotNull(message = "bizCode不能为空")
private String bizCode;
/**
* 业务编码
*/
@NotNull(message = "bizCode不能为空")
private String bizCode;
/**
* 幂等编码, 最大长度200. 使用appCode和idempotentCode的合同不能重复
*/
@NotBlank(message = "idempotentCode不能为空")
private String idempotentCode = UUID.randomUUID().toString();
/**
* 幂等编码, 最大长度200. 使用appCode和idempotentCode的合同不能重复
*/
@NotBlank(message = "idempotentCode不能为空")
private String idempotentCode = UUID.randomUUID().toString();
/**
* 合同发起方信息
*/
@Valid
@NotNull(message = "creator不能为空")
private OperatorInfo creator;
/**
* 合同发起方信息
*/
@Valid
@NotNull(message = "creator不能为空")
private OperatorInfo creator;
@JsonIgnore @JSONField(serialize = false)
public abstract CreateContractInfo getContract();
@JsonIgnore
@JSONField(serialize = false)
public abstract CreateContractInfo getContract();
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -9,17 +10,18 @@ import javax.validation.constraints.NotBlank;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class DownloadSingedContractPdfRequest {
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -9,17 +10,18 @@ import javax.validation.constraints.NotBlank;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetContractDetailByContractIdRequest {
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import cn.axzo.nanopart.ess.api.domain.OrgPerson;
@ -15,28 +16,28 @@ import javax.validation.constraints.NotNull;
@Getter
public class GetContractSignUrlRequest implements OrgPerson {
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
/**
* 单位id
*/
@NotNull(message = "ouId不能为空")
private Long ouId;
/**
* 单位id
*/
@NotNull(message = "ouId不能为空")
private Long ouId;
/**
* 人员id, 需要有印章权限
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* 人员id, 需要有印章权限
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* PC: 电脑端, WEIXIN_APP: 小程序
*/
@NotNull(message = "urlType不能为空")
private SignUrlEndpoint urlType;
/**
* PC: 电脑端, WEIXIN_APP: 小程序
*/
@NotNull(message = "urlType不能为空")
private SignUrlEndpoint urlType;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import cn.axzo.nanopart.ess.api.enums.EssEmbedType;
@ -10,36 +11,37 @@ import javax.validation.constraints.NotNull;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetEmbedWebUrlRequest {
/**
* 单位id
*/
@NotNull(message = "单位id不能为空")
private Long ouId;
/**
* 单位id
*/
@NotNull(message = "单位id不能为空")
private Long ouId;
/**
* 内嵌类型.
* CREATE_SEAL: 生成创建印章的嵌入页面
* PREVIEW_CONTRACT: 生成预览合同文档的嵌入页面H5链接支持移动端的浏览器中打开
* PREVIEW_CONTRACT_DETAIL: 生成预览合同详情的嵌入页面仅支持PC的浏览器中打开
* PREVIEW_SEAL_LIST: 生成预览印章列表的嵌入页面
* PREVIEW_SEAL_DETAIL: 生成预览印章详情的嵌入页面
*/
@NotNull(message = "内嵌类型不能为空")
private EssEmbedType embedType;
/**
* 内嵌类型.
* CREATE_SEAL: 生成创建印章的嵌入页面
* PREVIEW_CONTRACT: 生成预览合同文档的嵌入页面H5链接支持移动端的浏览器中打开
* PREVIEW_CONTRACT_DETAIL: 生成预览合同详情的嵌入页面仅支持PC的浏览器中打开
* PREVIEW_SEAL_LIST: 生成预览印章列表的嵌入页面
* PREVIEW_SEAL_DETAIL: 生成预览印章详情的嵌入页面
*/
@NotNull(message = "内嵌类型不能为空")
private EssEmbedType embedType;
/**
* 业务id.
* PREVIEW_CONTRACT: 传入合同id
* PREVIEW_CONTRACT_DETAIL: 传入合同id
* PREVIEW_SEAL_DETAIL: 传入印章id
*/
private String businessId;
/**
* 业务id.
* PREVIEW_CONTRACT: 传入合同id
* PREVIEW_CONTRACT_DETAIL: 传入合同id
* PREVIEW_SEAL_DETAIL: 传入印章id
*/
private String businessId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -10,18 +11,19 @@ import java.util.Set;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetOrgAuthStatesRequest {
/**
* 单位id
*/
@NotEmpty(message = "单位id不能为空")
private Set<Long> ouIds;
/**
* 单位id
*/
@NotEmpty(message = "单位id不能为空")
private Set<Long> ouIds;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import cn.axzo.nanopart.ess.api.domain.OrgPerson;
@ -10,22 +11,23 @@ import javax.validation.constraints.NotNull;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetPersonAuthStateRequest implements OrgPerson {
/**
* 单位id
*/
@NotNull(message = "单位id不能为空")
private Long ouId;
/**
* 单位id
*/
@NotNull(message = "单位id不能为空")
private Long ouId;
/**
* 人员id
*/
@NotNull(message = "人员id不能为空")
private Long personId;
/**
* 人员id
*/
@NotNull(message = "人员id不能为空")
private Long personId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import lombok.Getter;
@ -8,13 +9,14 @@ import javax.validation.constraints.NotBlank;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetSealPersonRequest {
/**
* 印章在腾讯的id
*/
@NotBlank(message = "essSealId不能为空")
private String essSealId;
/**
* 印章在腾讯的id
*/
@NotBlank(message = "essSealId不能为空")
private String essSealId;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -10,17 +11,18 @@ import java.util.Set;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetSealsRequest {
/**
* 单位列表
*/
@NotNull(message = "单位列表不能为空")
private Set<Long> ouIds;
/**
* 单位列表
*/
@NotNull(message = "单位列表不能为空")
private Set<Long> ouIds;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import cn.axzo.nanopart.ess.api.domain.OrgPerson;
@ -16,41 +17,41 @@ import javax.validation.constraints.NotNull;
@Getter
public class GetSignUrlRequest implements OrgPerson {
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
/**
* 单位id
*/
@NotNull(message = "ouId不能为空")
private Long ouId;
/**
* 单位id
*/
@NotNull(message = "ouId不能为空")
private Long ouId;
/**
* 人员id, 需要有印章权限
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* 人员id, 需要有印章权限
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* PC: 电脑端, WEIXIN_APP: 小程序
*/
@NotNull(message = "endpoint不能为空")
private SignUrlEndpoint endpoint;
/**
* PC: 电脑端, WEIXIN_APP: 小程序
*/
@NotNull(message = "endpoint不能为空")
private SignUrlEndpoint endpoint;
/**
* 签署方编号, 可以使用该编号指定动态签署方的信息, 该编号在创建合同的时候会返回
* <p/>
* 如果在创建合同的时候存在任意没有指定具体签署人(Approver#signPersion)的情况下, 该字段必传
* <p/>
* 如果在创建合同的时候已经指定了所有的具体签署人(Approver#signPersion), 该字段可以不传
*/
private String recipientId;
/**
* 签署方编号, 可以使用该编号指定动态签署方的信息, 该编号在创建合同的时候会返回
* <p/>
* 如果在创建合同的时候存在任意没有指定具体签署人(Approver#signPersion)的情况下, 该字段必传
* <p/>
* 如果在创建合同的时候已经指定了所有的具体签署人(Approver#signPersion), 该字段可以不传
*/
private String recipientId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -10,23 +11,24 @@ import javax.validation.constraints.NotNull;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class RemoveSealAuthorizationRequest implements SealAndPersonRequest {
/**
* 印章id
*/
@NotBlank(message = "essSealId不能为空")
private String essSealId;
/**
* 印章id
*/
@NotBlank(message = "essSealId不能为空")
private String essSealId;
/**
* 人员id
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* 人员id
*/
@NotNull(message = "personId不能为空")
private Long personId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -14,20 +15,20 @@ import javax.validation.constraints.NotNull;
@Getter
public class RemoveSealPersonRequest {
/**
* 印章id
*/
@NotBlank(message = "essSealId不能为空")
private String essSealId;
/**
* 印章id
*/
@NotBlank(message = "essSealId不能为空")
private String essSealId;
/**
* 人员id
*/
@NotNull(message = "personId不能为空")
private Long personId;
/**
* 人员id
*/
@NotNull(message = "personId不能为空")
private Long personId;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -9,22 +10,23 @@ import javax.validation.constraints.NotBlank;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class RevokeContractRequest {
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
/**
* 撤销原因
*/
private String reason;
/**
* 撤销原因
*/
private String reason;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON;
@ -9,22 +10,23 @@ import javax.validation.constraints.NotBlank;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class SaveContractSnapshotRequest {
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
/**
* 合同id
*/
@NotBlank(message = "essContractId不能为空")
private String essContractId;
/**
* 是否重复下载, 即已经下载过了, 但是需要重新下载
*/
private boolean retryDownload = false;
/**
* 是否重复下载, 即已经下载过了, 但是需要重新下载
*/
private boolean retryDownload = false;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.request;
/**
@ -5,8 +6,8 @@ package cn.axzo.nanopart.ess.api.request;
*/
public interface SealAndPersonRequest {
String getEssSealId();
String getEssSealId();
Long getPersonId();
Long getPersonId();
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.response;
import com.alibaba.fastjson.JSON;
@ -7,16 +8,17 @@ import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class CreateConsoleLoginUrlResponse {
/**
* 腾讯电子签登录地址
*/
private String consoleLoginUrl;
/**
* 腾讯电子签登录地址
*/
private String consoleLoginUrl;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.response;
import com.alibaba.fastjson.JSON;
@ -9,30 +10,31 @@ import java.util.List;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class CreateContractByFileResponse {
/**
* 合同id
*/
private String essContractId;
/**
* 合同id
*/
private String essContractId;
/**
* 签署方编号, 可以使用该编号指定动态签署方的信息, 顺序和请求中的approvers一致.
* <p/>
* 比如在使用了动态签署人的情况下, 就需要保存这个字段
* <p/>
* 在获取签署链接的时候回传到获取签署链接的请求中, 用以和创建合同的请求中的签署人的其它信息进行匹配
*/
private List<String> essRecipientIds;
/**
* 签署方编号, 可以使用该编号指定动态签署方的信息, 顺序和请求中的approvers一致.
* <p/>
* 比如在使用了动态签署人的情况下, 就需要保存这个字段
* <p/>
* 在获取签署链接的时候回传到获取签署链接的请求中, 用以和创建合同的请求中的签署人的其它信息进行匹配
*/
private List<String> essRecipientIds;
/**
* 是否重复 (幂等)
*/
private boolean isDuplicate;
/**
* 是否重复 (幂等)
*/
private boolean isDuplicate;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.response;
import com.alibaba.fastjson.JSON;
@ -7,16 +8,17 @@ import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class DownloadSingedContractPdfResponse {
/**
* 合同pdf下载地址. 下载链接有效期为5分钟
*/
private String pdfUrl;
/**
* 合同pdf下载地址. 下载链接有效期为5分钟
*/
private String pdfUrl;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.response;
import cn.axzo.nanopart.ess.api.domain.contract.EssContractInfo;
@ -8,16 +9,17 @@ import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetContractDetailByContractIdResponse {
/**
* 合同信息
*/
private EssContractInfo contract;
/**
* 合同信息
*/
private EssContractInfo contract;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.response;
import lombok.Getter;
@ -6,14 +7,15 @@ import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetContractSignUrlResponse {
/**
* 签署地址或二维码地址, 有效期为5分钟
* 如果是PC端, 才是二维码地址
* 如果是小程序端, 则是小程序地址
*/
private String signOrQrUrl;
/**
* 签署地址或二维码地址, 有效期为5分钟
* 如果是PC端, 才是二维码地址
* 如果是小程序端, 则是小程序地址
*/
private String signOrQrUrl;
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.response;
import com.alibaba.fastjson.JSON;
@ -7,16 +8,17 @@ import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetEmbedWebUrlResponse {
/**
* 内嵌页面地址, 有效期为5分钟
*/
private String embedWebUrl;
/**
* 内嵌页面地址, 有效期为5分钟
*/
private String embedWebUrl;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.response;
import com.alibaba.fastjson.JSON;
@ -7,21 +8,22 @@ import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetOrgAuthStatesResponse {
/**
* 单位id
*/
private Long ouId;
/**
* 单位id
*/
private Long ouId;
/**
* 是否开通了电子签
*/
private boolean isAuthorized;
/**
* 是否开通了电子签
*/
private boolean isAuthorized;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.response;
import com.alibaba.fastjson.JSON;
@ -7,17 +8,17 @@ import lombok.Setter;
/**
* @author yanglin
*/
@Setter @Getter
@Setter
@Getter
public class GetPersonAuthStateResponse {
/**
* 是否认证
*/
private boolean isAuthorized;
/**
* 是否认证
*/
private boolean isAuthorized;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.response;
import com.alibaba.fastjson.JSON;
@ -11,13 +12,13 @@ import lombok.Setter;
@Getter
public class GetSignUrlResponse {
/**
* 有效期为5分钟.
*/
private String url;
/**
* 有效期为5分钟.
*/
private String url;
@Override
public String toString() {
return JSON.toJSONString(this);
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.utils;
import lombok.AccessLevel;
@ -9,27 +10,25 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public enum YesOrNo {
YES("YES", ""),
NO("NO", "")
;
public enum YesOrNo {
YES("YES", ""), NO("NO", "");
private final String code;
private final String desc;
private final String code;
private final String desc;
public static YesOrNo valueOf(boolean value) {
return value ? YES : NO;
}
public static YesOrNo valueOf(boolean value) {
return value ? YES : NO;
}
public boolean booleanValue() {
return this == YES;
}
public boolean booleanValue() {
return this == YES;
}
public boolean isYes() {
return this == YES;
}
public boolean isYes() {
return this == YES;
}
public boolean isNo() {
return this == NO;
}
public boolean isNo() {
return this == NO;
}
}