191 lines
8.2 KiB
Java
191 lines
8.2 KiB
Java
package com.tenwa.cgbbank.service;
|
|
|
|
import com.amarsoft.are.jbo.*;
|
|
import com.amarsoft.awe.util.Transaction;
|
|
import com.tenwa.cgbbank.dao.LBCgb0032LogDao;
|
|
import com.tenwa.cgbbank.dto.*;
|
|
import com.tenwa.cgbbank.enums.CGB0032LogStatusEnum;
|
|
import com.tenwa.cgbbank.helper.CGBBankInterfaceHelper;
|
|
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
|
|
import com.tenwa.lease.app.ebank.EbankUse;
|
|
|
|
import jbo.loan.LB_CGB_0032_LOG;
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
|
import java.util.List;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
/**
|
|
* @program: apzl_leasing
|
|
* @description:
|
|
* @author: 李超杰
|
|
* @create: 2023-06-14 09:30
|
|
*/
|
|
public class CGBBankService {
|
|
|
|
private static Log log = LogFactory.getLog(CGBBankService.class);
|
|
|
|
private static CGBBankService instance = new CGBBankService();
|
|
|
|
private CGBBankService() {
|
|
}
|
|
|
|
public static CGBBankService getInstance() {
|
|
return instance;
|
|
}
|
|
|
|
private static CGBBankInterfaceHelper cgbBankInterfaceHelper = CGBBankInterfaceHelper.getInstance();
|
|
|
|
private static LBCgb0032LogDao lbCgb0032LogDao = LBCgb0032LogDao.getInstance();
|
|
|
|
// 默认操作人ID
|
|
private String defOperUserId = "8009U00000063";
|
|
// 默认操作人部门ID
|
|
private String defOperOrgId = "8009014";
|
|
|
|
private static final Integer QUERY_PAGE_SIZE = 20;
|
|
|
|
/**
|
|
* 广发银行,查询某个账号的某一天的网银数据,按天查询并保存网银处理状态
|
|
* @param account
|
|
* @param queryDate
|
|
* @throws JBOException
|
|
*/
|
|
public void startProcess(String account, String queryDate) throws JBOException {
|
|
BizObject lbCgb0032LogBizObj = null;
|
|
|
|
JBOTransaction jboTransaction = null;
|
|
try {
|
|
jboTransaction = JBOFactory.createJBOTransaction();
|
|
lbCgb0032LogBizObj = init(jboTransaction, account, queryDate);
|
|
jboTransaction.commit();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
if (jboTransaction != null) try {
|
|
jboTransaction.rollback();
|
|
} catch (JBOException e1) {
|
|
e1.printStackTrace();
|
|
}
|
|
throw new RuntimeException("初始化广发银行【交易明细查询-分页接口】执行状态失败!");
|
|
}
|
|
|
|
queryAndSaveTransactionDetailsToEbank(lbCgb0032LogBizObj);
|
|
//执行完成后,调用生成凭证方法
|
|
// com.tenwa.lease.app.ebank.EbankUse
|
|
JBOTransaction jboTransactionV = null;
|
|
try {
|
|
jboTransactionV = JBOFactory.createJBOTransaction();
|
|
EbankUse eu = new EbankUse();
|
|
eu.createEbankVoucher2(jboTransactionV);
|
|
jboTransactionV.commit();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
if (jboTransactionV != null) try {
|
|
jboTransactionV.rollback();
|
|
} catch (JBOException e1) {
|
|
e1.printStackTrace();
|
|
}
|
|
throw new RuntimeException("生成凭证失败");
|
|
}
|
|
System.out.println("调用广发银行接口完成!!!");
|
|
}
|
|
|
|
private BizObject init(JBOTransaction jboTransaction, String account, String queryDate) throws JBOException {
|
|
Transaction sqlca = Transaction.createTransaction(jboTransaction);
|
|
BizObjectManager lbCgb0032LogManager = lbCgb0032LogDao.getBizObjectManager(jboTransaction);
|
|
BizObject lbCgb0032LogBizObj = lbCgb0032LogDao.findByAccountAndTranDate(jboTransaction, account, queryDate);
|
|
if (lbCgb0032LogBizObj == null) {
|
|
lbCgb0032LogBizObj = lbCgb0032LogDao.init(lbCgb0032LogManager, account, queryDate);
|
|
} else {
|
|
int anInt = lbCgb0032LogBizObj.getAttribute(LB_CGB_0032_LOG.status).getInt();
|
|
if (CGB0032LogStatusEnum.S0.getCode().intValue() == anInt) {
|
|
throw new RuntimeException("已有实例在处理账号【" + account + "】在日期【" + queryDate + "】的数据,不可重复执行!");
|
|
} else if (CGB0032LogStatusEnum.S2.getCode().intValue() == anInt) {
|
|
lbCgb0032LogDao.updateStatus(sqlca, lbCgb0032LogBizObj.getAttribute(LB_CGB_0032_LOG.id).getString(), CGB0032LogStatusEnum.S0);
|
|
}
|
|
}
|
|
return lbCgb0032LogBizObj;
|
|
}
|
|
|
|
public void queryAndSaveTransactionDetailsToEbank(BizObject lbCgb0032LogBizObj) throws JBOException {
|
|
String lbCgb0032LogId = lbCgb0032LogBizObj.getAttribute("id").getString();
|
|
String account = lbCgb0032LogBizObj.getAttribute("account").getString();
|
|
String tranDate = lbCgb0032LogBizObj.getAttribute("tran_date").getString();
|
|
int recordNum = lbCgb0032LogBizObj.getAttribute("record_num").getInt();
|
|
|
|
CGB0032ReqBody reqBody = new CGB0032ReqBody();
|
|
reqBody.setAccount(account);
|
|
reqBody.setBeginDate(tranDate);
|
|
reqBody.setEndDate(tranDate);
|
|
reqBody.setQueryType(0);
|
|
reqBody.setQueryNumber(QUERY_PAGE_SIZE);
|
|
|
|
boolean queryFlag = true;
|
|
|
|
while (queryFlag) {
|
|
CGBBEDC<CGB0032ResBody> cgb0032ResBodyCGBBEDC = null;
|
|
try {
|
|
cgb0032ResBodyCGBBEDC = cgbBankInterfaceHelper.queryTransactionDetails(reqBody);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
// 在请求银行接口出现异常后,保存请求错误信息到【广发银行网银流水每日日志】表
|
|
lbCgb0032LogDao.recordLog(lbCgb0032LogId, recordNum, reqBody.getBeginRecTranCode(),
|
|
reqBody.getBeginRecTranSeq(), CGB0032LogStatusEnum.S2);
|
|
throw new RuntimeException("调用广发银行【交易明细查询-分页接口】失败!");
|
|
}
|
|
CGBMessage<CGB0032ResBody> message = cgb0032ResBodyCGBBEDC.getMessage();
|
|
CGB0032ResBody resBody = message.getBody();
|
|
|
|
List<CGB0032ResBodyRecord> records = resBody.getRecords();
|
|
JBOTransaction jboTransaction = null;
|
|
try {
|
|
jboTransaction = JBOFactory.createJBOTransaction();
|
|
BizObjectManager bizObjectManager = JBOFactory.getBizObjectManager("jbo.app.tenwa.calc.LC_EBANK", jboTransaction);
|
|
// 转换成网银流水
|
|
for (CGB0032ResBodyRecord record : records) {
|
|
BizObject lc = bizObjectManager.createQuery("ebank_sn=:ebankSn").setParameter("ebankSn", record.getSerialNo()).getSingleResult(false);
|
|
if (lc == null && record.getLoanSign().equals("+") && !(record.getOppoAccno().indexOf("9915810001415816")>=0 || record.getOppoAccno().indexOf("9912900000582902")>=0 || record.getOppoAccno().indexOf("9912900000232905")>=0 )) {
|
|
BizObject bizObject = record.convertToEbank(bizObjectManager, defOperUserId, defOperOrgId);
|
|
bizObjectManager.saveObject(bizObject);
|
|
bizObject.setAttributeValue("EBANK_NUMBER", bizObject.getAttribute("ID"));
|
|
bizObjectManager.saveObject(bizObject);
|
|
recordNum++;
|
|
}
|
|
}
|
|
|
|
if (resBody.getPageFlag() != 1) {
|
|
queryFlag = false;
|
|
} else {
|
|
reqBody.setBeginRecTranDate(resBody.getNextRecTranDate());
|
|
reqBody.setBeginRecTranSeq(resBody.getNextRecTranSeq());
|
|
reqBody.setBeginRecTranCode(resBody.getNextRecTranCode());
|
|
}
|
|
|
|
lbCgb0032LogDao.recordLog(jboTransaction, lbCgb0032LogId, recordNum, reqBody.getBeginRecTranCode(),
|
|
reqBody.getBeginRecTranSeq(), CGB0032LogStatusEnum.S0);
|
|
jboTransaction.commit();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
if (jboTransaction != null) {
|
|
try {
|
|
jboTransaction.rollback();
|
|
} catch (JBOException e1) {
|
|
e1.printStackTrace();
|
|
}
|
|
}
|
|
|
|
// 记录失败日志
|
|
lbCgb0032LogDao.recordLog(lbCgb0032LogId, recordNum, reqBody.getBeginRecTranCode(),
|
|
reqBody.getBeginRecTranSeq(), CGB0032LogStatusEnum.S2);
|
|
|
|
// 抛出异常,跳出方法
|
|
throw new RuntimeException("广发银行处理网银流水出现异常!");
|
|
}
|
|
}
|
|
|
|
// 保存成功状态
|
|
lbCgb0032LogDao.updateStatus(lbCgb0032LogId, CGB0032LogStatusEnum.S1);
|
|
}
|
|
}
|