/**
* @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);
}
}
}
* @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);
}
}
}