package weaver;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.FileOutputStream;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import com.alibaba.fastjson.JSONObject;
|
import com.google.gson.Gson;
|
import foundation.action.ActionProvider;
|
import foundation.capacity.ActorTarget;
|
import foundation.dao.preload.Bucket;
|
import foundation.data.entity.Entity;
|
import foundation.data.object.DataObject;
|
import foundation.data.object.EntitySaver;
|
import foundation.handler.envelop.ILetterWriter;
|
import foundation.icall.callout.HttpServerMeta;
|
import foundation.icall.callout.RemoteSourceBucket;
|
import foundation.io.FileCenter;
|
import foundation.io.object.FileRecord;
|
import foundation.user.OnlineUser;
|
import foundation.util.MD5Utils;
|
import foundation.util.Util;
|
import foundation.variant.expression.VariantExpression;
|
import net.qiyuesuo.v3sdk.SdkClient;
|
import net.qiyuesuo.v3sdk.http.StreamFile;
|
import net.qiyuesuo.v3sdk.model.common.Action;
|
import net.qiyuesuo.v3sdk.model.common.DocumentFormDto;
|
import net.qiyuesuo.v3sdk.model.common.SignAuthConfigBean;
|
import net.qiyuesuo.v3sdk.model.common.Signatory;
|
import net.qiyuesuo.v3sdk.model.common.SignatoryRect;
|
import net.qiyuesuo.v3sdk.model.common.SignurlActions;
|
import net.qiyuesuo.v3sdk.model.contract.request.ContractCreatebycategoryRequest;
|
import net.qiyuesuo.v3sdk.model.contract.request.ContractDownloadRequest;
|
import net.qiyuesuo.v3sdk.model.contract.request.ContractInitiateCancelRequest;
|
import net.qiyuesuo.v3sdk.model.contract.request.ContractRecallRequest;
|
import net.qiyuesuo.v3sdk.model.contract.request.ContractSignurlV3Request;
|
import net.qiyuesuo.v3sdk.model.contract.request.ContractViewurlRequest;
|
import net.qiyuesuo.v3sdk.model.contract.response.ContractSignurlV3Response;
|
import net.qiyuesuo.v3sdk.model.contract.response.ContractViewurlResponse;
|
import net.qiyuesuo.v3sdk.model.v2document.request.V2DocumentCreatebyfileRequest;
|
import net.qiyuesuo.v3sdk.model.v2document.response.V2DocumentCreatebyfileResponse;
|
import net.qiyuesuo.v3sdk.utils.SdkResponse;
|
import weaver.dao.BusinessData;
|
import weaver.dao.CallbackType;
|
import weaver.dao.ISignLetter;
|
import weaver.dao.SignState;
|
import weaver.dao.Signer;
|
import weaver.util.QiyuesuoCallbackUtils;
|
|
public class WeaverHandler extends ActionProvider{
|
|
//泛微
|
private static SdkClient sdkClient = null;
|
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss");
|
private static HttpServerMeta callBackSourceMeta;
|
|
@Override
|
protected void publishMethod() {
|
//13. 泛微上传本地文件创建签署文档
|
addMethod("weaverCreatebyFile");
|
|
//14. 泛微创建或发起电子签约
|
addMethod("weaverCreatebyCategory");
|
|
//15.文件签署页面v3
|
addMethod("weaverSignUrl");
|
|
//16.文件浏览页面
|
addMethod("weaverViewUrl");
|
|
//17.文件download
|
addMethod("weaverDownLoad");
|
|
//18.撤回文件
|
addMethod("weaverRecall");
|
|
//19.发起作废
|
addMethod("weaverCancel");
|
|
//20.签章状态同步
|
addMethod("signStateSync");
|
}
|
|
//发起作废
|
public void weaverCancel() throws Exception {
|
HttpServerMeta eSignSourceMeta = (HttpServerMeta) RemoteSourceBucket.getInstance().get(ISignLetter.WAEVER_SIGN);
|
String accessKey = eSignSourceMeta.getString(ISignLetter.AppToken);
|
String accessSecret = eSignSourceMeta.getString(ISignLetter.AppSecret);
|
|
DataObject dataNameObject = null;
|
Entity dataNameEntity = null;
|
String contractId = "", result = "";
|
|
String id = dataReader.getString("id");
|
String reason = dataReader.getString(ISignLetter.Reason);
|
String dataName = dataReader.getString("dataName");
|
String signer = dataReader.getString(ISignLetter.Signer);
|
|
//1.记录文档信息
|
dataNameObject = DataObject.getInstance(dataName);
|
dataNameEntity = dataNameObject.getTableEntity(id);
|
EntitySaver saver = dataNameObject.createEntitySaver(id);
|
|
if (dataNameEntity == null || dataNameEntity.isEmpty()) {
|
dataWriter.setSuccess(false);
|
dataWriter.addValue("weaver", "获取不到文档信息");
|
return;
|
}
|
|
//电子签约文件ID
|
contractId = dataNameEntity.getString(ISignLetter.ContractId, "");
|
|
String serverUrl = "https://partneropen.qiyuesuo.cn/contract/initiate/cancel?_="+ System.currentTimeMillis();
|
sdkClient = new SdkClient(serverUrl, accessKey, accessSecret);
|
|
ContractInitiateCancelRequest request = new ContractInitiateCancelRequest();
|
|
request.setContractId(Long.parseLong(contractId));
|
request.setReason(reason);
|
try {
|
SdkResponse<?> response = sdkClient.service(request);
|
if (response.getCode() == 0) {
|
dataWriter.setSuccess(true);
|
|
if (!Util.isEmpty(signer)) {
|
saver.set(signer, "F");
|
}
|
else {
|
saver.set(ISignLetter.IsSignature, "F");
|
}
|
|
if("F".equalsIgnoreCase(dataNameEntity.getString(ISignLetter.PartyB, "F"))
|
|| "F".equalsIgnoreCase(dataNameEntity.getString(ISignLetter.IsSignature, "F"))) {
|
saver.set(ISignLetter.SignStateCode, SignState.DRAFT);
|
saver.set(ISignLetter.SignStateName, SignState.DRAFT.getName());
|
}
|
saver.update();
|
}
|
else {
|
dataWriter.setSuccess(false);
|
result = response.getMessage();
|
}
|
|
if (Util.isEmpty(result)) {
|
dataWriter.addValue("weaver", response.getResult());
|
}
|
else {
|
dataWriter.addValue("weaver", result);
|
}
|
} catch(Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
//撤回文件
|
public void weaverRecall() throws Exception {
|
DataObject dataNameObject = null;
|
Entity dataNameEntity = null;
|
String contractId = "", result = "";
|
|
String id = dataReader.getString("id");
|
String dataName = dataReader.getString("dataName");
|
String reason = dataReader.getString(ISignLetter.Reason);
|
String signer = dataReader.getString(ISignLetter.Signer);
|
|
HttpServerMeta eSignSourceMeta = (HttpServerMeta) RemoteSourceBucket.getInstance().get(ISignLetter.WAEVER_SIGN);
|
String accessKey = eSignSourceMeta.getString(ISignLetter.AppToken);
|
String accessSecret = eSignSourceMeta.getString(ISignLetter.AppSecret);
|
//1.记录文档信息
|
dataNameObject = DataObject.getInstance(dataName);
|
dataNameEntity = dataNameObject.getTableEntity(id);
|
EntitySaver saver = dataNameObject.createEntitySaver(id);
|
|
if (dataNameEntity == null || dataNameEntity.isEmpty()) {
|
dataWriter.setSuccess(false);
|
dataWriter.addValue("weaver", "获取不到文档信息");
|
return;
|
}
|
|
//电子签约文件ID
|
contractId = dataNameEntity.getString(ISignLetter.ContractId);
|
|
String serverUrl = "https://partneropen.qiyuesuo.cn/contract/recall?_="+ System.currentTimeMillis();
|
sdkClient = new SdkClient(serverUrl, accessKey, accessSecret);
|
|
ContractRecallRequest request = new ContractRecallRequest();
|
|
request.setContractId(Long.parseLong(contractId));
|
request.setReason(reason);
|
try {
|
SdkResponse<?> response = sdkClient.service(request);
|
if (response.getCode() == 0) {
|
dataWriter.setSuccess(true);
|
|
if (!Util.isEmpty(signer)) {
|
saver.set(signer, "F");
|
}
|
else {
|
saver.set(ISignLetter.IsSignature, "F");
|
}
|
|
if("F".equalsIgnoreCase(dataNameEntity.getString(ISignLetter.PartyB, "F"))
|
|| "F".equalsIgnoreCase(dataNameEntity.getString(ISignLetter.IsSignature, "F"))) {
|
saver.set(ISignLetter.SignStateCode, SignState.TERMINATED);
|
saver.set(ISignLetter.SignStateName, SignState.TERMINATED.getName());
|
}
|
|
saver.update();
|
}
|
else {
|
dataWriter.setSuccess(false);
|
result = response.getMessage();
|
}
|
|
if (Util.isEmpty(result)) {
|
dataWriter.addValue("weaver", response.getResult());
|
}
|
else {
|
dataWriter.addValue("weaver", result);
|
}
|
|
} catch(Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
//文件下载
|
public void weaverDownLoad() throws Exception {
|
HttpServerMeta eSignSourceMeta = (HttpServerMeta) RemoteSourceBucket.getInstance().get(ISignLetter.WAEVER_SIGN);
|
String accessKey = eSignSourceMeta.getString(ISignLetter.AppToken);
|
String accessSecret = eSignSourceMeta.getString(ISignLetter.AppSecret);
|
|
//电子签约文件ID
|
String contractId = dataReader.getString("contractId");
|
String needCompressForOneFile = dataReader.getString("needCompressForOneFile");
|
String fileName = contractId + "_" + sdf.format(new Date()) + ".zip";
|
|
String serverUrl = "https://partneropen.qiyuesuo.cn/contract/download?_="+ System.currentTimeMillis();
|
sdkClient = new SdkClient(serverUrl, accessKey, accessSecret);
|
|
ContractDownloadRequest request = new ContractDownloadRequest();
|
|
request.setContractId(Long.parseLong(contractId));
|
request.setNeedCompressForOneFile(needCompressForOneFile);
|
try {
|
File file = new File("D:\\repository\\weaver\\" + fileName);
|
if (!file.exists()) {
|
file.createNewFile();
|
}
|
OutputStream outputStream = new FileOutputStream(file);
|
sdkClient.download(request, outputStream);
|
outputStream.close();
|
} catch(Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
//文件浏览页面
|
public void weaverViewUrl() throws Exception {
|
DataObject dataNameObject = null;
|
Entity dataNameEntity = null;
|
String contractId = "", documentId = "";
|
|
String id = dataReader.getString("id");
|
String dataName = dataReader.getString("dataName");
|
|
//1.记录文档信息
|
dataNameObject = DataObject.getInstance(dataName);
|
dataNameEntity = dataNameObject.getTableEntity(id);
|
|
if (dataNameEntity == null || dataNameEntity.isEmpty()) {
|
dataWriter.setSuccess(false);
|
dataWriter.addValue("weaver", "获取不到文档信息");
|
return;
|
}
|
|
HttpServerMeta eSignSourceMeta = (HttpServerMeta) RemoteSourceBucket.getInstance().get(ISignLetter.WAEVER_SIGN);
|
String accessKey = eSignSourceMeta.getString(ISignLetter.AppToken);
|
String accessSecret = eSignSourceMeta.getString(ISignLetter.AppSecret);
|
|
//电子签约文件ID
|
contractId = dataNameEntity.getString(ISignLetter.ContractId, "");
|
documentId = dataNameEntity.getString(ISignLetter.DocumentId, "");
|
|
String serverUrl = "https://partneropen.qiyuesuo.cn/contract/viewurl?_="+ System.currentTimeMillis();
|
sdkClient = new SdkClient(serverUrl, accessKey, accessSecret);
|
|
ContractViewurlRequest request = new ContractViewurlRequest();
|
|
request.setContractId(Long.parseLong(contractId));
|
request.setAllowDownload("true");
|
|
try {
|
SdkResponse<ContractViewurlResponse> response = sdkClient.service(request, ContractViewurlResponse.class);
|
if (response.getCode() == 0) {
|
dataWriter.setSuccess(true);
|
}
|
else {
|
dataWriter.setSuccess(false);
|
}
|
Gson gson = new Gson();
|
String resultStr = gson.toJson(response.getResult());
|
resultStr = resultStr.replace("\\u003d", "=");
|
resultStr = resultStr.replace("\\u0026", "&");
|
|
dataWriter.addValue("weaver", resultStr);
|
} catch(Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
//文件签署页面v3
|
public void weaverSignUrl() throws Exception {
|
DataObject dataNameObject = null;
|
Entity dataNameEntity = null;
|
String documentId = "", contractId = "";
|
String result = "";
|
|
String id = dataReader.getString("id");
|
if (Util.isEmpty(id)) {
|
id = dataReader.getString("id");
|
}
|
|
String dataName = dataReader.getString("dataName");
|
if (Util.isEmpty(dataName)) {
|
dataName = dataReader.getString("dataName");
|
}
|
|
HttpServerMeta eSignSourceMeta = (HttpServerMeta) RemoteSourceBucket.getInstance().get(ISignLetter.WAEVER_SIGN);
|
String accessKey = eSignSourceMeta.getString(ISignLetter.AppToken);
|
String accessSecret = eSignSourceMeta.getString(ISignLetter.AppSecret);
|
|
String signerCode = dataReader.getString(ISignLetter.Signer);
|
SignBucket signBucket = SignBucket.getInstance();
|
SignConfig signConfig = signBucket.get(dataName);
|
|
//1.记录文档信息
|
dataNameObject = DataObject.getInstance(dataName);
|
dataNameEntity = dataNameObject.getTableEntity(id);
|
if (dataNameEntity == null || dataNameEntity.isEmpty()) {
|
dataWriter.setSuccess(false);
|
dataWriter.addValue("weaver", "获取不到文档信息");
|
return;
|
}
|
|
documentId = dataNameEntity.getString(ISignLetter.DocumentId, "");
|
contractId = dataNameEntity.getString(ISignLetter.ContractId, "");
|
String companyId = dataNameEntity.getString("company_id");
|
Signer signer = getSigner(companyId);
|
|
String serverUrl = "https://partneropen.qiyuesuo.cn/contract/signurl/v3?_"+ System.currentTimeMillis();
|
sdkClient = new SdkClient(serverUrl, accessKey, accessSecret);
|
ContractSignurlV3Request request = new ContractSignurlV3Request();
|
|
//电子签约文件ID
|
request.setContractId(Long.parseLong(contractId));
|
//签署方名称
|
request.setTenantName(signer.getTenantName());
|
request.setSignatoryNo(signer.getSignatoryNo());
|
//签署方类型
|
request.setTenantType("COMPANY");
|
//接收人名称
|
request.setReceiverName(signer.getReceiverName());
|
//签署方的联系方式
|
request.setContact(signer.getContactPhone());
|
|
try {
|
SdkResponse<ContractSignurlV3Response> response = sdkClient.service(request, ContractSignurlV3Response.class);
|
if (response.getCode() == 0) {
|
dataWriter.setSuccess(true);
|
}
|
else {
|
dataWriter.setSuccess(false);
|
result = response.getMessage();
|
}
|
Gson gson = new Gson();
|
String resultStr = gson.toJson(response.getResult());
|
resultStr = resultStr.replace("\\u003d", "=");
|
resultStr = resultStr.replace("\\u0026", "&");
|
|
if (Util.isEmpty(result)) {
|
dataWriter.addValue("weaver", resultStr);
|
}
|
else {
|
dataWriter.addValue("weaver", result);
|
}
|
|
} catch(Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
//泛微创建或发起电子签约
|
public void weaverCreatebyCategory() throws Exception {
|
HttpServerMeta eSignSourceMeta = (HttpServerMeta) RemoteSourceBucket.getInstance().get(ISignLetter.WAEVER_SIGN);
|
String accessKey = eSignSourceMeta.getString(ISignLetter.AppToken);
|
String accessSecret = eSignSourceMeta.getString(ISignLetter.AppSecret);
|
|
DataObject dataNameObject = null;
|
Entity dataNameEntity = null;
|
String subject = "", description = "", tenantName = "", documentId = "";
|
String customerCode = "", customerName = "", companyId = "";
|
ISignService signService = null;
|
ContractCreatebycategoryRequest request = new ContractCreatebycategoryRequest();
|
SignBucket signBucket = SignBucket.getInstance();
|
|
String id = dataReader.getString("id");
|
String dataName = dataReader.getString("dataName");
|
SignConfig signConfig = signBucket.get(dataName);
|
|
List<Action> actions = new ArrayList<Action>();
|
Action action = new Action();
|
action.setType("CORPORATE");
|
action.setName(signConfig.getName());
|
action.setSerialNo(1L);
|
actions.add(action);
|
|
SignAuthConfigBean signAuthConfig = new SignAuthConfigBean();
|
signAuthConfig.setSignAuth("DEFAULT");
|
signAuthConfig.setQuestion("您好,为确保您本人操作");
|
signAuthConfig.setAnswer("我确认");
|
|
List<Signatory> signatories = new ArrayList<Signatory>();
|
Signatory signatory = new Signatory();
|
//1.记录文档信息
|
dataNameObject = DataObject.getInstance(dataName);
|
dataNameEntity = dataNameObject.getTableEntity(id);
|
EntitySaver saver = dataNameObject.createEntitySaver(id);
|
|
if (dataNameEntity == null || dataNameEntity.isEmpty()) {
|
dataWriter.setSuccess(false);
|
dataWriter.addValue("weaver", "获取不到文档信息");
|
return;
|
}
|
|
|
if (SignType.Both == signConfig.getSignType()) {
|
signService = new BothSignService();
|
}
|
else if (SignType.PartyB == signConfig.getSignType()) {
|
signService = new PartyBSignService();
|
}
|
else if (SignType.PartyA == signConfig.getSignType()) {
|
signService = new PartyASignService();
|
}
|
List<Signer> signers = signService.getSigners(dataNameEntity);
|
|
for (int serialNo = 1; serialNo <= signers.size(); serialNo++) {
|
Signer signer = signers.get(serialNo - 1);
|
signatory = new Signatory();
|
signatory.setTenantType("COMPANY");
|
signatory.setTenantName(signer.getTenantName());
|
signatory.setSerialNo(String.valueOf(serialNo));
|
signatory.setActions(actions);
|
signatory.setSignAuthConfig(signAuthConfig);
|
signatory.setSignatoryNo(signer.getSignatoryNo());
|
signatories.add(signatory);
|
}
|
|
documentId = dataNameEntity.getString(ISignLetter.DocumentId, "");
|
description = dataNameEntity.getString(ISignLetter.CategoryName, "");
|
subject = signConfig.getSubjectContent(dataNameEntity);
|
companyId = dataNameEntity.getString("company_id");
|
Signer initiator = getSigner(companyId);
|
tenantName = initiator.getTenantName();
|
|
String serverUrl = "https://partneropen.qiyuesuo.cn/contract/createbycategory?_"+ System.currentTimeMillis();
|
sdkClient = new SdkClient(serverUrl, accessKey, accessSecret);
|
|
BusinessData businessData = new BusinessData(dataName, dataNameEntity);
|
|
request.setSubject(subject);
|
request.setDescription(description);
|
request.setTenantName(tenantName);
|
List<Long> documents = new ArrayList<Long>();
|
documents.add(Long.parseLong(documentId));
|
request.setDocuments(documents);
|
request.setSignatories(signatories);
|
request.setBusinessData(businessData.toString());
|
request.setCategoryId(signConfig.getFlowId());
|
|
try {
|
SdkResponse<String> response = sdkClient.service(request, String.class);
|
Map<String, String> msgMap = new HashMap<String, String>();
|
if (response.getCode() == 0) {
|
dataWriter.setSuccess(true);
|
|
saver.set(ISignLetter.ContractId, response.getResult());
|
saver.set(ISignLetter.SignStateCode, SignState.SIGNING);
|
saver.set(ISignLetter.SignStateName, SignState.SIGNING.getName());
|
|
saver.update();
|
}
|
else {
|
dataWriter.setSuccess(false);
|
}
|
msgMap.put("code", String.valueOf(response.getCode()));
|
msgMap.put("message", response.getMessage());
|
msgMap.put("result", response.getResult());
|
dataWriter.addValue("weaver", msgMap);
|
} catch(Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
//泛微上传本地文件创建签署文档
|
public void weaverCreatebyFile() throws Exception {
|
HttpServerMeta eSignSourceMeta = (HttpServerMeta) RemoteSourceBucket.getInstance().get(ISignLetter.WAEVER_SIGN);
|
String accessKey = eSignSourceMeta.getString(ISignLetter.AppToken);
|
String accessSecret = eSignSourceMeta.getString(ISignLetter.AppSecret);
|
//1.解析上传文件
|
DataObject dataNameObject = null, dataObject = null;
|
Entity dataNameEntity = null, entity = null;
|
String fileId = "";
|
|
String id = dataReader.getString("id");
|
if (Util.isEmpty(id)) {
|
id = dataReader.getString("id");
|
}
|
String dataName = dataReader.getString("dataName");
|
if (Util.isEmpty(dataName)) {
|
dataName = dataReader.getString("dataName");
|
}
|
|
SignBucket signBucket = SignBucket.getInstance();
|
SignConfig signConfig = signBucket.get(dataName);
|
|
//1.记录文档信息
|
dataNameObject = DataObject.getInstance(dataName);
|
dataNameEntity = dataNameObject.getTableEntity(id);
|
|
if (dataNameEntity == null || dataNameEntity.isEmpty()) {
|
dataWriter.setSuccess(false);
|
dataWriter.addValue("weaver", "获取不到文档信息");
|
return;
|
}
|
|
fileId = dataNameEntity.getString(signConfig.getFileField(), "");
|
|
if (Util.isEmpty(fileId)) {
|
dataWriter.setSuccess(false);
|
dataWriter.addValue("weaver", "获取不到文档");
|
return;
|
}
|
|
//2. 获取文档文件
|
dataObject = DataObject.getInstance(dataName);
|
entity = dataObject.getBrowseEntity(fileId);
|
|
FileRecord fileRecord = FileCenter.getFile(dataName, fileId);
|
File file = fileRecord.getFile();
|
|
String serverUrl = "https://partneropen.qiyuesuo.cn/v2/document/createbyfile?_="+ System.currentTimeMillis();
|
sdkClient = new SdkClient(serverUrl, accessKey, accessSecret);
|
|
DocumentFormDto form = new DocumentFormDto();
|
V2DocumentCreatebyfileRequest request = new V2DocumentCreatebyfileRequest();
|
|
InputStream inputStream = new FileInputStream(file);
|
StreamFile streamFile = new StreamFile(file.getName(), inputStream);
|
request.setFile(streamFile);
|
request.setTitle(file.getName());
|
request.setFileType(file.getName().substring(file.getName().lastIndexOf(".") + 1, file.getName().length()).trim());
|
request.setFormObject(form);
|
|
try {
|
SdkResponse<V2DocumentCreatebyfileResponse> response = sdkClient.service(request, V2DocumentCreatebyfileResponse.class);
|
if (response.getCode() == 0) {
|
dataWriter.setSuccess(true);
|
//保存documentId
|
EntitySaver saver = dataObject.createEntitySaver(id);
|
|
saver.set(ISignLetter.DocumentId, response.getResult().getDocumentId());
|
saver.set(ISignLetter.SignStateCode, SignState.DRAFT);
|
saver.set(ISignLetter.SignStateName, SignState.DRAFT.getName());
|
saver.update();
|
}
|
else {
|
dataWriter.setSuccess(false);
|
}
|
Gson gson = new Gson();
|
String resultStr = gson.toJson(response.getResult());
|
dataWriter.addValue("weaver", resultStr);
|
} catch(Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
//签章状态同步
|
public void signStateSync() throws Exception{
|
String encryptedResult = dataReader.getRawString("encrypted");
|
|
// token check
|
RemoteSourceBucket remoteSourceBucket = RemoteSourceBucket.getInstance();
|
callBackSourceMeta = (HttpServerMeta) remoteSourceBucket.get(ISignLetter.WAEVER_SIGN_CALL);
|
String aesKey = callBackSourceMeta.getString(ISignLetter.AesKey);
|
|
String token = dataReader.getString("token");
|
if (!tokenValid(token)) {
|
dataWriter.setSuccess(false);
|
dataWriter.addValue("用户身份认证失败");
|
return ;
|
}
|
|
QiyuesuoCallbackUtils callUtils = new QiyuesuoCallbackUtils(aesKey, token);
|
String decryptedResult = callUtils.decrypt(encryptedResult);
|
|
String nonce = dataReader.getString("nonce");
|
String signature = dataReader.getString("signature");
|
Long timestamp = Long.valueOf(dataReader.getString("timestamp"));
|
String compSignature = MD5Utils.MD5Encode(decryptedResult + timestamp + nonce + token, "UTF-8");
|
|
if (!compSignature.equals(signature)) {
|
dataWriter.setSuccess(false);
|
dataWriter.addValue("signStateSync", "签名校验失败");
|
return ;
|
}
|
|
JSONObject resultJson = JSONObject.parseObject(decryptedResult);
|
CallbackType callBackType = CallbackType.parse(resultJson.getString("callbackType"));
|
BusinessData businessData = new BusinessData(resultJson.getJSONObject("businessData"));
|
|
|
if(Util.isEmpty(businessData.getDataname()) ) {
|
dataWriter.setSuccess(false);
|
dataWriter.addValue("业务数据缺失");
|
return ;
|
}
|
|
DataObject dataObject = DataObject.getInstance(businessData.getDataname());
|
EntitySaver saver = dataObject.createEntitySaver(businessData.getId());
|
|
SignState signState = callBackType.getSignState();
|
saver.set(ISignLetter.SignStateCode, signState);
|
saver.set(ISignLetter.SignStateName, signState.getName());
|
|
saver.update();
|
|
dataWriter.setSuccess(true);
|
dataWriter.addValue("合同已"+ signState.getName());
|
}
|
|
private Signer getSigner(String companyId) throws Exception {
|
Signer signer = new Signer();
|
OnlineUser user = OnlineUser.getInstance();
|
ActorTarget actor = user.getCurrentActor();
|
String actorId = user.getActorId();
|
String accountId = actor.getTargetId();
|
|
if(!Util.isEmpty(user.getCompanyId())) {
|
companyId = user.getCompanyId();
|
}
|
|
if (actorId.contains("Customer")) {
|
DataObject dataObject = DataObject.getInstance("md_org_account");
|
Entity account = dataObject.getBrowseEntity(accountId);
|
|
signer.setSignatoryNo(account.getString("code"));
|
signer.setTenantName(account.getString("account_name"));
|
signer.setReceiverName(account.getString("business_person"));
|
signer.setContactPhone(account.getString("business_phone"));
|
}
|
else {
|
DataObject dataObject = DataObject.getInstance("md_org");
|
Entity org = dataObject.getBrowseEntity(companyId);
|
|
signer.setSignatoryNo(org.getString("id"));
|
signer.setTenantName(ISignLetter.DefaultInitiator);
|
signer.setReceiverName(org.getString("business_person"));
|
signer.setContactPhone(org.getString("business_phone"));
|
}
|
|
return signer;
|
}
|
|
private boolean tokenValid(String token) {
|
String weaverToken = callBackSourceMeta.getString(ISignLetter.AccessToken);
|
|
if(!weaverToken.equals(token)) {
|
return false;
|
}
|
|
return true;
|
}
|
|
}
|