2023-07-25 10:22:56 +08:00

166 lines
6.9 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 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 = "admin";
// 默认操作人部门ID
private String defOperOrgId = "8009001";
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);
} catch (Exception e) {
e.printStackTrace();
if (jboTransaction != null) try {
jboTransaction.rollback();
} catch (JBOException e1) {
e1.printStackTrace();
}
throw new RuntimeException("初始化广发银行【交易明细查询-分页接口】执行状态失败!");
}
queryAndSaveTransactionDetailsToEbank(lbCgb0032LogBizObj);
}
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) {
// 在请求银行接口出现异常后,保存请求错误信息到【广发银行网银流水每日日志】表
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) {
if (record.getFinancingSymbol().equals("+")) {
BizObject bizObject = record.convertToEbank(bizObjectManager, defOperUserId, defOperOrgId);
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);
}
}