REQ-3581: 备份
This commit is contained in:
parent
7aa7f01817
commit
e1015bebc2
@ -0,0 +1,39 @@
|
||||
package cn.axzo.nanopart.ess.api.enums;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Getter
|
||||
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public enum EssContractApproveState {
|
||||
|
||||
PENDING("待签署"),
|
||||
ACCEPT("已签署"),
|
||||
REJECT("拒绝"),
|
||||
DEADLINE("过期没人处理"),
|
||||
CANCEL("流程已撤回"),
|
||||
STOP("流程已终止"),
|
||||
WAITPICKUP("待领取"),
|
||||
FILLPENDING("待填写"),
|
||||
FILLACCEPT("填写完成"),
|
||||
FORWARD("已转他人处理"),
|
||||
RELIEVED("解除协议(已解除)"),
|
||||
FILLREJECT("拒绝填写"),
|
||||
EXCEPTION("异常")
|
||||
;
|
||||
|
||||
private final String description;
|
||||
|
||||
public static EssContractApproveState fromEssCode(String code) {
|
||||
for (EssContractApproveState value : values()) {
|
||||
if (value.name().equalsIgnoreCase(code)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -8,6 +8,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@ -145,13 +147,43 @@ public class CallbackRequest {
|
||||
// 合同(流程)关注方信息列表, 结构体定义可以查看开发者中的CcInfo
|
||||
private JSONArray CcInfo;
|
||||
// 合同(流程)签署人信息列表, 结构体的定义可以参考下面的FlowApproverDetail
|
||||
private JSONArray FlowApproverInfo;
|
||||
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 SuperAdminChanged {
|
||||
// 第三方应用的应用编号
|
||||
|
||||
@ -2,6 +2,7 @@ package cn.axzo.nanopart.ess.server.dao;
|
||||
|
||||
import cn.axzo.nanopart.ess.api.enums.EssContractState;
|
||||
import cn.axzo.nanopart.ess.server.entity.EssContract;
|
||||
import cn.axzo.nanopart.ess.server.entity.EssContract.ApproverDetail;
|
||||
import cn.axzo.nanopart.ess.server.mapper.EssContractMapper;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
@ -30,10 +31,11 @@ public class EssContractDao extends ServiceImpl<EssContractMapper, EssContract>
|
||||
.update();
|
||||
}
|
||||
|
||||
public void updateState(String essContractId, EssContractState state) {
|
||||
public void updateState(String essContractId, EssContractState state, List<ApproverDetail> details) {
|
||||
lambdaUpdate()
|
||||
.eq(EssContract::getEssContractId, essContractId)
|
||||
.set(EssContract::getState, state)
|
||||
.set(details != null, EssContract::getApproverDetails, details == null ? "[]" : JSON.toJSONString(details))
|
||||
.update();
|
||||
}
|
||||
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
package cn.axzo.nanopart.ess.server.entity;
|
||||
|
||||
import cn.axzo.foundation.dao.support.mysql.type.BaseListTypeHandler;
|
||||
import cn.axzo.nanopart.ess.api.enums.EssContractApproveState;
|
||||
import cn.axzo.nanopart.ess.api.enums.EssContractState;
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
@ -71,8 +71,8 @@ public class EssContract extends BaseEntity<EssContract> {
|
||||
/**
|
||||
* 状态描述
|
||||
*/
|
||||
@TableField(typeHandler = FastjsonTypeHandler.class)
|
||||
private JSONObject describeState;
|
||||
@TableField(typeHandler = ApproverDetailListHandler.class)
|
||||
private List<ApproverDetail> approverDetails;
|
||||
|
||||
/**
|
||||
* 扩展字段
|
||||
@ -89,8 +89,21 @@ public class EssContract extends BaseEntity<EssContract> {
|
||||
public static class RecordExt {
|
||||
}
|
||||
|
||||
@Setter @Getter
|
||||
public static class ApproverDetail {
|
||||
private Long ouId;
|
||||
private Long personId;
|
||||
private EssContractApproveState state;
|
||||
private long signOrder;
|
||||
private long approveTime;
|
||||
private String message;
|
||||
private long approverDeadline;
|
||||
}
|
||||
|
||||
// @formatter:off
|
||||
public static class StringListHandler
|
||||
extends BaseListTypeHandler<String> {}
|
||||
public static class ApproverDetailListHandler
|
||||
extends BaseListTypeHandler<String> {}
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ import cn.axzo.nanopart.ess.server.dao.EssPersonDao;
|
||||
import cn.axzo.nanopart.ess.server.dao.EssSealPersonDao;
|
||||
import cn.axzo.nanopart.ess.server.dao.domain.OuAndPersonId;
|
||||
import cn.axzo.nanopart.ess.server.entity.EssContract;
|
||||
import cn.axzo.nanopart.ess.server.entity.EssContract.ApproverDetail;
|
||||
import cn.axzo.nanopart.ess.server.entity.EssOrg;
|
||||
import cn.axzo.nanopart.ess.server.entity.EssPerson;
|
||||
import cn.axzo.nanopart.ess.server.entity.EssSealPerson;
|
||||
@ -109,8 +110,10 @@ public class ContractManager {
|
||||
}
|
||||
}
|
||||
|
||||
public void updateContractState(String essContractId, EssContractState state) {
|
||||
essContractDao.updateState(essContractId, state);
|
||||
public void updateContractState(String essContractId,
|
||||
EssContractState state,
|
||||
List<ApproverDetail> details) {
|
||||
essContractDao.updateState(essContractId, state, details);
|
||||
broadcaster.fireContractStateChanged(essContractId);
|
||||
}
|
||||
|
||||
@ -124,7 +127,7 @@ public class ContractManager {
|
||||
.find(contract.getCreatorOuId(), contract.getCreatorPersonId(), false)
|
||||
.orElse(null);
|
||||
essClient.revokeContract(creator, contract.getEssContractId(), request.getReason());
|
||||
essContractDao.updateState(request.getEssContractId(), EssContractState.CANCEL);
|
||||
essContractDao.updateState(request.getEssContractId(), EssContractState.CANCEL, null);
|
||||
}
|
||||
|
||||
}
|
||||
@ -2,6 +2,7 @@ package cn.axzo.nanopart.ess.server.ess.controller;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.nanopart.ess.api.EssCallbackApi;
|
||||
import cn.axzo.nanopart.ess.api.enums.EssContractApproveState;
|
||||
import cn.axzo.nanopart.ess.api.enums.EssContractState;
|
||||
import cn.axzo.nanopart.ess.api.enums.EssSealState;
|
||||
import cn.axzo.nanopart.ess.api.enums.EssSealType;
|
||||
@ -9,6 +10,7 @@ import cn.axzo.nanopart.ess.api.request.CallbackRequest;
|
||||
import cn.axzo.nanopart.ess.api.request.CallbackRequest.OrgAuthorizationFinish;
|
||||
import cn.axzo.nanopart.ess.api.request.CallbackRequest.SuperAdminChanged;
|
||||
import cn.axzo.nanopart.ess.server.dao.EssLogDao;
|
||||
import cn.axzo.nanopart.ess.server.entity.EssContract.ApproverDetail;
|
||||
import cn.axzo.nanopart.ess.server.entity.EssLog;
|
||||
import cn.axzo.nanopart.ess.server.ess.ContractManager;
|
||||
import cn.axzo.nanopart.ess.server.ess.OrgManager;
|
||||
@ -25,12 +27,14 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import static cn.axzo.nanopart.ess.api.request.CallbackRequest.ContractStateChanged;
|
||||
import static cn.axzo.nanopart.ess.api.request.CallbackRequest.OrgPersonJoin;
|
||||
import static cn.axzo.nanopart.ess.api.request.CallbackRequest.SealOperate;
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
@ -96,10 +100,25 @@ class CallbackController implements EssCallbackApi, InitializingBean {
|
||||
registerHandler(CallbackType.CONTRACT_STATE_CHANGED, request -> {
|
||||
ContractStateChanged changes = request.readMsgData(ContractStateChanged.class);
|
||||
EssContractState state = EssContractState.fromEssCode(changes.getFlowStatus());
|
||||
if (state != null)
|
||||
contractManager.updateContractState(changes.getFlowId(), state);
|
||||
else
|
||||
if (state == null) {
|
||||
log.warn("unknown contract state: {}", changes.getFlowStatus());
|
||||
return changes.getFlowId();
|
||||
}
|
||||
List<ApproverDetail> details = changes.getFlowApproverInfo().stream()
|
||||
.map(info -> {
|
||||
PersonOpenId personOpenId = PersonOpenId.parse(info.getProxyOperatorOpenId());
|
||||
ApproverDetail detail = new ApproverDetail();
|
||||
detail.setOuId(personOpenId.getOuId());
|
||||
detail.setPersonId(personOpenId.getPersonId());
|
||||
detail.setState(EssContractApproveState.fromEssCode(info.getApproveStatus()));
|
||||
detail.setSignOrder(info.getSignOrder());
|
||||
detail.setApproveTime(info.getApproveTime() * 1000);
|
||||
detail.setMessage(info.getApproveMessage());
|
||||
detail.setApproverDeadline(info.getApproverDeadline() * 1000);
|
||||
return detail;
|
||||
})
|
||||
.collect(toList());
|
||||
contractManager.updateContractState(changes.getFlowId(), state, details);
|
||||
return changes.getFlowId();
|
||||
});
|
||||
registerHandler(CallbackType.SUPER_ADMIN_CHANGED, request -> {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user