银联修改

This commit is contained in:
yjf 2021-09-03 10:14:42 +08:00
parent 83ec25fe14
commit ae4ee4bac8
4 changed files with 370 additions and 438 deletions

View File

@ -1,5 +1,36 @@
package com.tenwa.collectaudit.cache;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.amarsoft.app.awe.config.InitCollectConfig;
import com.amarsoft.app.util.StringUtil;
import com.amarsoft.are.jbo.*;
import com.amarsoft.are.util.StringFunction;
import com.amarsoft.awe.util.ASResultSet;
import com.amarsoft.awe.util.SqlObject;
import com.amarsoft.awe.util.Transaction;
import com.gnete.security.crypt.Crypt;
import com.gnete.security.crypt.CryptException;
import com.tenwa.comm.util.date.DateAssistant;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import com.tenwa.lease.app.allinpay.service.impl.AllinpayPaymentDo;
import com.tenwa.quartz.DateUtil;
import jbo.app.tenwa.calc.LC_COLLECT_MANUAL_INFO;
import jbo.app.tenwa.calc.LC_RENT_INCOME;
import jbo.app.tenwa.calc.LC_RENT_PLAN;
import jbo.app.tenwa.customer.CUSTOMER_ACCOUNT;
import jbo.app.tenwa.customer.DISTRIBUTOR_INFO;
import jbo.com.tenwa.entity.comm.flow.D_DEPOSITCHARGE_INFO;
import jbo.com.tenwa.entity.comm.flow.D_DEPOSITRETURN_INFO;
import jbo.com.tenwa.lease.comm.*;
import jbo.sys.CODE_LIBRARY;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import java.io.File;
import java.math.BigDecimal;
import java.sql.SQLException;
@ -10,47 +41,9 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.quartz.JobExecutionContext;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.amarsoft.app.awe.config.InitCollectConfig;
import com.amarsoft.app.util.StringUtil;
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.amarsoft.are.util.StringFunction;
import com.amarsoft.awe.util.ASResultSet;
import com.amarsoft.awe.util.SqlObject;
import com.amarsoft.awe.util.Transaction;
import com.gnete.security.crypt.Crypt;
import com.gnete.security.crypt.CryptException;
import com.tenwa.comm.util.date.DateAssistant;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import com.tenwa.lease.app.allinpay.service.impl.AllinpayPaymentDo;
import com.tenwa.quartz.DateUtil;
import jbo.app.tenwa.calc.LC_COLLECT_MANUAL_INFO;
import jbo.app.tenwa.calc.LC_RENT_INCOME;
import jbo.app.tenwa.calc.LC_RENT_PLAN;
import jbo.app.tenwa.customer.CUSTOMER_ACCOUNT;
import jbo.app.tenwa.customer.DISTRIBUTOR_INFO;
import jbo.com.tenwa.entity.comm.flow.D_DEPOSITCHARGE_INFO;
import jbo.com.tenwa.entity.comm.flow.D_DEPOSITRETURN_INFO;
import jbo.com.tenwa.lease.comm.LB_BUCKLE_LOG;
import jbo.com.tenwa.lease.comm.LB_CLEAR_FILE_RECORD;
import jbo.com.tenwa.lease.comm.LB_INTFACE_FILE_RECORD;
import jbo.com.tenwa.lease.comm.VI_BOND_COMPENSATORY;
import jbo.com.tenwa.lease.comm.VI_LC_AUDIT_RENT_PLAN;
import jbo.loan.VI_RENT_COLLECT;
import jbo.sys.CODE_LIBRARY;
public class CollectAuditInfoCache {
private static Log log = LogFactory.getLog(CollectAuditInfoCache.class);
private String id;
private String fileSavePath = "d:/tmp/als/InterFace";
@ -812,13 +805,12 @@ public class CollectAuditInfoCache {
}
/**
* 批量代收-发送请求
* 批量代收-发送请求(定时任务--银联卡扣)
* @param tx
* @return
* @throws Exception
*/
public String batchCollectManage(JBOTransaction tx) throws Exception{
int i = 0,j = 0;
String[] ids = id.split("@");
StringBuffer parms = new StringBuffer();
for (String str : ids) {
@ -829,10 +821,9 @@ public class CollectAuditInfoCache {
}
}
BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME);
BizObjectManager bc = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME);
//这里对天津与深圳的数据进行拆分
List<BizObject> bolist = bm.createQuery("select distinct O.contract_id,O.plan_date,O.id,ca.ACC_NUMBER,ca.ACCOUNT,ca.BANK_NAME,O.rent from O , jbo.app.tenwa.customer.CUSTOMER_ACCOUNT ca where O.contract_id=ca.contract_id and ca.acc_type = 'Debit' and O.id in ("+parms.toString()+")").getResultList(false);
if (bolist.size() != 0) {
List<BizObject> bolist = bm.createQuery("select distinct O.contract_id,O.plan_date,O.id,ca.ACC_NUMBER,ca.ACCOUNT,ca.BANK_NAME,O.rent from O , jbo.app.tenwa.customer.CUSTOMER_ACCOUNT ca where O.contract_id=ca.contract_id and ca.acc_type = 'Debit' and O.id in (" + parms.toString() + ")").getResultList(false);
if (bolist.size() > 0) {
singleBatchCollectMoeny(tx, bolist);
}
return "系统正在处理中,请稍后";
@ -1008,7 +999,7 @@ public class CollectAuditInfoCache {
}
for (int i = 1; i <= snArray.length; i++) {
log.warn("ShenZhen counteroffer batch_no:"+query_sn+" batch_sn:"+snArray[(i-1)]+" rentid:"+bo.getAttribute("id").toString());
Map<String, String> map = querySingleBatchCollect(tx, bo, query_sn, snArray[(i-1)]);
if(map == null ) {
continue;
@ -1337,7 +1328,7 @@ public class CollectAuditInfoCache {
return strbuff;
}
/**
* 批量代收-发送请求
* 批量代收-发送请求(报文组装,调用银联100001接口,更新租金计划batch_status状态)
* @param tx
* @param bc
* @param bo
@ -1352,37 +1343,46 @@ public class CollectAuditInfoCache {
String currentYear = currentDateTime.substring(0,4);
String month = currentDateTime.substring(5,7);
String day = currentDateTime.substring(8,10);
String merchantNumber = InitCollectConfig.MERCHANTID;
String flag = InitCollectConfig.FLAG;
String version = InitCollectConfig.C_VERSION;
String merchantNumber = InitCollectConfig.MERCHANTID;//银联商户号
String flag = InitCollectConfig.FLAG;//银联接口--代收标识
String version = InitCollectConfig.C_VERSION;//接口版本号
String date = currentYear+month+day;//提交日期
String batch_title = "";
int i = 0,j = 0;
//创建文件路径
String rootDir = this.fileSavePath;
File file = new File(rootDir + File.separator + currentYear
+ File.separator + month + File.separator
//创建卡扣文件路径
File file = new File( this.fileSavePath+ File.separator + currentYear + File.separator + month + File.separator
+ day);
System.out.println(file.getAbsolutePath());
if(!file.exists()){//目录不存在则直接创建
file.mkdirs();
}
String req_sn = System.currentTimeMillis()+"";//当日批次号
batch_title = merchantNumber+"_"+flag+version+date+"_"+req_sn;
//目录不存在则直接创建
if(!file.exists()) file.mkdirs();
String req_sn = System.currentTimeMillis()+"";//卡扣批次号 REQ_SN
//卡扣文件名称
String batch_title = merchantNumber+"_"+flag+version+date+"_"+req_sn;
//卡扣报文
StringBuffer strbuff = collectBatch(req_sn,list);
//响应报文
String strResp = cp.CollectAuditPayReq(strbuff,file.getAbsolutePath(), batch_title);
for (BizObject bo : list) {
//生成存盘回盘文件
savaFile(tx, strResp,batch_title,bo);
//接口调用,返回响应报文
String strResp = "";
try {
strResp = cp.CollectAuditPayReq(strbuff,file.getAbsolutePath(), batch_title);
}catch (Exception e){
JBOTransaction jboTransaction = null;
try {
String rentIds = getRentIds(list);
jboTransaction = JBOFactory.createJBOTransaction();
Transaction.createTransaction(jboTransaction).executeSQL("update lc_rent_plan set batch_sn=null where id in ('" + rentIds + "')");
jboTransaction.commit();
}catch (Exception e1){
if (jboTransaction != null) jboTransaction.rollback();
e1.printStackTrace();
}
throw new RuntimeException("深圳银联接口调用异常:", e);
}
//生成存盘回盘文件(批量卡扣,日志表LB_INTFACE_FILE_RECORD.RELA_ID 存储卡扣批次号)
BizObject bo = new BizObject("jbo.app.tenwa.calc.LC_RENT_PLAN");
bo.setAttributeValue("id",req_sn);
savaFile(tx, strResp,batch_title,bo);
//解析银联响应报文
Map<String, String> map = getRetAndCodeByBatch(strResp);
if (map.containsKey("RET_CODE")) {//清空批量代收状态
StringBuilder updateIds = new StringBuilder();
for (BizObject biz : list) {
updateIds.append(biz.getAttribute("id").toString()).append("','");
}
String updateIdsStr = updateIds.delete(updateIds.length() - 3, updateIds.length()).toString();
String updateIdsStr = getRentIds(list);
//清空批量处理状态
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME);
bm.createQuery("update O set O.BATCH_STATUS=null,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=null where O.id in ('" + updateIdsStr + "')")
@ -1398,31 +1398,37 @@ public class CollectAuditInfoCache {
JBOTransaction trans = null;
try {
trans = JBOFactory.createJBOTransaction();
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME, trans);
BizObject bo0 = bm.createQuery("O.BATCH_NO=:BATCH_NO and O.BATCH_SN like '%" + map.get("SN" + k) + "%'").setParameter("BATCH_NO", map.get("REQ_SN")).getSingleResult(true);
if (bo0 != null && "process".equals(bo0.getAttribute("BATCH_STATUS").getString())) {
continue;
}
//响应成功
if (map.containsKey("REQ_SN") && map.containsKey("RET_CODE" + k) && "0000".equals(map.get("RET_CODE" + k))) {
bo0.setAttributeValue("BATCH_STATUS", "process");
} else {//响应异常
bo0.setAttributeValue("BATCH_STATUS", null);
bo0.setAttributeValue("BATCH_NO", null);
bo0.setAttributeValue("BATCH_SN", null);
}
bm.saveObject(bo0);
Transaction sqlCa = Transaction.createTransaction(trans);
SqlObject sqlObject = new SqlObject("update lc_rent_plan lrp join lb_union_middle lum on lrp.id = lum.rent_id set lrp.batch_status = 'process' " +
" where lum.batch_no =:batchNo and lum.batch_sn =:batchSn")
.setParameter("batchNo",map.get("REQ_SN")).setParameter("batchSn", map.get("SN" + k));
sqlCa.executeSQL(sqlObject);
} catch (Exception e) {
e.printStackTrace();
log.error("ShenZhenBuckle process status update exception ",e);
if (trans != null) trans.rollback();
} finally {
log.warn("ShenZhenBuckle process status update -- batch_no:"+map.get("REQ_SN")+" batch_sn:"+map.get("SN" + k));
if (trans != null) trans.commit();
}
}
}
return map;
}
/**
* 获取租金计划ids
* @param list
* @return
* @throws JBOException
*/
private String getRentIds(List<BizObject> list) throws JBOException {
StringBuilder updateIds = new StringBuilder();
for (BizObject biz : list) {
updateIds.append(biz.getAttribute("id").toString()).append("','");
}
return updateIds.delete(updateIds.length() - 3, updateIds.length()).toString();
}
/**
* 批量代收--报文拼接
* @param rent
@ -1434,7 +1440,6 @@ public class CollectAuditInfoCache {
*/
public StringBuffer collectBatch(String req_sn,List<BizObject> list) throws JBOException{
//拼接XML报文
//String req = System.currentTimeMillis()+"";
StringBuffer strbuff = new StringBuffer();
strbuff.append("<?xml version=\"1.0\" encoding=\"GBK\"?>");
strbuff.append("<GZELINK>");
@ -1452,32 +1457,32 @@ public class CollectAuditInfoCache {
strbuff.append("</INFO>");
strbuff.append("<BODY>");
strbuff.append("<TRANS_SUM>");
BigDecimal mutly = new BigDecimal("0");
BigDecimal mutly = new BigDecimal("0");//卡扣总金额
int i = 0;
//查询银行限额 itemname<银行名称> itemdescribe<限额设置>
List<BizObject> codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'bankType' and O.itemdescribe is not null ").getResultList(false);
//计算卡扣总金额,卡扣总数量
for (BizObject bo : list) {
String single = bo.getAttribute("rent").toString();
BigDecimal m = new BigDecimal(single);
mutly = mutly.add(m);
String bank_name = bo.getAttribute("BANK_NAME").toString();
List<BizObject> codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'bankType' and O.itemdescribe is not null ").getResultList(false);
//数据字典中的itemdescribe字段代表银行单笔限
double itemdescribe = 0;
BigDecimal itemdescribe = new BigDecimal("0");
boolean flag = false;
for (BizObject code : codelist) {
String itemnameTmp = code.getAttribute("itemname").toString().trim();
double itemdescribeTmp = code.getAttribute("itemdescribe").getDouble();
String itemdescribeTmp1 = code.getAttribute("itemdescribe").toString();
if (bank_name.indexOf(itemnameTmp) != -1 && itemdescribeTmp1 != null && !"".equals(itemdescribeTmp1)) {
itemdescribe = new BigDecimal(itemdescribeTmp).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
itemdescribe = new BigDecimal(itemdescribeTmp1).setScale(2, BigDecimal.ROUND_HALF_UP);
flag = true;
break;
}
}
if (flag == true && Double.parseDouble(bo.getAttribute("rent").toString()) > itemdescribe) {
if (flag == true && m.compareTo(itemdescribe) == 1) {
BigDecimal mi = new BigDecimal(bo.getAttribute("rent").toString());
int singlerent = mi.multiply(new BigDecimal(100)).intValue();
int singleitem = new BigDecimal(itemdescribe).multiply(new BigDecimal(100)).intValue();
int singleitem = itemdescribe.multiply(new BigDecimal(100)).intValue();
int k = (int) Math.floor(singlerent/singleitem);
int l = (int) Math.ceil(singlerent%singleitem);
for (int j = 0; j < k; j++) {
@ -1489,8 +1494,8 @@ public class CollectAuditInfoCache {
}else{
i++;
}
}
String totalSum = String.valueOf(mutly.multiply(new BigDecimal(100)).longValue());
String totalItem = String.valueOf(i);
Trans_Sum trans_sum = new Trans_Sum();
@ -1510,27 +1515,23 @@ public class CollectAuditInfoCache {
String account = biz.getAttribute("account").toString();
String bank_name = biz.getAttribute("BANK_NAME").toString();
String planId = biz.getAttribute("id").toString();
List<BizObject> codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'bankType' and O.itemdescribe is not null ").getResultList(false);
double itemdescribe = 0;
BigDecimal itemdescribe = new BigDecimal("0");
boolean flag = false;
for (BizObject code : codelist) {
String itemnameTmp = code.getAttribute("itemname").toString().trim();
double itemdescribeTmp = code.getAttribute("itemdescribe").getDouble();
String itemdescribeTmp1 = code.getAttribute("itemdescribe").toString();
if (bank_name.indexOf(itemnameTmp) != -1 && itemdescribeTmp1 != null && !"".equals(itemdescribeTmp1)) {
itemdescribe = new BigDecimal(itemdescribeTmp).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
itemdescribe = new BigDecimal(itemdescribeTmp1).setScale(2, BigDecimal.ROUND_HALF_UP);
flag = true;
break;
}
}
if (flag == true && Double.parseDouble(biz.getAttribute("rent").toString()) > itemdescribe) {
if (flag == true && m.compareTo(itemdescribe) == 1) {
BigDecimal mi = new BigDecimal(biz.getAttribute("rent").toString());
int singlerent = mi.multiply(new BigDecimal(100)).intValue();
int singleitem = new BigDecimal(itemdescribe).multiply(new BigDecimal(100)).intValue();
int singleitem = itemdescribe.multiply(new BigDecimal(100)).intValue();
int k = (int) Math.floor(singlerent/singleitem);
int l = (int) Math.ceil(singlerent%singleitem);
for (int k2 = 1; k2 <= k; k2++) {
Trans_Detail trans_detail = new Trans_Detail();
String sn = "";
@ -1541,48 +1542,7 @@ public class CollectAuditInfoCache {
}else{
sn = "0000"+ (++item);
}
//追加批量处理状态
JBOTransaction trans = JBOFactory.createJBOTransaction();
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME);
BizObject bo = bm.createQuery("O.id=:id").setParameter("id", planId).getSingleResult(false);
String itemsn0 = "";
if (bo !=null) {
String itemsn = bo.getAttribute("batch_sn").toString();
if (itemsn.length() == 0) {
itemsn0 += sn;
}else{
itemsn0 += itemsn+","+sn;
}
}
bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id")
.setParameter("BATCH_STATUS", "")//处理状态-为空
.setParameter("BATCH_NO", req_sn)
.setParameter("BATCH_SN", itemsn0)
.setParameter("id", planId).executeUpdate();
//手动的添加到手动表
if("manual".equals(collectStyle)){
JBOTransaction transj = JBOFactory.createJBOTransaction();
BizObjectManager bmlcmi = JBOFactory.getFactory().getManager(LC_COLLECT_MANUAL_INFO.CLASS_NAME,transj);
if(k2==1){
BizObject bolmci = bmlcmi.newObject();
bolmci.setAttributeValue("contract_id",biz.getAttribute("contract_id").toString());
bolmci.setAttributeValue("plan_id",planId);
bolmci.setAttributeValue("BATCH_NO",req_sn);
bolmci.setAttributeValue("BATCH_SN",itemsn0);
bolmci.setAttributeValue("money",biz.getAttribute("rent").toString());
bolmci.setAttributeValue("hire_date",DateUtil.getSystemTimeByFormat("yyyy/MM/dd"));
bmlcmi.saveObject(bolmci);
transj.commit();
}else{
bmlcmi.createQuery("update O set O.BATCH_SN=:BATCH_SN where O.plan_id=:id and O.BATCH_NO=:BATCH_NO")
.setParameter("BATCH_SN", itemsn0)
.setParameter("BATCH_NO", req_sn)
.setParameter("id", planId).executeUpdate();
transj.commit();
}
}
trans.commit();
rentPlanHandle(planId,req_sn,sn,biz,k2,String.valueOf(singleitem));//追加批量处理状态
trans_detail.setSN(sn);
trans_detail.setACCOUNT_TYPE("");
trans_detail.setACCOUNT_NO(acc_number);
@ -1594,8 +1554,7 @@ public class CollectAuditInfoCache {
strbuff.append(EntityTransform.toXmlByBatchCollect(trans_detail));
}
if (l != 0) {
String surprent = String.format("%.2f", biz.getAttribute("rent").getDouble() - k*itemdescribe);
BigDecimal mj = new BigDecimal(surprent);
BigDecimal mj = mi.subtract(itemdescribe.multiply(new BigDecimal(k))).setScale(2, BigDecimal.ROUND_HALF_UP);
String singlerent0 = String.valueOf(mj.multiply(new BigDecimal(100)).longValue());
Trans_Detail trans_detail = new Trans_Detail();
String sn = "";
@ -1606,35 +1565,7 @@ public class CollectAuditInfoCache {
}else{
sn = "0000"+ (++item);
}
//追加批量处理状态
JBOTransaction trans = JBOFactory.createJBOTransaction();
BizObjectManager bmlcmi = JBOFactory.getFactory().getManager(LC_COLLECT_MANUAL_INFO.CLASS_NAME,trans);
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans);
BizObject bo = bm.createQuery("O.id=:id").setParameter("id", planId).getSingleResult(false);
String itemsn0 = "";
if (bo !=null) {
String itemsn = bo.getAttribute("batch_sn").toString();
if (itemsn.length() == 0) {
itemsn0 += sn;
}else{
itemsn0 += itemsn+","+sn;
}
}
bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id")
.setParameter("BATCH_STATUS", "")//处理状态-为空
.setParameter("BATCH_NO", req_sn)
.setParameter("BATCH_SN", itemsn0)
.setParameter("id", planId).executeUpdate();
//添加到手动表
if("manual".equals(collectStyle)){
JBOTransaction transj = JBOFactory.createJBOTransaction();
bmlcmi.createQuery("update O set O.BATCH_SN=:BATCH_SN where O.plan_id=:id and O.BATCH_NO=:BATCH_NO")
.setParameter("BATCH_SN", itemsn0)
.setParameter("BATCH_NO", req_sn)
.setParameter("id", planId).executeUpdate();
transj.commit();
}
trans.commit();
rentPlanHandle(planId,req_sn,sn,biz,99,singlerent0);//追加批量处理状态
trans_detail.setSN(sn);
trans_detail.setACCOUNT_TYPE("");
trans_detail.setACCOUNT_NO(acc_number);
@ -1656,27 +1587,7 @@ public class CollectAuditInfoCache {
}else{
sn = "0000"+ (++item);
}
//追加批量处理状态
JBOTransaction trans = JBOFactory.createJBOTransaction();
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans);
bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id")
.setParameter("BATCH_STATUS", "")//处理状态-为空
.setParameter("BATCH_NO", req_sn)
.setParameter("BATCH_SN", sn)
.setParameter("id", planId).executeUpdate();
//手动的添加到手动表
if("manual".equals(collectStyle)){
BizObjectManager bmlcmi = JBOFactory.getFactory().getManager(LC_COLLECT_MANUAL_INFO.CLASS_NAME,trans);
BizObject bolmci = bmlcmi.newObject();
bolmci.setAttributeValue("contract_id",biz.getAttribute("contract_id").toString());
bolmci.setAttributeValue("plan_id",planId);
bolmci.setAttributeValue("BATCH_NO",req_sn);
bolmci.setAttributeValue("BATCH_SN",sn);
bolmci.setAttributeValue("money",biz.getAttribute("rent").toString());
bolmci.setAttributeValue("hire_date",DateUtil.getSystemTimeByFormat("yyyy/MM/dd"));
bmlcmi.saveObject(bolmci);
}
trans.commit();
rentPlanHandle(planId,req_sn,sn,biz,1,rent);//追加批量处理状态
trans_detail.setSN(sn);
trans_detail.setACCOUNT_TYPE("");
trans_detail.setACCOUNT_NO(acc_number);
@ -1693,9 +1604,72 @@ public class CollectAuditInfoCache {
strbuff.append("</BODY>");
strbuff.append("</GZELINK>");
collectStyle=null;
return strbuff;
}
/**
* 更新租金计划表 batch_no batch_sn ,手工卡扣的添加手工卡扣记录
* @param planId 租金计划id
* @param req_sn 批次号
* @param sn 序号
* @param biz
* @param k2 k2==1 手工卡扣插入新数据,其余更新手工卡扣表数据
* @throws Exception
*/
private void rentPlanHandle(String planId,String req_sn,String sn,BizObject biz,int k2,String amount) throws JBOException{
//追加批量处理状态
JBOTransaction trans = null;
try{
trans = JBOFactory.createJBOTransaction();
Transaction transaction = Transaction.createTransaction(trans);
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME);
BizObject bo = bm.createQuery("O.id=:id").setParameter("id", planId).getSingleResult(false);
String itemsn0 = "";
if (bo !=null) {
String itemsn = bo.getAttribute("batch_sn").toString();
if (itemsn.length() == 0) {
itemsn0 += sn;
}else{
itemsn0 += itemsn+","+sn;
}
}
//更新租金批次号 序号
bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id")
.setParameter("BATCH_STATUS", "")//处理状态-为空
.setParameter("BATCH_NO", req_sn)
.setParameter("BATCH_SN", itemsn0)
.setParameter("id", planId).executeUpdate();
//记录中间表 lb_union_middle
SqlObject sqlObject = new SqlObject("insert into lb_union_middle (id,batch_no,batch_sn,rent_id,amount,input_time) values (replace(uuid(),'-',''),:batchNo,:batchSn,:rentId,:amount,SYSDATE()) ")
.setParameter("batchNo", req_sn).setParameter("batchSn", sn)
.setParameter("rentId", planId).setParameter("amount",amount);
transaction.executeSQL(sqlObject);
//手动卡扣添加到手动表
if("manual".equals(collectStyle)){
BizObjectManager bmlcmi = JBOFactory.getFactory().getManager(LC_COLLECT_MANUAL_INFO.CLASS_NAME,trans);
if(k2==1){
BizObject bolmci = bmlcmi.newObject();
bolmci.setAttributeValue("contract_id",biz.getAttribute("contract_id").toString());
bolmci.setAttributeValue("plan_id",planId);
bolmci.setAttributeValue("BATCH_NO",req_sn);
bolmci.setAttributeValue("BATCH_SN",itemsn0);
bolmci.setAttributeValue("money",biz.getAttribute("rent").toString());
bolmci.setAttributeValue("hire_date",DateUtil.getSystemTimeByFormat("yyyy/MM/dd"));
bmlcmi.saveObject(bolmci);
}else{
bmlcmi.createQuery("update O set O.BATCH_SN=:BATCH_SN where O.plan_id=:id and O.BATCH_NO=:BATCH_NO")
.setParameter("BATCH_SN", itemsn0)
.setParameter("BATCH_NO", req_sn)
.setParameter("id", planId).executeUpdate();
}
}
trans.commit();
}catch (Exception e){
if (trans != null) trans.rollback();
throw new JBOException(e.getMessage());
}
}
/**
* 保存存盘回盘文件
@ -1712,13 +1686,9 @@ public class CollectAuditInfoCache {
String day = currentDateTime.substring(8,10);
//创建文件路径
String rootDir = this.fileSavePath;
File file = new File(rootDir + File.separator + currentYear
+ File.separator + month + File.separator
+ day);
System.out.println(file.getAbsolutePath());
if(!file.exists()){//目录不存在则直接创建
file.mkdirs();
}
File file = new File(rootDir + File.separator + currentYear + File.separator + month + File.separator + day);
//目录不存在则直接创建
if(!file.exists())file.mkdirs();
//保存存盘文件
BizObjectManager bm = JBOFactory.getFactory().getManager(LB_INTFACE_FILE_RECORD.CLASS_NAME);
BizObject send = bm.newObject();
@ -1731,9 +1701,9 @@ public class CollectAuditInfoCache {
send.setAttributeValue("inputorgid", this.inputorgid);
send.setAttributeValue("inputtime", currentDateTime);
bm.saveObject(send);
//筛选响应信息
Map<String, String> map = getRetAndCode(strResp);
//getMsgAndCode(strResp);
//保存回盘文件
BizObject reply = bm.newObject();
@ -1795,7 +1765,6 @@ public class CollectAuditInfoCache {
public Map<String, String> getRetAndCodeByBatch(String strXML){
Map<String, String> map = new HashMap<String, String>();
Map<String, String> res = new HashMap<String, String>();
System.out.println(1);
int iStart = strXML.indexOf("<ERR_MSG>");
if (iStart != -1) {
int end = strXML.indexOf("</ERR_MSG>");

View File

@ -1,5 +1,34 @@
package com.tenwa.collectaudit.cache;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.amarsoft.app.awe.config.InitCollectConfigTj;
import com.amarsoft.are.jbo.*;
import com.amarsoft.are.util.StringFunction;
import com.amarsoft.awe.util.ASResultSet;
import com.amarsoft.awe.util.SqlObject;
import com.amarsoft.awe.util.Transaction;
import com.gnete.security.crypt.CryptException;
import com.tenwa.comm.util.date.DateAssistant;
import com.tenwa.lease.app.allinpay.service.impl.AllinpayPaymentDo;
import com.tenwa.quartz.DateUtil;
import jbo.app.tenwa.calc.LC_COLLECT_MANUAL_INFO;
import jbo.app.tenwa.calc.LC_RENT_INCOME;
import jbo.app.tenwa.calc.LC_RENT_PLAN;
import jbo.app.tenwa.customer.DISTRIBUTOR_INFO;
import jbo.com.tenwa.entity.comm.flow.D_DEPOSITCHARGE_INFO;
import jbo.com.tenwa.entity.comm.flow.D_DEPOSITRETURN_INFO;
import jbo.com.tenwa.lease.comm.LB_BUCKLE_LOG;
import jbo.com.tenwa.lease.comm.LB_INTFACE_FILE_RECORD;
import jbo.com.tenwa.lease.comm.VI_LC_AUDIT_RENT_PLAN;
import jbo.sys.CODE_LIBRARY;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import java.io.File;
import java.math.BigDecimal;
import java.sql.SQLException;
@ -10,46 +39,10 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.quartz.JobExecutionContext;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.amarsoft.app.awe.config.InitCollectConfigTj;
import com.amarsoft.app.util.StringUtil;
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.amarsoft.are.util.StringFunction;
import com.amarsoft.awe.util.ASResultSet;
import com.amarsoft.awe.util.SqlObject;
import com.amarsoft.awe.util.Transaction;
import com.gnete.security.crypt.Crypt;
import com.gnete.security.crypt.CryptException;
import com.tenwa.comm.util.date.DateAssistant;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import com.tenwa.lease.app.allinpay.service.impl.AllinpayPaymentDo;
import com.tenwa.quartz.DateUtil;
import jbo.app.tenwa.calc.LC_COLLECT_MANUAL_INFO;
import jbo.app.tenwa.calc.LC_RENT_INCOME;
import jbo.app.tenwa.calc.LC_RENT_PLAN;
import jbo.app.tenwa.customer.CUSTOMER_ACCOUNT;
import jbo.app.tenwa.customer.DISTRIBUTOR_INFO;
import jbo.com.tenwa.entity.comm.flow.D_DEPOSITCHARGE_INFO;
import jbo.com.tenwa.entity.comm.flow.D_DEPOSITRETURN_INFO;
import jbo.com.tenwa.lease.comm.LB_BUCKLE_LOG;
import jbo.com.tenwa.lease.comm.LB_CLEAR_FILE_RECORD;
import jbo.com.tenwa.lease.comm.LB_INTFACE_FILE_RECORD;
import jbo.com.tenwa.lease.comm.VI_LC_AUDIT_RENT_PLAN;
import jbo.sys.CODE_LIBRARY;
public class CollectAuditInfoCacheTj {
private static Log log = LogFactory.getLog(CollectAuditInfoCacheTj.class);
private String id;
private String fileSavePath = "d:/tmp/als/InterFace";
private String inputuserid;
@ -1006,7 +999,7 @@ public class CollectAuditInfoCacheTj {
}
for (int i = 1; i <= snArray.length; i++) {
log.warn("TianJin counteroffer batch_no:"+query_sn+" batch_sn:"+snArray[(i-1)]+" rentid:"+bo.getAttribute("id").toString());
Map<String, String> map = querySingleBatchCollect(tx, bo, query_sn, snArray[(i-1)]);
if(map == null ) {
continue;
@ -1350,39 +1343,45 @@ public class CollectAuditInfoCacheTj {
String currentYear = currentDateTime.substring(0,4);
String month = currentDateTime.substring(5,7);
String day = currentDateTime.substring(8,10);
String merchantNumber = InitCollectConfigTj.MERCHANTID;
String flag = InitCollectConfigTj.FLAG;
String version = InitCollectConfigTj.C_VERSION;
String merchantNumber = InitCollectConfigTj.MERCHANTID;//银联商户号
String flag = InitCollectConfigTj.FLAG;//银联接口--代收标识
String version = InitCollectConfigTj.C_VERSION;//接口版本号
String date = currentYear+month+day;//提交日期
String batch_title = "";
int i = 0,j = 0;
//创建文件路径
String rootDir = this.fileSavePath;
File file = new File(rootDir + File.separator + currentYear
+ File.separator + month + File.separator
+ day);
System.out.println(file.getAbsolutePath());
if(!file.exists()){//目录不存在则直接创建
file.mkdirs();
}
String req_sn = System.currentTimeMillis()+"";//当日批次号
batch_title = merchantNumber+"_"+flag+version+date+"_"+req_sn;
//请求报文(限额处理)
File file = new File(this.fileSavePath + File.separator + currentYear + File.separator + month + File.separator + day);
//目录不存在则直接创建
if (!file.exists()) file.mkdirs();
String req_sn = System.currentTimeMillis()+""; //卡扣批次号 REQ_SN
//卡扣文件名称
String batch_title = merchantNumber+"_"+flag+version+date+"_"+req_sn;
//卡扣报文
StringBuffer strbuff = collectBatch(req_sn,list);
//响应报文
String strResp = cp.CollectAuditPayReq(strbuff,file.getAbsolutePath(), batch_title);
for (BizObject bo : list) {
//生成存盘回盘文件
savaFile(tx, strResp,batch_title,bo);
//接口调用,返回响应报文
String strResp = "";
try {
strResp = cp.CollectAuditPayReq(strbuff,file.getAbsolutePath(), batch_title);
}catch (Exception e){
JBOTransaction jboTransaction = null;
try {
String rentIds = getRentIds(list);
jboTransaction = JBOFactory.createJBOTransaction();
Transaction.createTransaction(jboTransaction).executeSQL("update lc_rent_plan set batch_sn=null where id in ('" + rentIds + "')");
jboTransaction.commit();
}catch (Exception e1){
if (jboTransaction != null) jboTransaction.rollback();
e1.printStackTrace();
}
throw new RuntimeException("天津银联接口调用异常:", e);
}
//生成存盘回盘文件(批量卡扣,日志表LB_INTFACE_FILE_RECORD.RELA_ID 存储卡扣批次号)
BizObject bo = new BizObject("jbo.app.tenwa.calc.LC_RENT_PLAN");
bo.setAttributeValue("id",req_sn);
savaFile(tx, strResp,batch_title,bo);
//解析银联响应报文
Map<String, String> map = getRetAndCodeByBatch(strResp);
//包含RET_CODE说明响应没有成功
if (map.containsKey("RET_CODE")) {//清空批量代收状态
StringBuilder updateIds = new StringBuilder();
for (BizObject biz : list) {
updateIds.append(biz.getAttribute("id").toString()).append("','");
}
String updateIdsStr = updateIds.delete(updateIds.length() - 3, updateIds.length()).toString();
String updateIdsStr = getRentIds(list);
//清空批量处理状态
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME);
bm.createQuery("update O set O.BATCH_STATUS=null,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=null where O.id in ('" + updateIdsStr + "')")
@ -1395,34 +1394,40 @@ public class CollectAuditInfoCacheTj {
m++;
}
}
for (int k = 1; k <= m; k++) {
JBOTransaction trans = null;
try {
trans = JBOFactory.createJBOTransaction();
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME, trans);
BizObject bo0 = bm.createQuery("O.BATCH_NO=:BATCH_NO and O.BATCH_SN like '%" + map.get("SN" + k) + "%'").setParameter("BATCH_NO", map.get("REQ_SN")).getSingleResult(true);
if (bo0 != null && "process".equals(bo0.getAttribute("BATCH_STATUS").getString())) {
continue;
}
//响应成功
if (map.containsKey("REQ_SN") && map.containsKey("RET_CODE" + k) && "0000".equals(map.get("RET_CODE" + k))) {
bo0.setAttributeValue("BATCH_STATUS", "process");
} else {//响应异常
bo0.setAttributeValue("BATCH_STATUS", null);
bo0.setAttributeValue("BATCH_NO", null);
bo0.setAttributeValue("BATCH_SN", null);
}
bm.saveObject(bo0);
} catch (Exception e) {
e.printStackTrace();
if (trans != null) trans.rollback();
} finally {
if (trans != null) trans.commit();
}
}
for (int k = 1; k <= m; k++) {
JBOTransaction trans = null;
try {
trans = JBOFactory.createJBOTransaction();
Transaction sqlCa = Transaction.createTransaction(trans);
SqlObject sqlObject = new SqlObject("update lc_rent_plan lrp join lb_union_middle lum on lrp.id = lum.rent_id set lrp.batch_status = 'process' " +
" where lum.batch_no =:batchNo and lum.batch_sn =:batchSn")
.setParameter("batchNo", map.get("REQ_SN")).setParameter("batchSn", map.get("SN" + k));
sqlCa.executeSQL(sqlObject);
} catch (Exception e) {
log.error("TianjinBuckle process status update exception ", e);
if (trans != null) trans.rollback();
} finally {
log.warn("TianjinBuckle process status update -- batch_no:" + map.get("REQ_SN") + " batch_sn:" + map.get("SN" + k));
if (trans != null) trans.commit();
}
}
}
return map;
}
/**
* 获取租金计划ids
* @param list
* @return
* @throws JBOException
*/
private String getRentIds(List<BizObject> list) throws JBOException {
StringBuilder updateIds = new StringBuilder();
for (BizObject biz : list) {
updateIds.append(biz.getAttribute("id").toString()).append("','");
}
return updateIds.delete(updateIds.length() - 3, updateIds.length()).toString();
}
/**
* 批量代收--报文拼接
@ -1435,7 +1440,6 @@ public class CollectAuditInfoCacheTj {
*/
public StringBuffer collectBatch(String req_sn,List<BizObject> list) throws JBOException{
//拼接XML报文
//String req = System.currentTimeMillis()+"";
StringBuffer strbuff = new StringBuffer();
strbuff.append("<?xml version=\"1.0\" encoding=\"GBK\"?>");
strbuff.append("<GZELINK>");
@ -1453,17 +1457,17 @@ public class CollectAuditInfoCacheTj {
strbuff.append("</INFO>");
strbuff.append("<BODY>");
strbuff.append("<TRANS_SUM>");
//总金额
BigDecimal mutly = new BigDecimal("0");
//总条数
int i = 0;
BigDecimal mutly = new BigDecimal("0");//卡扣总金额
int i = 0;//总条数
//查询银行限额 itemname<银行名称> itemdescribe<限额设置>
List<BizObject> codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'TjbankType' and O.itemdescribe is not null ").getResultList(false);
//计算卡扣总金额,卡扣总数量
for (BizObject bo : list) {
String single_s = bo.getAttribute("rent").toString();
BigDecimal m_s = new BigDecimal(single_s);
mutly = mutly.add(m_s);
String bank_name = bo.getAttribute("BANK_NAME").toString();
List<BizObject> codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'TjbankType' and O.itemdescribe is not null ").getResultList(false);
//数据字典中的itemdescribe字段代表银行单笔限
//数据字典中的itemdescribe字段代表银行单笔限
BigDecimal itemdescribe = new BigDecimal("0");
boolean flag = false;
for (BizObject code : codelist) {
@ -1475,9 +1479,8 @@ public class CollectAuditInfoCacheTj {
break;
}
}
if (flag == true && m_s.compareTo(itemdescribe)==1) {
BigDecimal mi_s = m_s;
int singlerent = mi_s.multiply(new BigDecimal(100)).intValue();
if (flag == true && m_s.compareTo(itemdescribe) == 1) {
int singlerent = m_s.multiply(new BigDecimal(100)).intValue();
int singleitem = itemdescribe.multiply(new BigDecimal(100)).intValue();
int k = singlerent/singleitem;
int l = singlerent%singleitem;
@ -1490,7 +1493,6 @@ public class CollectAuditInfoCacheTj {
}else{
i++;
}
}
String totalSum = String.valueOf(mutly.multiply(new BigDecimal(100)).longValue());
String totalItem = String.valueOf(i);
@ -1511,7 +1513,6 @@ public class CollectAuditInfoCacheTj {
String account = biz.getAttribute("account").toString();
String bank_name = biz.getAttribute("BANK_NAME").toString();
String planId = biz.getAttribute("id").toString();
List<BizObject> codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'TjbankType' and O.itemdescribe is not null ").getResultList(false);
BigDecimal itemdescribe = new BigDecimal("0");
boolean flag = false;
for (BizObject code : codelist) {
@ -1524,8 +1525,7 @@ public class CollectAuditInfoCacheTj {
}
}
if (flag == true && m.compareTo(itemdescribe)==1) {
BigDecimal mi = m;
int singlerent = mi.multiply(new BigDecimal(100)).intValue();
int singlerent = m.multiply(new BigDecimal(100)).intValue();
int singleitem = itemdescribe.multiply(new BigDecimal(100)).intValue();
int k = singlerent/singleitem;
int l = singlerent%singleitem;
@ -1543,48 +1543,7 @@ public class CollectAuditInfoCacheTj {
}else{
sn = "" + (++item);
}
//追加批量处理状态
JBOTransaction trans = JBOFactory.createJBOTransaction();
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans);
BizObject bo = bm.createQuery("O.id=:id").setParameter("id", biz.getAttribute("id").toString()).getSingleResult(false);
String itemsn0 = "";
if (bo !=null) {
String itemsn = bo.getAttribute("batch_sn").toString();
if (itemsn.length() == 0) {
itemsn0 += sn;
}else{
itemsn0 += itemsn+","+sn;
}
}
bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id")
.setParameter("BATCH_STATUS", "")//处理状态-为空
.setParameter("BATCH_NO", req_sn)
.setParameter("BATCH_SN", itemsn0)
.setParameter("id", biz.getAttribute("id").toString()).executeUpdate();
//手动的添加到手动表
if("manual".equals(collectStyle)){
JBOTransaction transj = JBOFactory.createJBOTransaction();
BizObjectManager bmlcmi = JBOFactory.getFactory().getManager(LC_COLLECT_MANUAL_INFO.CLASS_NAME,transj);
if(k2==1){
BizObject bolmci = bmlcmi.newObject();
bolmci.setAttributeValue("contract_id",biz.getAttribute("contract_id").toString());
bolmci.setAttributeValue("plan_id",planId);
bolmci.setAttributeValue("BATCH_NO",req_sn);
bolmci.setAttributeValue("BATCH_SN",itemsn0);
bolmci.setAttributeValue("money",biz.getAttribute("rent").toString());
bolmci.setAttributeValue("hire_date",DateUtil.getSystemTimeByFormat("yyyy/MM/dd"));
bmlcmi.saveObject(bolmci);
transj.commit();
}else{
bmlcmi.createQuery("update O set O.BATCH_SN=:BATCH_SN where O.plan_id=:id and O.BATCH_NO=:BATCH_NO")
.setParameter("BATCH_SN", itemsn0)
.setParameter("BATCH_NO", req_sn)
.setParameter("id", planId).executeUpdate();
transj.commit();
}
}
trans.commit();
rentPlanHandle(planId,req_sn,sn,biz,k2,String.valueOf(singleitem));//追加批量处理状态
trans_detail.setSN(sn);
trans_detail.setACCOUNT_TYPE("");
trans_detail.setACCOUNT_NO(acc_number);
@ -1596,7 +1555,7 @@ public class CollectAuditInfoCacheTj {
strbuff.append(EntityTransform.toXmlByBatchCollect(trans_detail));
}
if (l != 0) {
BigDecimal mj = mi.subtract(itemdescribe.multiply(new BigDecimal(k))).setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal mj = m.subtract(itemdescribe.multiply(new BigDecimal(k))).setScale(2, BigDecimal.ROUND_HALF_UP);
String singlerent0 = String.valueOf(mj.multiply(new BigDecimal(100)).longValue());
Trans_Detail trans_detail = new Trans_Detail();
String sn = "";
@ -1611,35 +1570,7 @@ public class CollectAuditInfoCacheTj {
}else{
sn = "" + (++item);
}
//追加批量处理状态
JBOTransaction trans = JBOFactory.createJBOTransaction();
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans);
BizObject bo = bm.createQuery("O.id=:id").setParameter("id", biz.getAttribute("id").toString()).getSingleResult(false);
String itemsn0 = "";
if (bo !=null) {
String itemsn = bo.getAttribute("batch_sn").toString();
if (itemsn.length() == 0) {
itemsn0 += sn;
}else{
itemsn0 += itemsn+","+sn;
}
}
bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id")
.setParameter("BATCH_STATUS", "")//处理状态-为空
.setParameter("BATCH_NO", req_sn)
.setParameter("BATCH_SN", itemsn0)
.setParameter("id", biz.getAttribute("id").toString()).executeUpdate();
//手动的添加到手动表
if("manual".equals(collectStyle)){
JBOTransaction transj = JBOFactory.createJBOTransaction();
BizObjectManager bmlcmi = JBOFactory.getFactory().getManager(LC_COLLECT_MANUAL_INFO.CLASS_NAME,transj);
bmlcmi.createQuery("update O set O.BATCH_SN=:BATCH_SN where O.plan_id=:id and O.BATCH_NO=:BATCH_NO")
.setParameter("BATCH_SN", itemsn0)
.setParameter("BATCH_NO", req_sn)
.setParameter("id", planId).executeUpdate();
transj.commit();
}
trans.commit();
rentPlanHandle(planId,req_sn,sn,biz,99,singlerent0);//追加批量处理状态
trans_detail.setSN(sn);
trans_detail.setACCOUNT_TYPE("");
trans_detail.setACCOUNT_NO(acc_number);
@ -1664,27 +1595,7 @@ public class CollectAuditInfoCacheTj {
}else{
sn = "" + (++item);
}
//追加批量处理状态
JBOTransaction trans = JBOFactory.createJBOTransaction();
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans);
bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id")
.setParameter("BATCH_STATUS", "")//处理状态-为空
.setParameter("BATCH_NO", req_sn)
.setParameter("BATCH_SN", sn)
.setParameter("id", biz.getAttribute("id").toString()).executeUpdate();
//手动的添加到手动表
if("manual".equals(collectStyle)){
BizObjectManager bmlcmi = JBOFactory.getFactory().getManager(LC_COLLECT_MANUAL_INFO.CLASS_NAME,trans);
BizObject bolmci = bmlcmi.newObject();
bolmci.setAttributeValue("contract_id",biz.getAttribute("contract_id").toString());
bolmci.setAttributeValue("plan_id",planId);
bolmci.setAttributeValue("BATCH_NO",req_sn);
bolmci.setAttributeValue("BATCH_SN",sn);
bolmci.setAttributeValue("money",biz.getAttribute("rent").toString());
bolmci.setAttributeValue("hire_date",DateUtil.getSystemTimeByFormat("yyyy/MM/dd"));
bmlcmi.saveObject(bolmci);
}
trans.commit();
rentPlanHandle(planId,req_sn,sn,biz,1,rent);//追加批量处理状态
trans_detail.setSN(sn);
trans_detail.setACCOUNT_TYPE("");
trans_detail.setACCOUNT_NO(acc_number);
@ -1704,7 +1615,70 @@ public class CollectAuditInfoCacheTj {
return strbuff;
}
/**
* 更新租金计划表 batch_no batch_sn ,手工卡扣的添加手工卡扣记录
* @param planId 租金计划id
* @param req_sn 批次号
* @param sn 序号
* @param biz
* @param k2 k2==1 手工卡扣插入新数据,其余更新手工卡扣表数据
* @throws Exception
*/
private void rentPlanHandle(String planId,String req_sn,String sn,BizObject biz,int k2,String amount) throws JBOException{
//追加批量处理状态
JBOTransaction trans = null;
try{
trans = JBOFactory.createJBOTransaction();
Transaction transaction = Transaction.createTransaction(trans);
BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME);
BizObject bo = bm.createQuery("O.id=:id").setParameter("id", planId).getSingleResult(false);
String itemsn0 = "";
if (bo !=null) {
String itemsn = bo.getAttribute("batch_sn").toString();
if (itemsn.length() == 0) {
itemsn0 += sn;
}else{
itemsn0 += itemsn+","+sn;
}
}
//更新租金批次号 序号
bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id")
.setParameter("BATCH_STATUS", "")//处理状态-为空
.setParameter("BATCH_NO", req_sn)
.setParameter("BATCH_SN", itemsn0)
.setParameter("id", planId).executeUpdate();
//记录中间表 lb_union_middle
SqlObject sqlObject = new SqlObject("insert into lb_union_middle (id,batch_no,batch_sn,rent_id,amount,input_time) values (replace(uuid(),'-',''),:batchNo,:batchSn,:rentId,:amount,SYSDATE()) ")
.setParameter("batchNo", req_sn).setParameter("batchSn", sn)
.setParameter("rentId", planId).setParameter("amount",amount);
transaction.executeSQL(sqlObject);
//手动卡扣添加到手动表
if("manual".equals(collectStyle)){
BizObjectManager bmlcmi = JBOFactory.getFactory().getManager(LC_COLLECT_MANUAL_INFO.CLASS_NAME,trans);
if(k2==1){
BizObject bolmci = bmlcmi.newObject();
bolmci.setAttributeValue("contract_id",biz.getAttribute("contract_id").toString());
bolmci.setAttributeValue("plan_id",planId);
bolmci.setAttributeValue("BATCH_NO",req_sn);
bolmci.setAttributeValue("BATCH_SN",itemsn0);
bolmci.setAttributeValue("money",biz.getAttribute("rent").toString());
bolmci.setAttributeValue("hire_date",DateUtil.getSystemTimeByFormat("yyyy/MM/dd"));
bmlcmi.saveObject(bolmci);
}else{
bmlcmi.createQuery("update O set O.BATCH_SN=:BATCH_SN where O.plan_id=:id and O.BATCH_NO=:BATCH_NO")
.setParameter("BATCH_SN", itemsn0)
.setParameter("BATCH_NO", req_sn)
.setParameter("id", planId).executeUpdate();
}
}
trans.commit();
}catch (Exception e){
if (trans != null) trans.rollback();
throw new JBOException(e.getMessage());
}
}
/**
* 保存存盘回盘文件
* @param tx
@ -1720,13 +1694,10 @@ public class CollectAuditInfoCacheTj {
String day = currentDateTime.substring(8,10);
//创建文件路径
String rootDir = this.fileSavePath;
File file = new File(rootDir + File.separator + currentYear
+ File.separator + month + File.separator
File file = new File(rootDir + File.separator + currentYear + File.separator + month + File.separator
+ day);
System.out.println(file.getAbsolutePath());
if(!file.exists()){//目录不存在则直接创建
file.mkdirs();
}
if (!file.exists()) file.mkdirs();//目录不存在则直接创建
//保存存盘文件
BizObjectManager bm = JBOFactory.getFactory().getManager(LB_INTFACE_FILE_RECORD.CLASS_NAME);
BizObject send = bm.newObject();
@ -1741,7 +1712,6 @@ public class CollectAuditInfoCacheTj {
bm.saveObject(send);
//筛选响应信息
Map<String, String> map = getRetAndCode(strResp);
//getMsgAndCode(strResp);
//保存回盘文件
BizObject reply = bm.newObject();
@ -1803,7 +1773,6 @@ public class CollectAuditInfoCacheTj {
public Map<String, String> getRetAndCodeByBatch(String strXML){
Map<String, String> map = new HashMap<String, String>();
Map<String, String> res = new HashMap<String, String>();
System.out.println(1);
int iStart = strXML.indexOf("<ERR_MSG>");
if (iStart != -1) {
int end = strXML.indexOf("</ERR_MSG>");

View File

@ -1,18 +1,19 @@
package com.tenwa.collectaudit.cache;
import java.io.IOException;
import com.amarsoft.app.awe.config.InitCollectConfig;
import com.gnete.security.crypt.Crypt;
import com.gnete.security.crypt.CryptException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
import com.amarsoft.app.awe.config.InitCollectConfig;
import com.gnete.security.crypt.Crypt;
import com.gnete.security.crypt.CryptException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.IOException;
/**
@ -94,8 +95,7 @@ public class CollectAuditProcess {
protected String CollectAuditPayReq(StringBuffer sendXml,String fileSavePath,String fileName) throws CryptException {
String strSendData = sendXml.toString();
HttpClient httpClient = new HttpClient( );
PostMethod postMethod =
new PostMethod(InitCollectConfig.C_SERVERURL);
PostMethod postMethod = new PostMethod(InitCollectConfig.C_SERVERURL);
//设置编码
httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"GBK");
@ -105,19 +105,17 @@ public class CollectAuditProcess {
Protocol.registerProtocol("https", new Protocol("https", fcty, 443));
strSendData = this.signMsg(strSendData);
log.info(strSendData);
System.out.println("·¢Ëͱ¨ÎÄ£º"+strSendData);
log.info("·¢Ëͱ¨ÎÄ£º"+strSendData);
InterFaceFileCreate.sendDiscFileCreate(strSendData, fileSavePath, fileName);
postMethod.setRequestBody(strSendData);
try {
long start = System.currentTimeMillis();
//执行getMethod
int statusCode = httpClient.executeMethod(postMethod);
System.out.println("cost:"+(System.currentTimeMillis()-start));
System.out.println("ShenZhen interface ["+fileName+"] call cost time:" + (System.currentTimeMillis() - start));
//失败
if (statusCode != HttpStatus.SC_OK) {
log.error(
"Method failed: " + postMethod.getStatusLine());
log.error("Method failed: " + postMethod.getStatusLine());
//读取内容
byte[] responseBody = postMethod.getResponseBody();
//处理内容
@ -131,7 +129,6 @@ public class CollectAuditProcess {
String strResp = new String(responseBody, "GBK");
log.info("服务器返回:" + strResp);
InterFaceFileCreate.replyDiscFileCreate(strResp, fileSavePath, fileName);
System.out.println("·þÎñÆ÷·µ»Ø:" + strResp);
//验签
if (this.verifySign(strResp)) {
log.info("验签正确,处理服务器返回的报文");

View File

@ -106,19 +106,17 @@ public class CollectAuditProcessTj {
Protocol.registerProtocol("https", new Protocol("https", fcty, 443));
strSendData = this.signMsg(strSendData);
log.info(strSendData);
System.out.println("发送报文:"+strSendData);
log.info("发送报文:"+strSendData);
InterFaceFileCreate.sendDiscFileCreate(strSendData, fileSavePath, fileName);
postMethod.setRequestBody(strSendData);
try {
long start = System.currentTimeMillis();
//执行getMethod
int statusCode = httpClient.executeMethod(postMethod);
System.out.println("cost:"+(System.currentTimeMillis()-start));
System.out.println("TianJin interface ["+fileName+"] call cost time:" + (System.currentTimeMillis() - start));
//失败
if (statusCode != HttpStatus.SC_OK) {
log.error(
"Method failed: " + postMethod.getStatusLine());
log.error("Method failed: " + postMethod.getStatusLine());
//读取内容
byte[] responseBody = postMethod.getResponseBody();
//处理内容
@ -132,7 +130,6 @@ public class CollectAuditProcessTj {
String strResp = new String(responseBody, "GBK");
log.info("服务器返回:" + strResp);
InterFaceFileCreate.replyDiscFileCreate(strResp, fileSavePath, fileName);
System.out.println("服务器返回:" + strResp);
//验签
if (this.verifySign(strResp)) {
log.info("验签正确,处理服务器返回的报文");