充值接口中补单(即充值不成功再次充值)

/**
* @author shi_yqiang
* @功能:重新充值
*/
import java.util.List;

import com.cc.bvc.core.log.Bill99VcLogger;
import com.cc.bvc.model.hibernate.pojo.BvcParameterConf;
import com.cc.bvc.model.hibernate.pojo.BvcPayRequest;
import com.cc.bvc.socket.bean.ChargeCardBean;
import com.cc.bvc.socket.conf.SocketReturnCode;
import com.cc.bvc.socket.dao.IConfigUtilDao;
import com.cc.bvc.socket.service.IChargeCardService;
import com.cc.bvc.socket.service.IChargingDealCallbackService;
import com.cc.bvc.socket.service.IReChargeService;
import com.cc.bvc.socket.service.IResendService;

public class ReChargeServiceImpl implements IReChargeService {
private static final int SUCCESS = 1;
private static final String TIME_OUT = "3000";
private static final String RESEND_RETURN_CODE = "9998";
private static Bill99VcLogger logger = Bill99VcLogger.getLogger(ReChargeServiceImpl.class);
private IConfigUtilDao configUtilDao;
private IChargeCardService chargeCardService;
private IChargingDealCallbackService chargingDealCallbackService;
private int reconnectCount = 10;

public void setConfigUtilDao(IConfigUtilDao configUtilDao) {
this.configUtilDao = configUtilDao;
}

// 从数据库中读取配置文件Dao
public BvcParameterConf getConfigValueByKey(String key) {
return configUtilDao.queryByConfKey(key);
}

// 查询并返回没有充值成功的记录
public List queryUnSuccessRecord() {
return chargeCardService.queryUnSuccessRecord();
}

// 修改没有成功的标记
public void updateUnSuccessFlag(BvcPayRequest bvcPayRequest) {
chargeCardService.updateUnSuccessRecord(bvcPayRequest);
}

public void setChargingDealCallbackService(
IChargingDealCallbackService chargingDealCallbackService) {
this.chargingDealCallbackService = chargingDealCallbackService;
}

public void setChargeCardService(IChargeCardService chargeCardService) {
this.chargeCardService = chargeCardService;
}
/**
* 补单入口方法
*/
public void doReCharge() {
initRechargeTime();

// todo: 调用charging deal的接口
List<BvcPayRequest> list = this.queryUnSuccessRecord();// 获取数据库中ChargeFlag值为0 && reChargeCount值为小于10的记录

if (logger.isInfoOn()) {
logger.info("Start recharging, records count to be recharged is "
+ list.size());
}

for (int i = 0; i < list.size(); i++) {
BvcPayRequest bvcPayRequest = list.get(i);

if (logger.isInfoOn()) {
logger.info("Do recharge for request, seqNo - "
+ bvcPayRequest.getSeqNo());
}
// 调用充值接口方法
ChargeCardBean cellResp = chargeCardService.doCharge(bvcPayRequest
.getPhoneNo(), bvcPayRequest.getAmount(),
bvcPayRequest.getObjType(), bvcPayRequest.getCardNo(),
bvcPayRequest.getSeqNo(),String.valueOf(bvcPayRequest.getDestinationAttr()));

if (cellResp != null && !TIME_OUT.equals(cellResp.getReturnCode())) {// 补单完毕

if (logger.isInfoOn()) {
logger.info("Recharge success, call charging deal service");
}

if (chargingDealCallbackService != null) {
chargingDealCallbackService.notifyChargingResult(cellResp);
}

bvcPayRequest.setChargeFlag(SUCCESS);
// 更新数据库中该记录对应的chargeFlag值
this.updateUnSuccessFlag(bvcPayRequest);

} else {

if (logger.isInfoOn()) {
logger.info("Recharge failed, increase recharge count");
}

bvcPayRequest.setReChargeCount(bvcPayRequest.getReChargeCount() + 1);
this.updateUnSuccessFlag(bvcPayRequest);
}

if (bvcPayRequest.getReChargeCount() > reconnectCount) {
if (logger.isInfoOn()) {
logger.info("reChargeLimit reached, cancel the charging request");
}

// 做冲正
ChargeCardBean chargeCardBean = doResendCharge(bvcPayRequest);

if (chargingDealCallbackService != null) {
chargingDealCallbackService.notifyChargingResult(chargeCardBean);
}
}
}
}
/**
* 调用冲正接口
* @param bvcPayRequest :
* @return
*/
private ChargeCardBean doResendCharge(BvcPayRequest bvcPayRequest) {
ResendServiceImpl resendService = new ResendServiceImpl();
String returnCode = resendService.getResendInfo(
bvcPayRequest.getPhoneNo(),bvcPayRequest.getAmount(),
bvcPayRequest.getCardNo(), bvcPayRequest.getSeqNo());

ChargeCardBean chargeCardBean = new ChargeCardBean();

if(returnCode!=null && returnCode!=""){

chargeCardBean.setSeqNo(bvcPayRequest.getSeqNo());
chargeCardBean.setReturnCode(RESEND_RETURN_CODE);
}
return chargeCardBean;
}
/**
* 初始化补单的最大次数
*/
private void initRechargeTime() {
try {
reconnectCount = Integer.parseInt(this.getConfigValueByKey(
"reChargeLimit").getConfValue());// 从后台读取补单的最大次数
} catch (Exception e) {
logger.warn("invalid configuration for reChargeLimit", e);
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值