中车新增租金计划模板

This commit is contained in:
zhanglei 2021-04-22 18:53:51 +08:00
parent 7602b543ac
commit 91df982237
14 changed files with 963 additions and 258 deletions

View File

@ -377,6 +377,9 @@
falg = RunJavaMethodTrans("com.tenwa.channelportal.action.ContractSignActionTwoOwn","compnySignIng","FlowUnid=<%=flowunid%>,flagType=word,ProjectId=<%=projectId%>,SubjectId=<%=SubjectId%>,tempid="+tempids);
}else if("ZC"==operationType){
falg="success";
}else if("KJLHZL"==operationType){//凯捷联合租赁
// alert("凯捷联合租赁合同模板id=" + tempids);
falg = RunJavaMethodTrans("com.tenwa.channelportal.action.ContractSignActionNewUtils","compnySignIng","FlowUnid=<%=flowunid%>,flagType=word,ProjectId=<%=projectId%>,SubjectId=<%=SubjectId%>,operationType="+operationType);
} else{
falg = RunJavaMethodTrans("com.tenwa.channelportal.action.ContractSignAction","compnySignIng","FlowUnid=<%=flowunid%>,flagType=word,ProjectId=<%=projectId%>,SubjectId=<%=SubjectId%>");
}

View File

@ -79,7 +79,12 @@
//模板号
// param["templateNo"]="ceaa18f72b0e4bbaa6e66dcfd7e32c87";
param["templateNo"]="2ef0d0fa5dfb4fe2bf3ff6d4487dc22a";
//todo 判断当前合同是否为中车 中车模板69cec0b49c2111eb82b800163e0e11e6
var sResult = RunJavaMethodTrans("com.tenwa.lease.flow.contract.check.ContractInfoCheck","checkChannelZC","contractid=" + contract_ids[i]);
if("SUCCESS"==sResult){//中车返回为SUCCESS
param["templateNo"]="69cec0b49c2111eb82b800163e0e11e6";
}
//生成文件关联关系
tempParam["OBJECTTYPE"]="租金通知书";
tempParam["contract_id"]=contract_ids[i];
@ -152,13 +157,24 @@
var PLAN_LISTS=getItemValueArray(0,"PLAN_LIST");
var contract_ids=getItemValueArray(0,"contract_id");
var subjectIds=getItemValueArray(0,"subjectid");
for(var i=0;i<PAYMENT_NUMBERS.length;i++){
var plan_number=PAYMENT_NUMBERS[i];//投放编号
var plan_list=PLAN_LISTS[i];//期次
var contractID = contract_ids[i];
var subjectId = subjectIds[i];
var result=RunJavaMethodTrans("com.tenwa.channelportal.action.ContractSignAction","claimSignA","PAYMENT_NUMBER="+plan_number+",PLAN_LIST="+plan_list+",contract_id="+contractID+",flagType=start,SubjectId="+subjectId);
var result= "";
//todo 判断当前合同是否为中车 中车模板69cec0b49c2111eb82b800163e0e11e6
var sResult = RunJavaMethodTrans("com.tenwa.lease.flow.contract.check.ContractInfoCheck","checkChannelZC","contractid=" + contract_ids[i]);
if("SUCCESS"==sResult){//中车返回为SUCCESS
var tempId = "69cec0b49c2111eb82b800163e0e11e6";
result=RunJavaMethodTrans("com.tenwa.channelportal.action.ContractPlanListSignAction","claimSignPlanListTwo",
"planNumber="+plan_number+",planList="+plan_list+",contractId="+contractID+",flagType=start,subjectId="+subjectId
+",tempId="+tempId);
}else {
result=RunJavaMethodTrans("com.tenwa.channelportal.action.ContractSignAction","claimSignA",
"PAYMENT_NUMBER="+plan_number+",PLAN_LIST="+plan_list+",contract_id="+contractID+",flagType=start,SubjectId="+subjectId);
}
if("success"==result){
number++;
}

View File

@ -32,6 +32,9 @@ TJ_CompanyName=\u5b89\u9e4f\u5929\u6d25\u6709\u9650\u516c\u53f8
HH_CompanyName=\u5b89\u9e4f\u79df\u8d41\u6d4b\u8bd5\u5b50\u516c\u53f8
#合同专用章
HH_OfficialSealId=2730629214314173089
#KJ_CompanyName=\u5317\u4eac\u5b89\u9e4f\u79df\u8d41\u6d4b\u8bd5\u6709\u9650\u516c\u53f8
KJ_CompanyName=\u5317\u4eac\u5b89\u9e4f\u79df\u8d41\u6d4b\u8bd5\u6709\u9650\u516c\u53f8
#KJ_OfficialSealId=2786070848694391520
KJ_OfficialSealId=2786070848694391520

View File

@ -173,6 +173,8 @@ public class FileTemplateUtil {
return "[{'fileTemplate':\""+"[{'text':'联合租赁','value':'7ae245ef8b644b62a4658069adab6c32'}]"+"\"}]";
}else if("SQSYC".equals(operationType)){
return "[{'fileTemplate':\""+"[{'text':'狮桥商用车合同模板','value':'93e4194efb604c71b394d902b2060da8'}]"+"\"}]";
}else if("KJLHZL".equals(operationType)){
return "[{'fileTemplate':\""+"[{'text':'¿­½ÝÁªºÏÈÚ×Ê×âÁÞºÏͬģ°å','value':'5e1b90d31c4749e2af83891b48ccbe19'}]"+"\"}]";
}else if("ZC".equals(operationType)){
return "[{'fileTemplate':\""+"[{'text':'中车合同模板','value':'a37a3bc1919c4ba39d8ba6348fb1962e'}]"+"\"}]";
}else{

View File

@ -1,8 +1,5 @@
package com.tenwa.app.manage.qiyuesuo.v2;
import java.util.ArrayList;
import java.util.List;
/**
* 契约锁合同签约需要的枚举
*/

View File

@ -1,5 +1,6 @@
package com.tenwa.app.manage.qiyuesuo.v2;
import com.alibaba.fastjson.JSONObject;
import com.amarsoft.are.jbo.JBOException;
import com.amarsoft.awe.util.ASResultSet;
import com.amarsoft.awe.util.SqlObject;
@ -9,20 +10,15 @@ import com.tenwa.app.manage.qiyuesuo.v2.ContractSignEnums.ContractSignTypeEnum;
import com.tenwa.app.manage.qiyuesuo.v2.ContractSignEnums.SignatoryTypeEnum;
import com.qiyuesuo.sdk.v2.SdkClient;
import com.qiyuesuo.sdk.v2.bean.*;
import com.qiyuesuo.sdk.v2.bean.Signatory;
import com.qiyuesuo.sdk.v2.http.StreamFile;
import com.qiyuesuo.sdk.v2.json.JSONUtils;
import com.qiyuesuo.sdk.v2.param.SignParam;
import com.qiyuesuo.sdk.v2.request.*;
import com.qiyuesuo.sdk.v2.response.ContractPageResult;
import com.qiyuesuo.sdk.v2.response.DocumentAddResult;
import com.qiyuesuo.sdk.v2.response.SdkResponse;
import com.qiyuesuo.sdk.v2.utils.IOUtils;
import com.tenwa.comm.util.date.DateAssistant;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import com.tenwa.util.MultiSubjectUtil;
import jbo.app.tenwa.doc.LB_DOC_CONTRACT_LIST;
import jbo.com.tenwa.lease.carbrand.LB_CONTRACT_SIGN_LOG;
import oracle.sql.TIMESTAMP;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
@ -31,7 +27,9 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
public class ContractSignVtwoUtils {
@ -54,14 +52,20 @@ public class ContractSignVtwoUtils {
private static final String tJ_CompanyName = resourceBunlde.getString("TJ_CompanyName");
//子公司参数辉煌
public static final String HH_CHILD_SUBJECT_TYPE = "0";
private static final String hH_CompanyName = resourceBunlde.getString("HH_CompanyName");
private static final String hH_OfficialSealId = resourceBunlde.getString("HH_OfficialSealId");
//子公司参数凯捷
public static final String KJ_CHILD_SUBJECT_TYPE = "1";
private static final String kJ_CompanyName = resourceBunlde.getString("KJ_CompanyName");
private static final String kJ_OfficialSealId = resourceBunlde.getString("KJ_OfficialSealId");
private SdkClient getSdkClient(String subjectId){
if(MultiSubjectUtil.SZSUBJECTID.equals(subjectId)){
if (SubjectConstant.SZ_SUBJECT_ID.equals(subjectId)) {
return new SdkClient(sZ_Url, sZ_Key, sZ_Secret);
}else if (MultiSubjectUtil.TJSUBJECTID.equals(subjectId)){
} else if (SubjectConstant.TJ_SUBJECT_ID.equals(subjectId)) {
return new SdkClient(sZ_Url, sZ_Key, sZ_Secret);//应客户要求现在都是以深圳主体发起
}
return null;
@ -69,80 +73,118 @@ public class ContractSignVtwoUtils {
/**
* 简单公司盖章
* @param contractSignTypeEnum
* @param tempId 合同模板id
* @param list
* @param subjectId
* @param fileName
* @param filePath
* @param qysParams
* @return
* @throws Exception
*/
public String sign(ContractSignTypeEnum contractSignTypeEnum, String tempId,
String subjectId, String fileName, String filePath, List<SignatoryVo> list) throws Exception {
public JSONObject sign(QYSParams qysParams) throws Exception {
JSONObject resJson = null;
try{
logger.info("ContractSignVtwoUtils#sign 开始调用契约锁合同签章流程 20201224");
SdkClient client = this.getSdkClient(subjectId);
Contract contract = new Contract();
contract.setSubject(fileName);
contract.setOrdinal(false);
contract.setSend(false);
//初始化生成公司签署方信息
List<SignatoryVo> signatoryVos = initCompanySignatoryVoList(subjectId, contractSignTypeEnum);
//判断是否包含用户信息
if(CollectionUtils.isEmpty(list)){
list = signatoryVos;
}else {
list.addAll(signatoryVos);
logger.info("ContractSignVtwoUtils#sign 开始调用契约锁合同签章流程 20210207");
logger.info("ContractSignVtwoUtils#sign 校验参数信息 20210207");
String checkRes = checkParams(qysParams);
if(null != checkRes){
logger.error("ContractSignVtwoUtils#sign 校验参数信息【失败】--errorMsg=" + checkRes);
throw new Exception(checkRes);
}
List<Signatory> signatories = signatoryInitList(list, subjectId, contractSignTypeEnum);
contract.setSignatories(signatories);
//创建合同
//获取契约锁客户端等待发起接口调用
SdkClient client = this.getSdkClient(qysParams.getSubjectId());
// 1创建合同
// 1.4调用契约锁创建合同接口
logger.info("ContractSignVtwoUtils#sign 创建合同 20201224");
SdkResponse<Contract> createContract = this.createContract(contract, client);
SdkResponse<Contract> createContract = this.createContract(qysParams, client);
logger.info("ContractSignVtwoUtils#sign 创建合同【结束】 20201224");
Long contractId = createContract.getResult().getId();
List<Signatory> signatoryList = createContract.getResult().getSignatories();
//赋值更新Volist为发起合同做准备
list = updateVoList(signatoryList, list);
updateVoList(signatoryList, qysParams);
//添加本地生成的合同文件
logger.info("ContractSignVtwoUtils#sign 添加本地生成的合同文件 20201224");
SdkResponse<DocumentAddResult> addDocumentByFile = this.addDocumentByFile(filePath, subjectId, contractId, client);
SdkResponse<DocumentAddResult> addDocumentByFile = this.addDocumentByFile(qysParams, contractId, client);
logger.info("ContractSignVtwoUtils#sign 添加本地生成的合同文件【结束】 20201224");
Long documentId = addDocumentByFile.getResult().getDocumentId();
//发起合同
logger.info("ContractSignVtwoUtils#sign 发起合同");
this.send(contractSignTypeEnum, tempId, subjectId, contractId, documentId, client, list);
this.send(qysParams, contractId, documentId, client);
logger.info("ContractSignVtwoUtils#sign 发起合同【结束】");
//调用公司盖章
logger.info("ContractSignVtwoUtils#sign 调用公司盖章");
this.companySealSign(subjectId, contractId, client);
this.companySealSign(qysParams.getSubjectId(), contractId, client);
logger.info("ContractSignVtwoUtils#sign 调用公司盖章【结束】");
logger.info("ContractSignVtwoUtils#sign 合同下载");
String downStatus = this.contractDownload(subjectId, documentId, filePath, client);
String downStatus = this.contractDownload(qysParams, documentId, client);
logger.info("ContractSignVtwoUtils#sign 合同下载【结束】");
logger.info("ContractSignVtwoUtils#sign 合同下载log===" + downStatus);
resJson = new JSONObject();
resJson.put("contractId", contractId);
resJson.put("documentId", documentId);
}catch (Exception e){
logger.error("ContractSignVtwoUtils#sign error={} ", e.getMessage(), e);
return "error";
throw new Exception(e);
}
return "success";
return resJson;
}
/**
* 校验参数信息
* @param qysParams
* @return
*/
private String checkParams(QYSParams qysParams){
if(StringUtils.isEmpty(qysParams.getFileName())){
return "qysParams.fileName 不能为空";
}else if (StringUtils.isEmpty(qysParams.getSubjectId())){
return "qysParams.subjectId 不能为空";
}else if (StringUtils.isEmpty(qysParams.getFilePath())){
return "qysParams.filePath 不能为空";
}else if (StringUtils.isEmpty(qysParams.getTempId())){
return "qysParams.tempId 不能为空";
}else if (null == qysParams.getContractSignTypeEnum()){
return "qysParams.contractSignTypeEnum 不能为空";
}else if (!SubjectConstant.SZ_SUBJECT_ID.equals(qysParams.getSubjectId()) && !SubjectConstant.TJ_SUBJECT_ID.equals(qysParams.getSubjectId())){
return "qysParams.subjectId 当前主体id不存在";
}else if(ContractSignTypeEnum.SIGNATURE_JOINT.getSubType().equals(qysParams.getContractSignTypeEnum().getSubType())){//联合租赁
if(StringUtils.isEmpty(qysParams.getFileName())) {
return "qysParams.childSubject 联合租赁时,子公司类型不能为空";
}else if (!HH_CHILD_SUBJECT_TYPE.equals(qysParams.getChildSubject()) && !KJ_CHILD_SUBJECT_TYPE.equals(qysParams.getChildSubject())) {
return "qysParams.childSubject 联合租赁时,当前子公司类型不存在";
}
}else if (ContractSignTypeEnum.ELECTRONIC_JOINT.getType().equals(qysParams.getContractSignTypeEnum().getType())){//电子签约 需要包含用户信息
return "qysParams.list 电子签约时,签署方信息应包含用户信息,不能为空";
}
return null;
}
/**
* 创建合同
* @param contract
* @param qysParams
* @return
* @throws Exception
*/
public SdkResponse<Contract> createContract(Contract contract, SdkClient client) throws Exception {
public SdkResponse<Contract> createContract(QYSParams qysParams, SdkClient client) throws Exception {
logger.info("ContractSignVtwoUtils#createContract 保险委托授权书 -- 创建合同 20201223");
logger.info("ContractSignVtwoUtils#createContract 【开始】遍历签署方信息");
//公司签署方
String response = null;
try {
Contract contract = new Contract();
//合同主题合同名称
contract.setSubject(qysParams.getFileName());
//是否顺序签署默认为true
contract.setOrdinal(false);
//是否发起合同发起合同后不能再进行添加文档指定签署位置等操作
contract.setSend(false);
// 1.1初始化生成公司签署方信息
List<SignatoryVo> signatoryVos = initCompanySignatoryVoList(qysParams);
// 1.2判断是否包含用户信息
if(CollectionUtils.isEmpty(qysParams.getList())){
qysParams.setList(signatoryVos);
}else {
qysParams.getList().addAll(signatoryVos);
}
// 1.3整理符合契约锁规范的签署方信息
List<Signatory> signatories = signatoryInitList(qysParams);
contract.setSignatories(signatories);
logger.info("ContractSignVtwoUtils#createContract 开始创建合同 contract={} ", JSONUtils.toJson(contract));
response = client.service(new ContractDraftRequest(contract));
logger.info("ContractSignVtwoUtils#createContract 创建合同结束 response={} ", response);
@ -158,21 +200,155 @@ public class ContractSignVtwoUtils {
return sdkResponse;
}
/**
* 初始化签署方的公司信息
* @param qysParams
* @return
*/
public List<SignatoryVo> initCompanySignatoryVoList(QYSParams qysParams){
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 开始初始化签署方信息subjectId={}", qysParams.getSubjectId());
List<SignatoryVo> signatories = new ArrayList<>();
//初始化当前公司签署方信息
SignatoryVo signatoryVo = createCompanySignatoryVo(qysParams.getSubjectId());
signatories.add(signatoryVo);
if(ContractSignTypeEnum.SIGNATURE_JOINT.getSubType().equals(qysParams.getContractSignTypeEnum().getSubType())){//联合租赁
SignatoryVo subCompany = new SignatoryVo();
subCompany.setSignatoryType(SignatoryTypeEnum.SUB_COMPANY.getType());
subCompany.setSignatorySubType(SignatoryTypeEnum.SUB_COMPANY.getSubType());
subCompany.setMobile("12599998888");
Action action = new Action();
action.setType(SignatoryTypeEnum.SUB_COMPANY.getType());
if(qysParams.getChildSubject().equals(HH_CHILD_SUBJECT_TYPE)){ //当前联合租赁为卡尔时
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 当前签署类型为联合签约【卡尔】");
subCompany.setName(hH_CompanyName);
action.setName(hH_CompanyName);
action.setSealId(new Long(hH_OfficialSealId));
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 加载联合签约信息【卡尔】");
}else if(qysParams.getChildSubject().equals(KJ_CHILD_SUBJECT_TYPE)){ //当前联合租赁为凯捷时
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 当前签署类型为联合签约【凯捷】");
subCompany.setName(kJ_CompanyName);
action.setName(kJ_CompanyName);
action.setSealId(new Long(kJ_OfficialSealId));
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 加载联合签约信息【凯捷】");
}
subCompany.addAction(action);
signatories.add(subCompany);
}
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 初始化签署方信息【结束】signatories={}", JSONUtils.toJson(signatories));
return signatories;
}
/**
* 初始化当前主体的签署方公司信息
* @param subjectId
* @return
*/
private SignatoryVo createCompanySignatoryVo(String subjectId){
SignatoryVo signatoryVo = new SignatoryVo();
signatoryVo.setSignatoryType(SignatoryTypeEnum.PARENT_COMPANY.getType());
signatoryVo.setSignatorySubType(SignatoryTypeEnum.PARENT_COMPANY.getSubType());
signatoryVo.setMobile("12599996666");
Action action = new Action();
action.setType(SignatoryTypeEnum.PARENT_COMPANY.getType());
if(SubjectConstant.SZ_SUBJECT_ID.equals(subjectId)){
signatoryVo.setName(sZ_CompanyName);
action.setName(sZ_CompanyName);
action.setSealId(new Long(sZ_OfficialSealId));
}else if (SubjectConstant.TJ_SUBJECT_ID.equals(subjectId)){
signatoryVo.setName(tJ_CompanyName);
action.setName(tJ_CompanyName);
action.setSealId(new Long(tJ_OfficialSealId));
}
signatoryVo.addAction(action);
return signatoryVo;
}
/**
* 合同签署方信息转换为契约锁可调用信息
* @param qysParams
* @return List
*/
private List<Signatory> signatoryInitList(QYSParams qysParams) throws Exception{
logger.info("ContractSignVtwoUtils#signatoryInitList 合同签署方信息转换subjectId={}", qysParams.getSubjectId());
//初始化公司信息
List<Signatory> list = new ArrayList<>();
boolean checkData = true;//参数是否符合要求
if(ContractSignTypeEnum.ELECTRONIC_JOINT.getType().equals(qysParams.getContractSignTypeEnum().getType())){//电子签约 需要包含用户信息
logger.info("ContractSignVtwoUtils#signatoryInitList 合同签署方信息 list={}", JSONUtils.toJson(list));
logger.info("ContractSignVtwoUtils#signatoryInitList 合同签署方信息【用户信息】signatories={}", JSONUtils.toJson(qysParams.getList()));
if(CollectionUtils.isEmpty(qysParams.getList())){
logger.error("ContractSignVtwoUtils#signatoryInitList 参数校验失败 电子签约 不包含签署方信息");
throw new Exception(" 参数校验失败 电子签约 不包含签署方信息 ");
}
for(SignatoryVo signatoryVo : qysParams.getList()) {
if (SignatoryTypeEnum.PERSON_CZ.getType().equals(signatoryVo.getSignatoryType())) {//电子签约 && 个人
if (SignatoryTypeEnum.PERSON_CZ.getSubType().equals(signatoryVo.getSignatorySubType())) {//电子签约 && 承租人信息
checkData = false;
}
//个人信息转化
Signatory signatory = signatoryPersonInit(signatoryVo);
list.add(signatory);
}
}
if(checkData){
logger.error("ContractSignVtwoUtils#signatoryInitList 参数校验失败 电子签约 不包含承租人信息");
throw new Exception("ContractSignVtwoUtils#signatoryInitList 参数校验失败 电子签约 不包含承租人信息 ");
}
}
for(SignatoryVo signatoryVo : qysParams.getList()) {
if (SignatoryTypeEnum.PARENT_COMPANY.getType().equals(signatoryVo.getSignatoryType())) {//公司信息
//公司信息转化
Signatory signatory = signatoryCompanyInit(signatoryVo, qysParams.getSubjectId());
list.add(signatory);
}
}
logger.info("ContractSignVtwoUtils#signatoryInitList 初始化签署方信息【结束】list={}", JSONUtils.toJson(list));
return list;
}
/**
* 初始化为契约锁个人签署方信息
* @param signatoryVo
* @return
* @throws Exception
*/
private Signatory signatoryPersonInit(SignatoryVo signatoryVo) throws Exception{
Signatory personSignatory = new Signatory();
personSignatory.setTenantType(signatoryVo.getSignatoryType());
personSignatory.setTenantName(signatoryVo.getName());
personSignatory.setReceiver(new User(signatoryVo.getSignatorySubType(), signatoryVo.getMobile(), "MOBILE"));
return personSignatory;
}
/**
* 初始化为契约锁公司签署方信息
* @param signatoryVo
* @return
* @throws Exception
*/
private Signatory signatoryCompanyInit(SignatoryVo signatoryVo, String subjectId) throws Exception{
Signatory companySignatory = new Signatory();
companySignatory.setTenantType(signatoryVo.getSignatoryType());
companySignatory.setTenantName(signatoryVo.getName());
if(!SubjectConstant.SZ_SUBJECT_ID.equals(subjectId)){//如果当前的订单不是深圳要增加接收方信息
companySignatory.setReceiver(new User(signatoryVo.getSignatorySubType(), signatoryVo.getMobile(), "MOBILE"));
}
companySignatory.setActions(signatoryVo.getActions());
return companySignatory;
}
/**
* 用文件添加合同文件
* @param filePath
* @param subjectId
* @param qysParams
* @param contractId
* @return
* @throws Exception
*/
public SdkResponse<DocumentAddResult> addDocumentByFile(String filePath, String subjectId, Long contractId, SdkClient client)throws Exception {
logger.info("ContractSignVtwoUtils#addDocumentByFile 本地文件转化为文件流 filePath={} ", filePath);
public SdkResponse<DocumentAddResult> addDocumentByFile(QYSParams qysParams, Long contractId, SdkClient client)throws Exception {
logger.info("ContractSignVtwoUtils#addDocumentByFile 本地文件转化为文件流 filePath={} ", qysParams.getFilePath());
// 进入本地文件
StreamFile file = new StreamFile(new FileInputStream(new File(filePath)));
logger.info("ContractSignVtwoUtils#addDocumentByFile 本地文件转化为文件流【结束】 filePath={} ", filePath);
StreamFile file = new StreamFile(new FileInputStream(new File(qysParams.getFilePath())));
logger.info("ContractSignVtwoUtils#addDocumentByFile 本地文件转化为文件流【结束】 filePath={} ", qysParams.getFilePath());
String response = null;
try {
logger.info("ContractSignVtwoUtils#addDocumentByFile 开始上传合同文件 contractId={} ", contractId);
@ -198,7 +374,7 @@ public class ContractSignVtwoUtils {
* @return
* @throws Exception
*/
public SdkResponse companySealSign(String subjectId,Long contractId, SdkClient client) throws Exception {
public SdkResponse companySealSign(String subjectId, Long contractId, SdkClient client) throws Exception {
String response = null;
try {
logger.info("ContractSignVtwoUtils#companySealSign 公司盖章 contractId={} ", contractId);
@ -221,8 +397,10 @@ public class ContractSignVtwoUtils {
param.setSealId(new Long(sZ_OfficialSealId));
}else if(tJ_CompanyName.equals(company)){
param.setSealId(new Long(tJ_OfficialSealId));
}else if(hH_CompanyName.equals(company)){
}else if(hH_CompanyName.equals(company)){//联合租赁时卡尔
param.setSealId(new Long(hH_OfficialSealId));
}else if(kJ_CompanyName.equals(company)){//联合租赁时凯捷 2021-02-07
param.setSealId(new Long(kJ_OfficialSealId));
}
logger.info("ContractSignVtwoUtils#companySealSign 开始公司遍历签署");
response = client.service(new ContractSignCompanyRequest(param));
@ -271,19 +449,19 @@ public class ContractSignVtwoUtils {
/**
* 合同下载
* @param subjectId
* @param qysParams
* @param documentId
* @param filePath
* @param client
* @return
* @throws Exception
*/
public String contractDownload(String subjectId, Long documentId, String filePath, SdkClient client) throws Exception {
public String contractDownload(QYSParams qysParams, Long documentId, SdkClient client) throws Exception {
logger.info("ContractSignVtwoUtils#contractDownload 合同下载 documentId={} ", documentId);
DocumentDownloadRequest request = new DocumentDownloadRequest(documentId);
FileOutputStream fos = null;
try {
logger.info("ContractSignVtwoUtils#contractDownload 创建文件输出流 filePath={} ", filePath);
fos = new FileOutputStream(filePath);
logger.info("ContractSignVtwoUtils#contractDownload 创建文件输出流 filePath={} ", qysParams.getFilePath());
fos = new FileOutputStream(qysParams.getFilePath());
logger.info("ContractSignVtwoUtils#contractDownload 开始合同下载");
client.download(request, fos);
logger.info("ContractSignVtwoUtils#contractDownload 合同下载【结束】");
@ -298,30 +476,67 @@ public class ContractSignVtwoUtils {
return "合同下载成功!";
}
/**
* 合同页面链接查询
* @param documentId
* @param client
* @return
* @throws Exception
*/
public String contractPageUrl(Long documentId, SdkClient client) throws Exception {
logger.info("ContractSignVtwoUtils#contractPageUrl 合同页面链接查询 documentId={} ", documentId);
String pageUrl = null;
ContractViewPageRequest request=new ContractViewPageRequest(documentId);
String response = client.service(request);
SdkResponse<ContractPageResult> responseObj = JSONUtils.toQysResponse(response, ContractPageResult.class);
if(responseObj.getCode() == 0) {
ContractPageResult result = responseObj.getResult();
logger.info("合同页面地址为:{}", result.getPageUrl());
logger.info("ContractSignVtwoUtils#contractPageUrl 合同页面地址为 PageUrl={} ", result.getPageUrl());
pageUrl = result.getPageUrl();
} else {
logger.info("ContractSignVtwoUtils#contractPageUrl 请求失败,错误码:{},错误信息:{}", responseObj.getCode(), responseObj.getMessage());
}
return pageUrl;
}
// public static void main(String[] args) {
// // 初始化sdkClient
// String serverUrl = "https://openapi.qiyuesuo.cn";
// String accessKey = "fjHd9oRRkQ";
// String accessSecret = "PZXX3xiQbjRfzPqGlXv8BwRbo9FVnl";
// SdkClient sdkClient = new SdkClient(serverUrl, accessKey, accessSecret);
// ContractViewPageRequest request=new ContractViewPageRequest(2806190588519518413L);
// String response = sdkClient.service(request);
// SdkResponse<ContractPageResult> responseObj = JSONUtils.toQysResponse(response, ContractPageResult.class);
// if(responseObj.getCode() == 0) {
// ContractPageResult result = responseObj.getResult();
// logger.info("合同页面地址为:{}", result.getPageUrl());
// } else {
// logger.info("请求失败,错误码:{},错误信息:{}", responseObj.getCode(), responseObj.getMessage());
// }
// }
/**
* 发起合同
* @param contractSignTypeEnum
* @param tempId 合同模板id
* @param subjectId
* @param qysParams
* @param contractId
* @param documentId
* @return
* @throws Exception
*/
public SdkResponse send(ContractSignTypeEnum contractSignTypeEnum, String tempId, String subjectId, Long contractId,
Long documentId, SdkClient client, List<SignatoryVo> list) throws Exception {
public SdkResponse send(QYSParams qysParams, Long contractId, Long documentId, SdkClient client) throws Exception {
logger.info("ContractSignVtwoUtils#send 发起合同 contractId={} ", contractId);
Contract draft = this.getContract(subjectId, contractId, client).getResult();
Contract draft = this.getContract(qysParams.getSubjectId(), contractId, client).getResult();
logger.info("ContractSignVtwoUtils#send 获取契约锁合同信息 contract={} ", JSONUtils.toJson(draft));
String contractName = draft.getSubject();
logger.info("ContractSignVtwoUtils#send 查询数据库签署配置信息 lb_contract_sign_stamper tempId={} ", tempId);
List<StamperVo> listVo = initQuerySql(tempId, documentId);
logger.info("ContractSignVtwoUtils#send 查询数据库签署配置信息 lb_contract_sign_stamper tempId={} ", qysParams.getTempId());
List<StamperVo> listVo = initQuerySql(qysParams.getTempId(), documentId);
logger.info("ContractSignVtwoUtils#send 遍历合并签署位置信息 contractName={} ", contractName);
logger.info("ContractSignVtwoUtils#send 完成组装遍历合并签署位置信息 SignatoryVo.list={}", JSONUtils.toJson(list));
logger.info("ContractSignVtwoUtils#send 完成组装遍历合并签署位置信息 SignatoryVo.list={}", JSONUtils.toJson(qysParams.getList()));
logger.info("ContractSignVtwoUtils#send 完成组装遍历合并签署位置信息 StamperVo.listVo={}", JSONUtils.toJson(listVo));
List<Stamper> stampers = updateStamperList(contractSignTypeEnum, list, listVo);
List<Stamper> stampers = updateStamperList(qysParams, listVo);
logger.info("ContractSignVtwoUtils#send 完成组装遍历合并签署位置信息 stampers={}", JSONUtils.toJson(stampers));
String response = null;
try {
@ -343,14 +558,14 @@ public class ContractSignVtwoUtils {
/**
* 遍历合并签署位置信息
* @param list
* @param qysParams
* @param listVo
* @return
*/
private List<Stamper> updateStamperList(ContractSignTypeEnum contractSignTypeEnum, List<SignatoryVo> list, List<StamperVo> listVo) {
private List<Stamper> updateStamperList(QYSParams qysParams, List<StamperVo> listVo) {
List<Stamper> listStamper = new ArrayList<>();
for(StamperVo stamperVo : listVo){
for(SignatoryVo signatoryVo : list){
for(SignatoryVo signatoryVo : qysParams.getList()){
if(stamperVo.getStamperSubType().equals(signatoryVo.getSignatorySubType())){
Stamper stamper = stamperVo.getStamper();
stamper.setSignatoryId(signatoryVo.getSignatoryId());
@ -415,12 +630,12 @@ public class ContractSignVtwoUtils {
/**
* 赋值操作更新 actionId SignatoryId
* @param signatoryList
* @param list
* @param qysParams
* @return
*/
private List<SignatoryVo> updateVoList(List<Signatory> signatoryList, List<SignatoryVo> list) {
logger.info("ContractSignVtwoUtils#updateVoList 开始赋值操作更新Vo listVo= {}", JSONUtils.toJson(list));
for(SignatoryVo signatoryVo : list){
private void updateVoList(List<Signatory> signatoryList, QYSParams qysParams) {
logger.info("ContractSignVtwoUtils#updateVoList 开始赋值操作更新Vo listVo= {}", JSONUtils.toJson(qysParams.getList()));
for(SignatoryVo signatoryVo : qysParams.getList()){
for (Signatory signatory : signatoryList) {
logger.info("ContractSignVtwoUtils#updateVoList signatoryVo.Name={} ", signatoryVo.getName());
logger.info("ContractSignVtwoUtils#updateVoList signatory.getTenantName={} ", signatory.getTenantName());
@ -439,181 +654,13 @@ public class ContractSignVtwoUtils {
}
}
}
logger.info("ContractSignVtwoUtils#updateVoList 赋值操作更新Vo【结束】 listVo= {}", JSONUtils.toJson(list));
return list;
}
logger.info("ContractSignVtwoUtils#updateVoList 赋值操作更新Vo【结束】 listVo= {}", JSONUtils.toJson(qysParams.getList()));
/**
* 初始化签署方信息
* @param subjectId
* @param contractSignTypeEnum
* @return
*/
public List<SignatoryVo> initCompanySignatoryVoList(String subjectId, ContractSignTypeEnum contractSignTypeEnum){
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 开始初始化签署方信息subjectId={}", subjectId);
List<SignatoryVo> signatories = new ArrayList<>();
SignatoryVo signatoryVo = createCompanySignatoryVo(subjectId);
signatories.add(signatoryVo);
if(ContractSignTypeEnum.SIGNATURE_JOINT.getSubType().equals(contractSignTypeEnum.getSubType())){//联合租赁
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 当前签署类型为联合签约");
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 加载联合签约信息");
SignatoryVo subCompany = new SignatoryVo();
subCompany.setSignatoryType(SignatoryTypeEnum.SUB_COMPANY.getType());
subCompany.setSignatorySubType(SignatoryTypeEnum.SUB_COMPANY.getSubType());
subCompany.setMobile("12599998888");
Action action = new Action();
action.setType(SignatoryTypeEnum.SUB_COMPANY.getType());
subCompany.setName(hH_CompanyName);
action.setName(hH_CompanyName);
action.setSealId(new Long(hH_OfficialSealId));
subCompany.addAction(action);
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 加载联合签约信息");
}
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 初始化签署方信息【结束】signatories={}", JSONUtils.toJson(signatories));
return signatories;
}
private SignatoryVo createCompanySignatoryVo(String subjectId){
SignatoryVo signatoryVo = new SignatoryVo();
signatoryVo.setSignatoryType(SignatoryTypeEnum.PARENT_COMPANY.getType());
signatoryVo.setSignatorySubType(SignatoryTypeEnum.PARENT_COMPANY.getSubType());
signatoryVo.setMobile("12599996666");
Action action = new Action();
action.setType(SignatoryTypeEnum.PARENT_COMPANY.getType());
if(MultiSubjectUtil.SZSUBJECTID.equals(subjectId)){
signatoryVo.setName(sZ_CompanyName);
action.setName(sZ_CompanyName);
action.setSealId(new Long(sZ_OfficialSealId));
}else if (MultiSubjectUtil.TJSUBJECTID.equals(subjectId)){
signatoryVo.setName(tJ_CompanyName);
action.setName(tJ_CompanyName);
action.setSealId(new Long(tJ_OfficialSealId));
}
signatoryVo.addAction(action);
return signatoryVo;
}
/**
* 初始化签署方信息
* @param subjectId
* @param contractSignTypeEnum
* @return
*/
public List<Signatory> initBaseCompanySignatoryList(String subjectId, ContractSignTypeEnum contractSignTypeEnum){
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 开始初始化签署方信息subjectId={}", subjectId);
List<Signatory> signatories = new ArrayList<>();
Signatory signatory = createCompanySignatory(subjectId);
signatories.add(signatory);
if(ContractSignTypeEnum.SIGNATURE_JOINT.getSubType().equals(contractSignTypeEnum.getSubType())){//联合租赁
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 当前签署类型为联合签约");
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 加载联合签约信息");
Signatory subCompany = new Signatory();
signatory.setReceiver(new User("12599998888", "MOBILE"));
signatory.setTenantType(SignatoryTypeEnum.PARENT_COMPANY.getType());//签署方类型COMPANY公司PERSONAL个人
Action action = new Action();
action.setType(SignatoryTypeEnum.PARENT_COMPANY.getType());
signatory.setTenantName(hH_CompanyName);
action.setName(hH_CompanyName);
action.setSealId(new Long(hH_OfficialSealId));
subCompany.addAction(action);
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 加载联合签约信息");
}
logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 初始化签署方信息【结束】signatories={}", JSONUtils.toJson(signatories));
return signatories;
}
private Signatory createCompanySignatory(String subjectId){
Signatory signatory = new Signatory();
signatory.setTenantType(SignatoryTypeEnum.PARENT_COMPANY.getType());//签署方类型COMPANY公司PERSONAL个人
Action action = new Action();
action.setType(SignatoryTypeEnum.PARENT_COMPANY.getType());
if(MultiSubjectUtil.SZSUBJECTID.equals(subjectId)){
signatory.setTenantName(sZ_CompanyName);
action.setName(sZ_CompanyName);
action.setSealId(new Long(sZ_OfficialSealId));
}else if (MultiSubjectUtil.TJSUBJECTID.equals(subjectId)){
signatory.setTenantName(tJ_CompanyName);
action.setName(tJ_CompanyName);
action.setSealId(new Long(tJ_OfficialSealId));
}
signatory.addAction(action);
return signatory;
}
/**
* 合同签署方信息转换
* @param signatories
* @param subjectId
* @return Signatory
*/
private List<Signatory> signatoryInitList(List<SignatoryVo> signatories, String subjectId, ContractSignTypeEnum contractSignTypeEnum) throws Exception{
logger.info("ContractSignVtwoUtils#signatoryInitList 合同签署方信息转换subjectId={}", subjectId);
//初始化公司信息
List<Signatory> list = new ArrayList<>();
boolean checkData = true;//参数是否符合要求
if(ContractSignTypeEnum.ELECTRONIC_JOINT.getType().equals(contractSignTypeEnum.getType())){//电子签约 需要包含用户信息
logger.info("ContractSignVtwoUtils#signatoryInitList 合同签署方信息 list={}", JSONUtils.toJson(list));
logger.info("ContractSignVtwoUtils#signatoryInitList 合同签署方信息【用户信息】signatories={}", JSONUtils.toJson(signatories));
if(CollectionUtils.isEmpty(signatories)){
logger.error("ContractSignVtwoUtils#signatoryInitList 参数校验失败 电子签约 不包含用户信息");
throw new Exception(" 参数校验失败 电子签约 不包含用户信息 ");
}
for(SignatoryVo signatoryVo : signatories) {
if (SignatoryTypeEnum.PERSON_CZ.getType().equals(signatoryVo.getSignatoryType())) {//电子签约 && 个人
if (SignatoryTypeEnum.PERSON_CZ.getSubType().equals(signatoryVo.getSignatorySubType())) {//电子签约 && 承租人信息
checkData = false;
}
//个人信息转化
Signatory signatory = signatoryPersonInit(signatoryVo);
list.add(signatory);
}
}
if(checkData){
logger.error("ContractSignVtwoUtils#signatoryInitList 参数校验失败 电子签约 不包含承租人信息");
throw new Exception("ContractSignVtwoUtils#signatoryInitList 参数校验失败 电子签约 不包含承租人信息 ");
}
}
for(SignatoryVo signatoryVo : signatories) {
if (SignatoryTypeEnum.PARENT_COMPANY.getType().equals(signatoryVo.getSignatoryType())) {//公司信息
//个人信息转化
Signatory signatory = signatoryCompanyInit(signatoryVo, subjectId);
list.add(signatory);
}
}
logger.info("ContractSignVtwoUtils#signatoryInitList 初始化签署方信息【结束】list={}", JSONUtils.toJson(list));
return list;
}
/**
* 初始化个人签署方信息
* @param signatoryVo
* @return
* @throws Exception
*/
private Signatory signatoryPersonInit(SignatoryVo signatoryVo) throws Exception{
Signatory persoanlSignatory = new Signatory();
persoanlSignatory.setTenantType(signatoryVo.getSignatoryType());
persoanlSignatory.setTenantName(signatoryVo.getName());
persoanlSignatory.setReceiver(new User(signatoryVo.getSignatorySubType(), signatoryVo.getMobile(), "MOBILE"));
return persoanlSignatory;
}
/**
* 初始化公司签署方信息
* @param signatoryVo
* @return
* @throws Exception
*/
private Signatory signatoryCompanyInit(SignatoryVo signatoryVo, String subjectId) throws Exception{
Signatory companySignatory = new Signatory();
companySignatory.setTenantType(signatoryVo.getSignatoryType());
companySignatory.setTenantName(signatoryVo.getName());
if(!MultiSubjectUtil.SZSUBJECTID.equals(subjectId)){
companySignatory.setReceiver(new User(signatoryVo.getSignatorySubType(), signatoryVo.getMobile(), "MOBILE"));
}
companySignatory.setActions(signatoryVo.getActions());
return companySignatory;
}
}

View File

@ -0,0 +1,103 @@
package com.tenwa.app.manage.qiyuesuo.v2;
import java.io.Serializable;
import com.tenwa.app.manage.qiyuesuo.v2.ContractSignEnums.*;
import java.util.List;
/**
* 契约锁接口参数整理
*/
public class QYSParams implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 当前签约的业务类型
*/
private ContractSignTypeEnum contractSignTypeEnum;
/**
* 合同/文件模板id
*/
private String tempId;
/**
* 主体id
*/
private String subjectId;
/**
* 联合租赁时必传字段0卡尔1凯捷
*/
private String childSubject;
/**
* 文件名称
*/
private String fileName;
/**
* 文件路径
*/
private String filePath;
/**
* 签署方信息公司印章信息电子签约时包含承租人共同申请人担保人信息
*/
private List<SignatoryVo> list;
public ContractSignTypeEnum getContractSignTypeEnum() {
return contractSignTypeEnum;
}
public void setContractSignTypeEnum(ContractSignTypeEnum contractSignTypeEnum) {
this.contractSignTypeEnum = contractSignTypeEnum;
}
public String getTempId() {
return tempId;
}
public void setTempId(String tempId) {
this.tempId = tempId;
}
public String getSubjectId() {
return subjectId;
}
public void setSubjectId(String subjectId) {
this.subjectId = subjectId;
}
public String getChildSubject() {
return childSubject;
}
public void setChildSubject(String childSubject) {
this.childSubject = childSubject;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public List<SignatoryVo> getList() {
return list;
}
public void setList(List<SignatoryVo> list) {
this.list = list;
}
}

View File

@ -0,0 +1,6 @@
package com.tenwa.app.manage.qiyuesuo.v2;
public class SubjectConstant {
public static final String SZ_SUBJECT_ID = "aa740e4111c111eaaa0000163e0e11e6"; //深圳主体ID
public static final String TJ_SUBJECT_ID = "d989246c11c111eaaa0000163e0e11e6"; //天津主体ID
}

View File

@ -9,6 +9,9 @@ import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import com.tenwa.app.manage.qiyuesuo.v2.ContractSignVtwoUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@ -35,7 +38,7 @@ import com.qiyuesuo.sdk.v2.utils.IOUtils;
import com.tenwa.util.MultiSubjectUtil;
public class ContractSignActionTwoUtil {
private static final Logger logger = LoggerFactory.getLogger(ContractSignActionTwoUtil.class);
private static final ResourceBundle resourceBunlde = ResourceBundle.getBundle("qiyuesuo");
@ -410,6 +413,7 @@ public class ContractSignActionTwoUtil {
public String getContractStatus(String subjectId, Long contractId) throws Exception{
Contract contract = this.getContract(subjectId,contractId).getResult();
logger.info("getContractStatus#20210422 查询合同信息 contract=" + JSONUtils.toJson(contract));
boolean stu = true;
StringBuffer sb = new StringBuffer();
List<Signatory> signatories = contract.getSignatories();

View File

@ -1,9 +1,11 @@
package com.tenwa.channelportal.action;
import com.alibaba.fastjson.JSONObject;
import com.amarsoft.are.jbo.*;
import com.tenwa.app.dao.ContractSignInfo;
import com.tenwa.app.manage.qiyuesuo.v2.ContractSignEnums;
import com.tenwa.app.manage.qiyuesuo.v2.ContractSignVtwoUtils;
import com.tenwa.app.manage.qiyuesuo.v2.QYSParams;
import com.tenwa.channelportal.action.generativecontract.WordToPDFUtil;
import jbo.app.tenwa.doc.*;
import org.apache.log4j.Logger;
@ -160,13 +162,20 @@ public class ContractInsuranceSignAction {
logger.info("claimSignInsuranceTwo filePath="+filePath);
ContractSignVtwoUtils contractSignVtwoUtils = new ContractSignVtwoUtils();
logger.info("claimSignInsuranceTwo ·¢Æð¹«Ë¾¸ÇÕÂ");
String res = contractSignVtwoUtils.sign(ContractSignEnums.ContractSignTypeEnum.SIGNATURE_DEFAULT, tempId, subjectId, fileName, filePath, null);
logger.info("claimSignInsuranceTwo 公司盖章【结束】 res=" + res);
if ("success".equals(res)) {
return "success";
}else{
QYSParams qysParams = new QYSParams();
qysParams.setList(null);//手签无需传承租人共同申请人担保人信息
qysParams.setContractSignTypeEnum(ContractSignEnums.ContractSignTypeEnum.SIGNATURE_DEFAULT);//客户手签
qysParams.setFileName(fileName);
qysParams.setFilePath(filePath);
qysParams.setSubjectId(subjectId);
qysParams.setTempId(tempId);//合同模板id
JSONObject resJson = contractSignVtwoUtils.sign(qysParams);
if (null == resJson) {
logger.warn("claimSignInsuranceTwo 20210415 调用契约锁盖章异常,返回盖章失败");
return "error";
}
logger.info("claimSignInsuranceTwo 20210415 调用契约锁盖章成功res=" + resJson.toJSONString());
return "success";
} else {
return "error";
}

View File

@ -0,0 +1,153 @@
package com.tenwa.channelportal.action;
import com.alibaba.fastjson.JSONObject;
import com.amarsoft.are.jbo.*;
import com.tenwa.app.dao.ContractSignInfo;
import com.tenwa.app.manage.qiyuesuo.v2.ContractSignEnums;
import com.tenwa.app.manage.qiyuesuo.v2.ContractSignVtwoUtils;
import com.tenwa.app.manage.qiyuesuo.v2.QYSParams;
import com.tenwa.channelportal.action.generativecontract.WordToPDFUtil;
import jbo.app.tenwa.doc.*;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import java.io.File;
public class ContractPlanListSignAction {
private static Logger logger=Logger.getLogger(ContractPlanListSignAction.class);
private String projectId;
private String planNumber;
private String planList;
private String contractNo;
private String contractId;
private String subjectId;
private String tempId;
public String getPlanNumber() {
return planNumber;
}
public void setPlanNumber(String planNumber) {
this.planNumber = planNumber;
}
public String getContractNo() {
return contractNo;
}
public void setContractNo(String contractNo) {
this.contractNo = contractNo;
}
public String getProjectId() {
return projectId;
}
public void setProjectId(String projectId) {
this.projectId = projectId;
}
public String getContractId() {
return contractId;
}
public void setContractId(String contractId) {
this.contractId = contractId;
}
public String getSubjectId() {
return subjectId;
}
public void setSubjectId(String subjectId) {
this.subjectId = subjectId;
}
public String getTempId() {
return tempId;
}
public void setTempId(String tempId) {
this.tempId = tempId;
}
public String getPlanList() {
return planList;
}
public void setPlanList(String planList) {
this.planList = planList;
}
/**
* 租金支付表盖章:对接契约锁2.0
* @param tx
* @return
* @throws Exception
*/
public String claimSignPlanListTwo(JBOTransaction tx) throws Exception {
logger.info("claimSignPlanListTwo 租金支付表盖章:对接契约锁2.0 开始 0413");
String libraryid="";
planList = planList.split("\\.")[0];
BizObjectManager bom=JBOFactory.getBizObjectManager(jbo.app.tenwa.doc.LB_DOCRELATIVE.CLASS_NAME);
BizObject DOCRELATIVE=bom.createQuery("plan_number=:plan_number and plan_list=:plan_list").setParameter("plan_number",planNumber).setParameter("plan_list", planList).getSingleResult(false);
logger.info("claimSignPlanListTwo 查询文件关联信息");
if (DOCRELATIVE != null) {
logger.info("claimSignPlanListTwo 查询文件关联信息不为空时");
String DOCRELATIVEid=DOCRELATIVE.getAttribute("id").toString();
BizObjectManager bom1=JBOFactory.getBizObjectManager(jbo.app.tenwa.doc.LB_DOCLIBRARY.CLASS_NAME);
libraryid=bom1.createQuery("relative_id=:relative_id").setParameter("relative_id", DOCRELATIVEid).getSingleResult(false).getAttribute("id").toString();
}
if(StringUtils.isEmpty(libraryid)){
logger.warn("claimSignPlanListTwo 查询文件关联信息为空,返回盖章失败");
return "error";
}
BizObjectManager contBom = JBOFactory.getBizObjectManager(LB_DOCATTRIBUTE.CLASS_NAME, tx);
ContractSignInfo con = null;
BizObject bo = null;
String info="";
try{
bo = contBom.createQuery("library_id=:libraryid").setParameter("libraryid", libraryid).getSingleResult(true);
logger.info("claimSignInsuranceTwo 查询文件信息");
if(bo != null){
logger.info("claimSignInsuranceTwo 查询文件信息不为空时");
String fileName = bo.getAttribute("FILENAME").toString();
String filePath = bo.getAttribute("FULLPATH").toString();
logger.info("claimSignInsuranceTwo fileName="+fileName);
logger.info("claimSignInsuranceTwo filePath="+filePath);
ContractSignVtwoUtils contractSignVtwoUtils = new ContractSignVtwoUtils();
logger.info("claimSignInsuranceTwo 发起公司盖章");
QYSParams qysParams = new QYSParams();
qysParams.setList(null);//手签无需传承租人共同申请人担保人信息
qysParams.setContractSignTypeEnum(ContractSignEnums.ContractSignTypeEnum.SIGNATURE_DEFAULT);//客户手签
qysParams.setFileName(fileName);
qysParams.setFilePath(filePath);
qysParams.setSubjectId(subjectId);
qysParams.setTempId(tempId);//合同模板id
JSONObject resJson = contractSignVtwoUtils.sign(qysParams);
if (null == resJson) {
logger.warn("claimSignPlanListTwo 调用契约锁盖章异常,返回盖章失败");
return "error";
}
logger.info("claimSignInsuranceTwo 公司盖章【结束】 res=" + resJson.toJSONString());
logger.info("claimSignPlanListTwo 契约锁返回盖章成功返回盖章success");
return "success";
} else {
logger.warn("claimSignPlanListTwo 查询文件信息【LB_DOCATTRIBUTE】为空返回盖章失败");
return "error";
}
} catch (Exception e) {
logger.error("claimSignInsuranceTwo 系统错误,错误信息: ", e);
e.printStackTrace();
return "error";
}
}
}

View File

@ -0,0 +1,337 @@
package com.tenwa.channelportal.action;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import com.tenwa.app.manage.qiyuesuo.v2.ContractSignEnums;
import com.tenwa.app.manage.qiyuesuo.v2.ContractSignVtwoUtils;
import com.tenwa.app.manage.qiyuesuo.v2.QYSParams;
import jbo.app.tenwa.customer.CUSTOMER_FAMILY_TEMP;
import jbo.app.tenwa.doc.LB_DOC_CONTRACT_LIST;
import jbo.com.tenwa.lease.carbrand.LB_CONTRACT_SIGN_LOG;
import jbo.com.tenwa.lease.comm.LB_GUARANTEE_UNIT_TEMP;
import jbo.com.tenwa.lease.comm.LB_PROJECT_INFO_TEMP;
import com.amarsoft.are.jbo.BizObject;
import com.amarsoft.are.jbo.BizObjectManager;
import com.amarsoft.are.jbo.JBOException;
import com.amarsoft.are.jbo.JBOFactory;
import com.amarsoft.are.jbo.JBOTransaction;
import com.qiyuesuo.sdk.v2.bean.Contract;
import com.qiyuesuo.sdk.v2.response.DocumentAddResult;
import com.qiyuesuo.sdk.v2.response.SdkResponse;
import com.tenwa.app.manage.util.ContractSignActionTwoUtil;
import com.tenwa.comm.util.date.DateAssistant;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import org.apache.log4j.Logger;
/**
* 最新版契约锁盖章
* 20210415
*/
public class ContractSignActionNewUtils {
private static Logger logger=Logger.getLogger(ContractSignActionNewUtils.class);
private String FlowUnid;
private String flagType;
private String ProjectId;
private String SubjectId;
private String customerType;
private String CurUserID;
private String operationType;
//直接添加公司公章
public String compnySignIng(JBOTransaction tx) throws Exception {
BizObjectManager pbm = JBOFactory.getBizObjectManager(LB_PROJECT_INFO_TEMP.CLASS_NAME, tx);
BizObjectManager contBom = JBOFactory.getBizObjectManager(LB_DOC_CONTRACT_LIST.CLASS_NAME, tx);
BizObject bo = null;
try {
ContractSignActionTwoUtil catu = new ContractSignActionTwoUtil();
BizObject pbo = pbm.createQuery("FLOWUNID=:flowunid").setParameter("flowunid", FlowUnid).getSingleResult(true);
// 查询lb_doc_contract_list表
bo = contBom.createQuery("project_id=:projectId and flow_unid=:flowunid and file_flag='yes' and (sendprocess='0' or sendprocess='2' ) ")
.setParameter("projectId", ProjectId).setParameter("flowunid", FlowUnid).getSingleResult(true);
if(bo == null ){
throw new RuntimeException("请检查合同文件是否生成!");
} else {
//添加本地生成的合同文件
String makefullPath = bo.getAttribute("FULLPATH").toString();// 获取生成文件路径
String fileName = bo.getAttribute("filename").getString();
QYSParams qysParams = new QYSParams();
qysParams.setList(null);//手签无需传承租人共同申请人担保人信息
qysParams.setFileName(fileName);
qysParams.setFilePath(makefullPath);
qysParams.setSubjectId(SubjectId);
if("KJLHZL".equals(operationType)) {//凯捷联合租赁
qysParams.setTempId("5e1b90d31c4749e2af83891b48ccbe19");//合同模板id
qysParams.setContractSignTypeEnum(ContractSignEnums.ContractSignTypeEnum.SIGNATURE_JOINT);//联合租赁-手签
qysParams.setChildSubject(ContractSignVtwoUtils.KJ_CHILD_SUBJECT_TYPE);//子公司凯捷
}else {
logger.warn("暂不知当前渠道的合同模板。");
return "flase@error";
}
ContractSignVtwoUtils contractSignVtwoUtils = new ContractSignVtwoUtils();
JSONObject resJson = contractSignVtwoUtils.sign(qysParams);
bo.setAttributeValue("DOCUMENT_ID", resJson.getLong("documentId"));
bo.setAttributeValue("SINGCONTRACT_ID", resJson.getString("contractId"));
bo.setAttributeValue("SIGN_TYPE", "COMPLETE");// 法人客户当盖完章改为完成状态
bo.setAttributeValue("SENDPROCESS", "2");
contBom.saveObject(bo);
Map<String, String> fromCondtion = new HashMap<String, String>();
Map<String, String> otherProperty = new HashMap<String, String>();
String contractDocId = bo.getAttribute("id")
.toString();
fromCondtion.put("id", contractDocId);
otherProperty.put("SIGNPROCESS", "0");// 发起电子签约
otherProperty.put("CONTRACTDOCID", contractDocId);// 发起电子签约
otherProperty.put("INPUTTIME",DateAssistant.getTodayNow());
// 拷表的方法
DataOperatorUtil.copySingleJBO(LB_DOC_CONTRACT_LIST.CLASS_NAME, fromCondtion,LB_CONTRACT_SIGN_LOG.CLASS_NAME, null,otherProperty, tx);
pbo.setAttributeValue("DATA_STATE", "8");// 状态改成电子签约签署中
pbm.saveObject(pbo);
return "success";
}
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
System.out.println("法人客户生成合同盖章失败" + e.getMessage());
return "flase@error";
}
}
//个人直接发起电子签约
public String signIng(JBOTransaction tx) throws Exception {
BizObjectManager pbm = JBOFactory.getBizObjectManager(LB_PROJECT_INFO_TEMP.CLASS_NAME, tx);
BizObjectManager contBom = JBOFactory.getBizObjectManager(LB_DOC_CONTRACT_LIST.CLASS_NAME, tx);
BizObject bo = null;
try {
BizObject pbo = pbm.createQuery("FLOWUNID=:flowunid")
.setParameter("flowunid", FlowUnid).getSingleResult(true);
// 查询lb_doc_contract_list表
bo = contBom.createQuery("project_id=:projectId and file_flag='yes' and (sendprocess='0' or sendprocess='2' ) ")
.setParameter("projectId", ProjectId).getSingleResult(true);
if(bo == null ){
throw new RuntimeException("请检查合同文件是否生成!");
} else {
Map<String, List<Map<String, String>>> parameter = new HashMap<String, List<Map<String, String>>>();
List<Map<String, String>> companyPar = new LinkedList<Map<String, String>>();
// 添加公司公章
Map<String, String> param1 = new HashMap<String, String>();
param1.put("type", "1");// 1标识当期发起公司公章2标识当前公司下的子公司
param1.put("mobile", "12599998888");//子公司添加接收手机号如果不需要接收直接填写一个虚拟不存在就行如果需要传真实手机号
companyPar.add(param1);
if( "LHZL".equals(operationType) ){
Map<String, String> param2 = new HashMap<String, String>();
param2.put("type", "2");// 1标识当期发起公司公章2标识当前公司下的子公司
param2.put("mobile", "12599998888");//子公司添加接收手机号如果不需要接收直接填写一个虚拟不存在就行如果需要传真实手机号
companyPar.add(param2);
}
parameter.put("COMPANY", companyPar);
//添加个人基本信息
List<Map<String, String>> personPar = new LinkedList<Map<String, String>>();
Map<String, String> sqPar = new HashMap<String, String>();
sqPar.put("name",bo.getAttribute("CUSTOMERNAME").toString());
sqPar.put("type", "sq");
sqPar.put("mobile",bo.getAttribute("TELEPHONE").toString());
personPar.add(sqPar);
Map<String, String> gtPar = new HashMap<String, String>();
//获取共同申请人的信息
BizObjectManager cftm = JBOFactory.getBizObjectManager(CUSTOMER_FAMILY_TEMP.CLASS_NAME);
BizObject cft = cftm.createQuery("flowunid=:FLowUnid and Partner_='Y'").setParameter("FLowUnid", FlowUnid).getSingleResult(false);
if(cft!=null){
String name = cft.getAttribute("name").toString();
String mobile = cft.getAttribute("tel").toString();
if(name.length()>0 && mobile.length()>0){
gtPar.put("name",name);
gtPar.put("type", "gt");
gtPar.put("mobile",mobile);
personPar.add(gtPar);
}
}
//获取担保人信息
BizObjectManager cptm = JBOFactory.getBizObjectManager(LB_GUARANTEE_UNIT_TEMP.CLASS_NAME);
List<BizObject> cpts = cptm.createQuery("select * from O where flowunid=:flowUnid and CERTTYPE='Ind01' ").setParameter("flowUnid", FlowUnid).getResultList(false);
int count = 0;
if(cpts!=null && cpts.size()>2){
count = 2;
}else{
count = cpts.size();
}
for(int i=0;i<count;i++){
BizObject cpt = cpts.get(i);
String name = cpt.getAttribute("FULLNAME").toString();
String mobile = cpt.getAttribute("mobile").toString();
if(name.length()>0 && mobile.length()>0){
Map<String, String> dbPar = new HashMap<String, String>();
dbPar.put("name",name);
dbPar.put("type", "db");
dbPar.put("mobile",mobile);
personPar.add(dbPar);
}
}
parameter.put("PERSONAL", personPar);
ContractSignActionTwoUtil catu = new ContractSignActionTwoUtil();
//创建合同
SdkResponse<Contract> createContract = catu.createContract(parameter, SubjectId,bo.getAttribute("filename").getString());
Long contractId = createContract.getResult().getId();
//添加本地生成的合同文件
String makefullPath = bo.getAttribute("FULLPATH").toString();// 获取生成文件路径
SdkResponse<DocumentAddResult> addDocumentByFile = catu.addDocumentByFile(makefullPath, SubjectId, contractId);
Long documentId = addDocumentByFile.getResult().getDocumentId();
//发起合同
catu.send(personPar, SubjectId, contractId, documentId);
bo.setAttributeValue("DOCUMENT_ID",documentId);
bo.setAttributeValue("SINGCONTRACT_ID", contractId);
bo.setAttributeValue("SIGN_TYPE", "SIGNING");
bo.setAttributeValue("SENDPROCESS", "1");
contBom.saveObject(bo);
Map<String, String> fromCondtion = new HashMap<String, String>();
Map<String, String> otherProperty = new HashMap<String, String>();
String contractDocId = bo.getAttribute("id")
.toString();
fromCondtion.put("id", contractDocId);
otherProperty.put("SIGNPROCESS", "0");// 发起电子签约
otherProperty.put("CONTRACTDOCID", contractDocId);// 发起电子签约
otherProperty.put("INPUTTIME",DateAssistant.getTodayNow());
// 拷表的方法
DataOperatorUtil.copySingleJBO(LB_DOC_CONTRACT_LIST.CLASS_NAME, fromCondtion,LB_CONTRACT_SIGN_LOG.CLASS_NAME, null,otherProperty, tx);
pbo.setAttributeValue("DATA_STATE", "8");// 状态改成电子签约签署中
pbm.saveObject(pbo);
return "success";
}
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
System.out.println("自然人电子签约异常:" + e.getMessage());
return "flase@error";
}
}
//查出签约结果
public String contractSignStatus(JBOTransaction tx) throws Exception {
BizObjectManager pbm = JBOFactory.getBizObjectManager(LB_PROJECT_INFO_TEMP.CLASS_NAME, tx);
BizObjectManager contBom = JBOFactory.getBizObjectManager(LB_DOC_CONTRACT_LIST.CLASS_NAME, tx);
// 查询lb_doc_contract_list表
BizObject bo = contBom.createQuery("project_id=:projectId and file_flag='yes' and (sendprocess='0' or sendprocess='1' ) ")
.setParameter("projectId", ProjectId).getSingleResult(true);
if(bo == null ){
return "请检查合同文件是否生成!";
} else {
long signContractId = new Long(bo.getAttribute("SINGCONTRACT_ID")==null ? null : bo.getAttribute("SINGCONTRACT_ID").getString());
long documentId = new Long(bo.getAttribute("DOCUMENT_ID")==null ? null : bo.getAttribute("DOCUMENT_ID").getString());
String makefullPath = bo.getAttribute("FULLPATH")==null ? null : bo.getAttribute("FULLPATH").getString();// 获取生成文件路径
ContractSignActionTwoUtil catu = new ContractSignActionTwoUtil();
String contractStatus = catu.getContractStatus(SubjectId, signContractId);
if("success".equals(contractStatus)){
//调用公司盖章
catu.companySealSign(SubjectId, signContractId);
bo.setAttributeValue("SIGN_TYPE", "COMPLETE");
bo.setAttributeValue("PROCESS", "5");
// contBom.saveObject(bo);
Map<String, String> fromCondtion = new HashMap<String, String>();
Map<String, String> otherProperty = new HashMap<String, String>();
String contractDocId = bo.getAttribute("id").toString();
fromCondtion.put("id", contractDocId);
otherProperty.put("SIGNPROCESS", "0");// 发起电子签约
otherProperty.put("CONTRACTDOCID", contractDocId);// 发起电子签约
otherProperty.put("INPUTTIME",DateAssistant.getTodayNow());
// 拷表的方法
DataOperatorUtil.copySingleJBO(LB_DOC_CONTRACT_LIST.CLASS_NAME, fromCondtion,LB_CONTRACT_SIGN_LOG.CLASS_NAME, null,otherProperty, tx);
BizObject pbo = pbm.createQuery("FLOWUNID=:flowunid").setParameter("flowunid", FlowUnid).getSingleResult(true);
pbo.setAttributeValue("DATA_STATE", "8");// 状态改成电子签约签署中
pbm.saveObject(pbo);
String downloadstatus = catu.contractDownload(SubjectId, documentId, makefullPath);
System.out.println("合同下载log===" + downloadstatus);
bo.setAttributeValue("PROCESS", "6");
contBom.saveObject(bo);
return "已完成";
}else{
return contractStatus;
}
}
}
public String sendMessageAgain(JBOTransaction tx) {
try{
BizObjectManager contBom = JBOFactory.getBizObjectManager(LB_DOC_CONTRACT_LIST.CLASS_NAME, tx);
BizObject bo = null;
bo = contBom.createQuery("select singcontract_id,filename from O where project_id =:projectId"
+" and file_flag = 'yes' and sendprocess = '1' and sign_type = 'SIGNING'")
.setParameter("projectId", ProjectId).getSingleResult(true);
if(bo == null ){
return "请检查合同文件是否生成!";
} else {
long signContractId =new Long(bo.getAttribute("SINGCONTRACT_ID")==null ? null : bo.getAttribute("SINGCONTRACT_ID").getString());
ContractSignActionTwoUtil catu = new ContractSignActionTwoUtil();
return catu.messageSend(SubjectId, signContractId);
}
} catch (Exception e) {
try {
tx.rollback();
} catch (JBOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
return "error";
}
}
public String getFlowUnid() {
return FlowUnid;
}
public void setFlowUnid(String flowUnid) {
FlowUnid = flowUnid;
}
public String getFlagType() {
return flagType;
}
public void setFlagType(String flagType) {
this.flagType = flagType;
}
public String getProjectId() {
return ProjectId;
}
public void setProjectId(String projectId) {
ProjectId = projectId;
}
public String getSubjectId() {
return SubjectId;
}
public void setSubjectId(String subjectId) {
SubjectId = subjectId;
}
public String getCustomerType() {
return customerType;
}
public void setCustomerType(String customerType) {
this.customerType = customerType;
}
public String getCurUserID() {
return CurUserID;
}
public void setCurUserID(String curUserID) {
CurUserID = curUserID;
}
public String getOperationType() {
return operationType;
}
public void setOperationType(String operationType) {
this.operationType = operationType;
}
}

View File

@ -24,9 +24,11 @@ import com.tenwa.app.manage.util.ContractSignActionTwoUtil;
import com.tenwa.comm.util.date.DateAssistant;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import com.tenwa.lease.app.service.HttpRequestAppService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ContractSignActionTwo {
private static final Logger logger = LoggerFactory.getLogger(ContractSignActionTwo.class);
private String FlowUnid;
private String flagType;
private String ProjectId;
@ -37,6 +39,7 @@ public class ContractSignActionTwo {
//直接添加公司公章
public String compnySignIng(JBOTransaction tx) throws Exception {
logger.info("compnySignIng#20210422 普通手签合同,直接盖章");
BizObjectManager pbm = JBOFactory.getBizObjectManager(LB_PROJECT_INFO_TEMP.CLASS_NAME, tx);
BizObjectManager contBom = JBOFactory.getBizObjectManager(LB_DOC_CONTRACT_LIST.CLASS_NAME, tx);
BizObject bo = null;
@ -106,6 +109,7 @@ public class ContractSignActionTwo {
//个人直接发起电子签约
public String signIng(JBOTransaction tx) throws Exception {
logger.info("compnySignIng#20210422 个人直接发起电子签约,需要个人签约");
BizObjectManager pbm = JBOFactory.getBizObjectManager(LB_PROJECT_INFO_TEMP.CLASS_NAME, tx);
BizObjectManager contBom = JBOFactory.getBizObjectManager(LB_DOC_CONTRACT_LIST.CLASS_NAME, tx);
BizObject bo = null;

View File

@ -17,6 +17,7 @@ import com.amarsoft.are.jbo.JBOTransaction;
import com.tenwa.util.MakeContractCheck;
import jbo.com.tenwa.lease.comm.LB_PROJECT_INFO;
import org.apache.commons.lang3.StringUtils;
public class ContractInfoCheck {
@ -154,4 +155,24 @@ public class ContractInfoCheck {
}
return "success" ;
}
/**
* 判断是否为中车合同
* @param tx
* @return
* @throws Exception
*/
public String checkChannelZC(JBOTransaction tx) throws Exception{
BizObjectManager lecManger = JBOFactory.getBizObjectManager(LB_CONTRACT_INFO.CLASS_NAME, tx);
BizObject lec = lecManger.createQuery("select O.ZC_CONTRACT_NUMBER from O "
+ " where O.id=:contractId")
.setParameter("contractId", contractid).getSingleResult(true);
if(lec !=null){
String zcContractNumber = lec.getAttribute("ZC_CONTRACT_NUMBER").getString();
if(!StringUtils.isEmpty(zcContractNumber)){//中车合同号非空则为中车合同
return "SUCCESS";
}
}
return "EROOR";
}
}