diff --git a/WebContent/Tenwa/Lease/Flow/Comm/LBContractTemplate/contract_template.jsp b/WebContent/Tenwa/Lease/Flow/Comm/LBContractTemplate/contract_template.jsp index 3b2827704..1ba1a9b92 100644 --- a/WebContent/Tenwa/Lease/Flow/Comm/LBContractTemplate/contract_template.jsp +++ b/WebContent/Tenwa/Lease/Flow/Comm/LBContractTemplate/contract_template.jsp @@ -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%>"); } diff --git a/WebContent/Tenwa/Lease/Flow/RentNotify/RentNotifyList.jsp b/WebContent/Tenwa/Lease/Flow/RentNotify/RentNotifyList.jsp index 15b226176..c6ce3f586 100644 --- a/WebContent/Tenwa/Lease/Flow/RentNotify/RentNotifyList.jsp +++ b/WebContent/Tenwa/Lease/Flow/RentNotify/RentNotifyList.jsp @@ -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 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 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 signatories = signatoryInitList(list, subjectId, contractSignTypeEnum); - contract.setSignatories(signatories); - //创建合同 + //获取契约锁客户端,等待发起接口调用 + SdkClient client = this.getSdkClient(qysParams.getSubjectId()); + // 1、创建合同 + // 1.4、调用契约锁【创建合同】接口 logger.info("ContractSignVtwoUtils#sign 创建合同 20201224"); - SdkResponse createContract = this.createContract(contract, client); + SdkResponse createContract = this.createContract(qysParams, client); logger.info("ContractSignVtwoUtils#sign 创建合同【结束】 20201224"); Long contractId = createContract.getResult().getId(); List signatoryList = createContract.getResult().getSignatories(); //赋值更新Volist,为发起合同做准备 - list = updateVoList(signatoryList, list); + updateVoList(signatoryList, qysParams); //添加本地生成的合同文件 logger.info("ContractSignVtwoUtils#sign 添加本地生成的合同文件 20201224"); - SdkResponse addDocumentByFile = this.addDocumentByFile(filePath, subjectId, contractId, client); + SdkResponse 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 createContract(Contract contract, SdkClient client) throws Exception { + public SdkResponse 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 signatoryVos = initCompanySignatoryVoList(qysParams); + // 1.2、判断是否包含用户信息 + if(CollectionUtils.isEmpty(qysParams.getList())){ + qysParams.setList(signatoryVos); + }else { + qysParams.getList().addAll(signatoryVos); + } + // 1.3、整理符合契约锁规范的签署方信息 + List 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 initCompanySignatoryVoList(QYSParams qysParams){ + logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 开始初始化签署方信息subjectId={}", qysParams.getSubjectId()); + List 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 signatoryInitList(QYSParams qysParams) throws Exception{ + logger.info("ContractSignVtwoUtils#signatoryInitList 合同签署方信息转换subjectId={}", qysParams.getSubjectId()); + //初始化公司信息 + List 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 addDocumentByFile(String filePath, String subjectId, Long contractId, SdkClient client)throws Exception { - logger.info("ContractSignVtwoUtils#addDocumentByFile 本地文件转化为文件流 filePath={} ", filePath); + public SdkResponse 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 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 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 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 listVo = initQuerySql(tempId, documentId); + logger.info("ContractSignVtwoUtils#send 查询数据库签署配置信息 lb_contract_sign_stamper tempId={} ", qysParams.getTempId()); + List 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 stampers = updateStamperList(contractSignTypeEnum, list, listVo); + List 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 updateStamperList(ContractSignTypeEnum contractSignTypeEnum, List list, List listVo) { + private List updateStamperList(QYSParams qysParams, List listVo) { List 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 updateVoList(List signatoryList, List list) { - logger.info("ContractSignVtwoUtils#updateVoList 开始赋值操作更新Vo listVo= {}", JSONUtils.toJson(list)); - for(SignatoryVo signatoryVo : list){ + private void updateVoList(List 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 initCompanySignatoryVoList(String subjectId, ContractSignTypeEnum contractSignTypeEnum){ - logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 开始初始化签署方信息subjectId={}", subjectId); - List 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 initBaseCompanySignatoryList(String subjectId, ContractSignTypeEnum contractSignTypeEnum){ - logger.info("ContractSignVtwoUtils#initBaseCompanySignatoryList 开始初始化签署方信息subjectId={}", subjectId); - List 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 signatoryInitList(List signatories, String subjectId, ContractSignTypeEnum contractSignTypeEnum) throws Exception{ - logger.info("ContractSignVtwoUtils#signatoryInitList 合同签署方信息转换subjectId={}", subjectId); - //初始化公司信息 - List 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; - } } diff --git a/src/com/tenwa/app/manage/qiyuesuo/v2/QYSParams.java b/src/com/tenwa/app/manage/qiyuesuo/v2/QYSParams.java new file mode 100644 index 000000000..74a0f709e --- /dev/null +++ b/src/com/tenwa/app/manage/qiyuesuo/v2/QYSParams.java @@ -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 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 getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/src/com/tenwa/app/manage/qiyuesuo/v2/SubjectConstant.java b/src/com/tenwa/app/manage/qiyuesuo/v2/SubjectConstant.java new file mode 100644 index 000000000..3c79950de --- /dev/null +++ b/src/com/tenwa/app/manage/qiyuesuo/v2/SubjectConstant.java @@ -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 +} diff --git a/src/com/tenwa/app/manage/util/ContractSignActionTwoUtil.java b/src/com/tenwa/app/manage/util/ContractSignActionTwoUtil.java index 4c35a7220..10ed50a85 100644 --- a/src/com/tenwa/app/manage/util/ContractSignActionTwoUtil.java +++ b/src/com/tenwa/app/manage/util/ContractSignActionTwoUtil.java @@ -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 signatories = contract.getSignatories(); diff --git a/src/com/tenwa/channelportal/action/ContractInsuranceSignAction.java b/src/com/tenwa/channelportal/action/ContractInsuranceSignAction.java index afacfc1f9..68db3a755 100644 --- a/src/com/tenwa/channelportal/action/ContractInsuranceSignAction.java +++ b/src/com/tenwa/channelportal/action/ContractInsuranceSignAction.java @@ -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"; } diff --git a/src/com/tenwa/channelportal/action/ContractPlanListSignAction.java b/src/com/tenwa/channelportal/action/ContractPlanListSignAction.java new file mode 100644 index 000000000..4d2b202c6 --- /dev/null +++ b/src/com/tenwa/channelportal/action/ContractPlanListSignAction.java @@ -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"; + } + } +} \ No newline at end of file diff --git a/src/com/tenwa/channelportal/action/ContractSignActionNewUtils.java b/src/com/tenwa/channelportal/action/ContractSignActionNewUtils.java new file mode 100644 index 000000000..aa6074633 --- /dev/null +++ b/src/com/tenwa/channelportal/action/ContractSignActionNewUtils.java @@ -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 fromCondtion = new HashMap(); + Map otherProperty = new HashMap(); + 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>> parameter = new HashMap>>(); + List> companyPar = new LinkedList>(); + // 添加公司公章 + Map param1 = new HashMap(); + param1.put("type", "1");// 1标识当期发起公司公章,2标识当前公司下的子公司 + param1.put("mobile", "12599998888");//子公司添加接收手机号,如果不需要接收,直接填写一个虚拟不存在就行,如果需要传真实手机号 + companyPar.add(param1); + if( "LHZL".equals(operationType) ){ + Map param2 = new HashMap(); + param2.put("type", "2");// 1标识当期发起公司公章,2标识当前公司下的子公司 + param2.put("mobile", "12599998888");//子公司添加接收手机号,如果不需要接收,直接填写一个虚拟不存在就行,如果需要传真实手机号 + companyPar.add(param2); + } + parameter.put("COMPANY", companyPar); + //添加个人基本信息 + List> personPar = new LinkedList>(); + Map sqPar = new HashMap(); + sqPar.put("name",bo.getAttribute("CUSTOMERNAME").toString()); + sqPar.put("type", "sq"); + sqPar.put("mobile",bo.getAttribute("TELEPHONE").toString()); + personPar.add(sqPar); + Map gtPar = new HashMap(); + //获取共同申请人的信息 + 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 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;i0 && mobile.length()>0){ + Map dbPar = new HashMap(); + dbPar.put("name",name); + dbPar.put("type", "db"); + dbPar.put("mobile",mobile); + personPar.add(dbPar); + } + } + parameter.put("PERSONAL", personPar); + ContractSignActionTwoUtil catu = new ContractSignActionTwoUtil(); + //创建合同 + SdkResponse createContract = catu.createContract(parameter, SubjectId,bo.getAttribute("filename").getString()); + Long contractId = createContract.getResult().getId(); + //添加本地生成的合同文件 + String makefullPath = bo.getAttribute("FULLPATH").toString();// 获取生成文件路径 + SdkResponse 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 fromCondtion = new HashMap(); + Map otherProperty = new HashMap(); + 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 fromCondtion = new HashMap(); + Map otherProperty = new HashMap(); + 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; + } + +} diff --git a/src/com/tenwa/channelportal/action/ContractSignActionTwo.java b/src/com/tenwa/channelportal/action/ContractSignActionTwo.java index 366f644d7..1c35274fb 100644 --- a/src/com/tenwa/channelportal/action/ContractSignActionTwo.java +++ b/src/com/tenwa/channelportal/action/ContractSignActionTwo.java @@ -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; diff --git a/src_tenwa/com/tenwa/lease/flow/contract/check/ContractInfoCheck.java b/src_tenwa/com/tenwa/lease/flow/contract/check/ContractInfoCheck.java index 41effacd9..fc39ba94f 100644 --- a/src_tenwa/com/tenwa/lease/flow/contract/check/ContractInfoCheck.java +++ b/src_tenwa/com/tenwa/lease/flow/contract/check/ContractInfoCheck.java @@ -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"; + } }