Files
esign/src/main/java/com/seeyon/apps/esign/service/SignLinkService.java
2026-02-11 11:21:50 +08:00

151 lines
6.7 KiB
Java

package com.seeyon.apps.esign.service;
import com.seeyon.aicloud.common.JsonUtils;
import com.seeyon.apps.esign.config.EsignConfigProvider;
import com.seeyon.apps.esign.constants.EsignApiUrl;
import com.seeyon.apps.esign.constants.EsignConfigConstants;
import com.seeyon.apps.esign.po.esignapi.EsignApiHeader;
import com.seeyon.apps.esign.po.esignapi.EsignBaseResp;
import com.seeyon.apps.ext.workflow.vo.FormDataVo;
import com.seeyon.cap4.form.bean.FormDataMasterBean;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.util.JDBCAgent;
import com.seeyon.utils.http.HttpClient;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import www.seeyon.com.utils.UUIDUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SignLinkService {
private static final Log log = LogFactory.getLog(SignLinkService.class);
private EsignConfigProvider esignConfigProvider = (EsignConfigProvider) AppContext.getBean("esignConfigProvider");
private TokenCacheManager tokenCacheManager = (TokenCacheManager) AppContext.getBean("tokenCacheManager");
public void saveGetLinkParam(FormDataVo formDataVo, FormDataMasterBean formDataMasterBean,String eFlowId) {
try {
String bSignerType = formDataVo.getFieldData("乙方签署类型").getStringValue();
String psnAccount = null;
if(!"组织".equals(bSignerType) ) {
psnAccount = formDataVo.getFieldData("乙方电话").getStringValue();
}else {
psnAccount = formDataVo.getFieldData("乙方经办人手机号").getStringValue();
}
String contractNo = formDataVo.getFieldData("合同编号").getStringValue();
Map<String,Object> param = new HashMap<>();
Map<String,Object> operator = new HashMap<>();
operator.put("psnAccount",psnAccount);
param.put("signFlowId",eFlowId);
param.put("operator",operator);
String paramStr = JsonUtils.toJSONString(param);
saveDb(paramStr,eFlowId,contractNo);
}catch (Exception e) {
log.error(e.getMessage(),e);
}
}
public void del(String eFlowId) {
String sqlDel = "delete FROM SIGN_LINK_PARAM where eFlowId = ?";
JDBCAgent jdbcAgent = new JDBCAgent();
try {
List<Object> param = new ArrayList<>();
param.add(eFlowId);
jdbcAgent.execute(sqlDel,param);
}catch (Exception e) {
log.error(e.getMessage(),e);
}finally {
jdbcAgent.close();
}
}
private void saveDb(String jsonStr,String eFlowId,String contractNo) {
String sqlInsert = "insert into SIGN_LINK_PARAM (id,param,eFlowId,contractNo) values (?,?,?,?)";
String sqlQuery = "select * FROM SIGN_LINK_PARAM where contractNo = ?";
String sqlUpdate = "update SIGN_LINK_PARAM set param = ?,eFlowId = ? where id = ?";
JDBCAgent jdbcAgent = new JDBCAgent();
try {
List<Object> param = new ArrayList<>();
param.add(contractNo);
jdbcAgent.execute(sqlQuery,param);
List list = jdbcAgent.resultSetToList();
long id = UUIDUtil.getUUIDLong();
if(list.size() == 0) {
param.clear();
param.add(id);
param.add(jsonStr);
param.add(eFlowId);
param.add(contractNo);
jdbcAgent.execute(sqlInsert,param);
}else {
param.clear();
Map<String,Object> tempMap = (Map<String, Object>) list.get(0);
param.add(jsonStr);
param.add(eFlowId);
param.add(tempMap.get("id"));
jdbcAgent.execute(sqlUpdate,param);
}
}catch (Exception e) {
log.error(e.getMessage(),e);
}finally {
jdbcAgent.close();
}
}
public String getSignLink(String eFlowId) {
String sqlQuery = "select * from SIGN_LINK_PARAM where eFlowId = ?";
JDBCAgent jdbcAgent = new JDBCAgent();
try {
List<Object> param = new ArrayList<>();
param.add(eFlowId);
jdbcAgent.execute(sqlQuery,param);
List list = jdbcAgent.resultSetToList();
if(list.size() > 0) {
Map<String,Object> tempMap = (Map<String, Object>) list.get(0);
String paramStr = (String)tempMap.get("param");
if(!checkContractVaild(eFlowId)) {
throw new RuntimeException("当前合同无效");
}
String url = esignConfigProvider.getBizConfigByKey(EsignConfigConstants.ESIGN_HOST) + EsignApiUrl.SIGN_LINK_GET_URL.replace("{signFlowId}",eFlowId);
EsignApiHeader esignApiHeader = EsignApiHeader.build();
esignApiHeader.token(tokenCacheManager.getToken()).appId(esignConfigProvider.getBizConfigByKey(EsignConfigConstants.APP_ID));
String respStr = HttpClient.httpPostRaw(url, paramStr,esignApiHeader.convert2Headers(), "UTF-8");
EsignBaseResp esignBaseResp = JsonUtils.parseObject(respStr, EsignBaseResp.class);
Map<String,Object> dataMap = (Map<String, Object>) esignBaseResp.getData();
if(!"0".equals(esignBaseResp.getCode() + "")) {
log.error("合同链接获取失败," + esignBaseResp.getMessage());
}else {
return (String) dataMap.get("url");
}
}
}catch (Exception e) {
log.error("合同链接获取失败:"+e.getMessage(),e);
}finally {
jdbcAgent.close();
}
return null;
}
private boolean checkContractVaild(String eFlowId) {
EsignApiHeader esignApiHeader = EsignApiHeader.build();
esignApiHeader.token(tokenCacheManager.getToken()).appId(esignConfigProvider.getBizConfigByKey(EsignConfigConstants.APP_ID));
String url = esignConfigProvider.getBizConfigByKey(EsignConfigConstants.ESIGN_HOST) + EsignApiUrl.SIGN_FLOW_QUERY.replace("{signFlowId}",eFlowId);
String respStr = HttpClient.httpGet(url, esignApiHeader.convert2Headers(), "UTF-8");
EsignBaseResp esignBaseResp = JsonUtils.parseObject(respStr, EsignBaseResp.class);
Map<String,Object> dataMap = (Map<String, Object>) esignBaseResp.getData();
if(!"0".equals(esignBaseResp.getCode() + "")) {
log.error("合同信息查询失败," + esignBaseResp.getMessage());
return false;
}
Integer flowStatus = (Integer) dataMap.get("signFlowStatus");
return flowStatus == 1;
}
}