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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.domain; package cn.axzo.nanopart.ess.api.domain;
import lombok.Getter; import lombok.Getter;
@ -6,47 +7,48 @@ import lombok.Setter;
/** /**
* @author yanglin * @author yanglin
*/ */
@Setter @Getter @Setter
@Getter
public class EssSealPersonInfo { public class EssSealPersonInfo {
/** /**
* 单位id * 单位id
*/ */
private Long ouId; private Long ouId;
/** /**
* 印章用户信息 * 印章用户信息
*/ */
private PersonProfileInfo sealPerson = new PersonProfileInfo(); private PersonProfileInfo sealPerson = new PersonProfileInfo();
/** /**
* 印章授权人信息 * 印章授权人信息
*/ */
private PersonProfileInfo authorizedByPerson = new PersonProfileInfo(); private PersonProfileInfo authorizedByPerson = new PersonProfileInfo();
/** /**
* 印章id * 印章id
*/ */
private String essSealId; private String essSealId;
/** /**
* 是否已经激活(实名认证) * 是否已经激活(实名认证)
*/ */
private boolean isPersonAuthorized; private boolean isPersonAuthorized;
/** /**
* 授权时间, unix时间戳 * 授权时间, unix时间戳
*/ */
private Long authorizeTimeMs; 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; package cn.axzo.nanopart.ess.api.domain;
import lombok.Getter; import lombok.Getter;
@ -12,16 +13,16 @@ import javax.validation.constraints.NotNull;
@Getter @Getter
public class OperatorInfo implements OrgPerson { public class OperatorInfo implements OrgPerson {
/** /**
* 发起方单位id * 发起方单位id
*/ */
@NotNull(message = "ouId不能为空") @NotNull(message = "ouId不能为空")
private Long ouId; private Long ouId;
/** /**
* 发起方人员id * 发起方人员id
*/ */
@NotNull(message = "personId不能为空") @NotNull(message = "personId不能为空")
private Long personId; private Long personId;
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,3 +1,4 @@
package cn.axzo.nanopart.ess.api.mq; package cn.axzo.nanopart.ess.api.mq;
import cn.hutool.core.lang.UUID; import cn.hutool.core.lang.UUID;
@ -15,19 +16,19 @@ import java.util.Date;
@Getter @Getter
public abstract class MqMessage implements Serializable { public abstract class MqMessage implements Serializable {
/** /**
* 消息唯一id * 消息唯一id
*/ */
private String messageId = UUID.randomUUID().toString(); 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; package cn.axzo.nanopart.ess.api.request;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
@ -10,29 +11,30 @@ import javax.validation.constraints.NotNull;
/** /**
* @author yanglin * @author yanglin
*/ */
@Setter @Getter @Setter
@Getter
public class AddSealAuthorizationRequest implements SealAndPersonRequest { public class AddSealAuthorizationRequest implements SealAndPersonRequest {
/** /**
* 印章id * 印章id
*/ */
@NotBlank(message = "essSealId不能为空") @NotBlank(message = "essSealId不能为空")
private String essSealId; private String essSealId;
/** /**
* 人员id * 人员id
*/ */
@NotNull(message = "personId不能为空") @NotNull(message = "personId不能为空")
private Long personId; private Long personId;
/** /**
* 前端忽略 * 前端忽略
*/ */
@NotNull(message = "operatorPersonId不能为空") @NotNull(message = "operatorPersonId不能为空")
private Long operatorPersonId; private Long operatorPersonId;
@Override @Override
public String toString() { public String toString() {
return JSON.toJSONString(this); return JSON.toJSONString(this);
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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