电信充值平台-------充值接口实现类

下面是我在做一个电信充值平台项目中的关键接口。
package com.cc.bvc.socket.service.impl;

/**
* author:shi_yqiang
* @功能:VC充值接口
*/
import java.io.IOException;
import java.math.BigDecimal;
import java.net.SocketTimeoutException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import com.cc.bvc.core.log.Bill99VcLogger;
import com.cc.bvc.core.log.BvcDBAsyncLog;
import com.cc.bvc.core.log.BvcSysLogBean;
import com.cc.bvc.core.log.interfacetype.conf.InterfaceType;
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.SocketMsgType;
import com.cc.bvc.socket.conf.SocketReturnCode;
import com.cc.bvc.socket.dao.IChargeCardDAO;
import com.cc.bvc.socket.dao.IConfigUtilDao;
import com.cc.bvc.socket.msg.service.DealReqMsg;
import com.cc.bvc.socket.msg.service.DealRespMsg;
import com.cc.bvc.socket.msg.service.TimeUtil;
import com.cc.bvc.socket.service.IChargeCardService;

public class ChargeCardServiceImpl implements IChargeCardService {
private InterfaceType interfaceType;
private static Bill99VcLogger logger = Bill99VcLogger
.getLogger(ChargeCardServiceImpl.class);
// 时间格式控制
private static SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyyMMddHHmmss");
private SocketConnection socketConnection = SocketConnection.getInstance();
private IConfigUtilDao configUtilDao;
private IChargeCardDAO chargeCardDAO;

public static String getDateTime() {
return dateFormat.format(new Date());
}

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

public void setChargeCardDAO(IChargeCardDAO chargeCardDAO) {
this.chargeCardDAO = chargeCardDAO;
}

public void setInterfaceType(InterfaceType interfaceType) {
this.interfaceType = interfaceType;
}
/**
* 充值入口方法
* @param phoneNo :用户电话号码
* @param chargeMoney :用户要充值的金额
* @param phoneNoType :用户电话号码类型
* @param chargeCardNo:用户充值银行卡号
* @param seqNo :充值消息流水号
*/
public ChargeCardBean doCharge(String phoneNo, int chargeMoney,
String phoneNoType, String chargeCardNo, String seqNo,String destAttr) {
String cellReqMsg = null;
String resp = null;

if (logger.isInfoOn()) {
logger.info("充值金额厘转换为分");
}
int chargeAmt = (new BigDecimal(chargeMoney))
.divide(new BigDecimal(10)).intValue();

try {
saveChargeRecordToSysLog(phoneNo, phoneNoType, chargeCardNo, seqNo,
resp, chargeAmt);

DealReqMsg dealReqMsg = new DealReqMsg();

cellReqMsg = dealReqMsg.cellularReqMsg(phoneNo, chargeAmt,
phoneNoType, chargeCardNo, seqNo,destAttr);
if (logger.isInfoOn()) {
logger.info("send charge requestMsg:" + cellReqMsg);
}

resp = socketConnection.readReqMsg(cellReqMsg);

if (logger.isInfoOn()) {
logger.info("charge responseMsg:" + resp);
}

if (resp != null && !resp.equals("")) {
// 保存充值记录
savePayRequest(seqNo, cellReqMsg, resp,1);

if (logger.isInfoOn()) {
logger.info("Save system log");
}

// 保存系统日志
saveChargeRecordToSysLog(phoneNo, phoneNoType, chargeCardNo,
seqNo, resp, chargeAmt);

DealRespMsg dealRespMsg = new DealRespMsg();
if(logger.isInfoOn()){
logger.info("充值后的余额为:"+ dealRespMsg.parserChargeRespMsg(resp).getChargeBlance());
logger.info("The seqNo:"+dealRespMsg.parserChargeRespMsg(resp).getSeqNo());
logger.info("returnCode : "+dealRespMsg.parserChargeRespMsg(resp).getReturnCode());
}
return dealRespMsg.parserChargeRespMsg(resp);
}
} catch (SocketTimeoutException e) {
if (logger.isWarnOn()) {
logger.warn("Socket Time out",e);
}
} catch (IOException e) {
if (logger.isWarnOn()) {
logger.warn("IOException occurs", e);
}
} catch (Exception e) {
if (logger.isWarnOn()) {
logger.warn("Exception occurs", e);
}

savePayRequest(seqNo,cellReqMsg, resp, 0);//发生异常,保存数据到充值记录表中并将充值记录标记位置 0

saveChargeRecordToSysLog(phoneNo, phoneNoType, chargeCardNo, seqNo,
resp, chargeAmt); //保存充值记录到系统日志表中
return createResponse(cellReqMsg, SocketReturnCode.SYS_EXCEPTION);
}

savePayRequest(seqNo,cellReqMsg, resp, 0);
// 保存系统日志
saveChargeRecordToSysLog(phoneNo, phoneNoType, chargeCardNo, seqNo,
resp, chargeAmt);

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

// 保存充值记录
public void saveChargeCard(BvcPayRequest bvcPayRequest) {
chargeCardDAO.saveChargeCardRecord(bvcPayRequest);
}

// 查询充值没有成功的记录
public List queryUnSuccessRecord() {

return chargeCardDAO.queryChargeCardRecord();
}

// 根据seqNo去数据库中查询是否有相同的记录
public List queryChargeRecordBySeqNo(String seqNo) {
return chargeCardDAO.queryChargeRecordBySeqNo(seqNo);
}

// 在规定重复充值次数内如果充值成功的话就更新数据库中同一个流水号未成功的记录
public void updateUnSuccessRecord(BvcPayRequest bvcPayRequest) {
chargeCardDAO.updateUnSuccessRecord(bvcPayRequest);
}
//通过seqNo查询数据库中是否有相同的seqNo如果有就根据要更新的字段更新此条记录
public void updateChargeRecordBySeqNo(BvcPayRequest bvcPayRequest){
chargeCardDAO.updateChargeRecordBySeqNo(bvcPayRequest);
}
/**
* 创建响应消息 :
* @param cellReqMsg : 充值请求消息
* @param resultCode :返回码
* @return
*/
private ChargeCardBean createResponse(String cellReqMsg, String resultCode) {
ChargeCardBean chargeCard = new ChargeCardBean();
chargeCard.setSeqNo(cellReqMsg.substring(62, 88));
chargeCard.setReturnCode(resultCode);
chargeCard.setChargeBlance(0);
return chargeCard;
}
/**
* 保存充值记录于系统日志表中
* @param phoneNo :被充值用户电话
* @param phoneNoType :被充值用户电话类型
* @param chargeCardNo :充值卡号
* @param seqNo :充值流水号
* @param resp :充值响应消息
* @param chargeAmt :此次充值金额
*/
private void saveChargeRecordToSysLog(String phoneNo, String phoneNoType,
String chargeCardNo, String seqNo, String resp, int chargeAmt) {
BvcSysLogBean bvcSysLogBean = new BvcSysLogBean();
if (resp != null && !resp.equals("")) {
String chargeReqMsg = "phoneNo:" + phoneNo + "," + "chargeMoney:"
+ chargeAmt + "," + "phoneNoType:" + phoneNoType + ","
+ "chargeCardNo:" + chargeCardNo + "," + "seqNo:" + seqNo;
String chargeRespMsg = "seqNo:" + resp.substring(62, 88) + ","
+ "returnCode:" + resp.substring(102, 106);
bvcSysLogBean.setRequestContent(chargeReqMsg);
bvcSysLogBean.setResponseContent(chargeRespMsg);
bvcSysLogBean.setInterfaceType(interfaceType.getKey008());
bvcSysLogBean.setPhonoeNo(phoneNo);
bvcSysLogBean.setInterfaceTypeDesc(interfaceType.getObjDefMap().get(interfaceType.getKey008()));
BvcDBAsyncLog.saveAsyncLog2DB(bvcSysLogBean);
} else {
String chargeReqMsg = "phoneNo:" + phoneNo + "," + "chargeMoney:"
+ chargeAmt + "," + "phoneNoType:" + phoneNoType + ","
+ "chargeCardNo:" + chargeCardNo + "," + "seqNo:" + seqNo;
String chargeRespMsg = "seqNo:" + "" + "," + "returnCode:" + "";
bvcSysLogBean.setRequestContent(chargeReqMsg);
bvcSysLogBean.setResponseContent(chargeRespMsg);
bvcSysLogBean.setInterfaceType(interfaceType.getKey008());
bvcSysLogBean.setPhonoeNo(phoneNo);
bvcSysLogBean.setInterfaceTypeDesc(interfaceType.getObjDefMap().get(interfaceType.getKey008()));
BvcDBAsyncLog.saveAsyncLog2DB(bvcSysLogBean);
}
}
/**
* 保存充值记录
* @param seqNo : 充值流水号
* @param cellReqMsg :充值请求消息
* @param resp :充值响应消息
* @param chargeFlag :充值是否成功的标记 0:否;1:是
*/
private void savePayRequest(String seqNo, String cellReqMsg, String resp,int chargeFlag) {
BvcPayRequest bvcPayRequest = new BvcPayRequest();
bvcPayRequest.setSeqNo(cellReqMsg.substring(62, 88).trim());
bvcPayRequest.setPhoneNo(cellReqMsg.substring(122, 172).trim());
bvcPayRequest.setAmount(Integer.parseInt(cellReqMsg.substring(172, 184).trim()));
bvcPayRequest.setChargeType("");
if(cellReqMsg.substring(201, 221)!=null){
bvcPayRequest.setCardNo(cellReqMsg.substring(201, 221).trim());
}
bvcPayRequest.setCreateTime(TimeUtil.string2Date(new SimpleDateFormat(
"yyyyMMddHHmmss"), this.getDateTime()));
bvcPayRequest.setUpdateTime(TimeUtil.string2Date(new SimpleDateFormat(
"yyyyMMddHHmmss"), this.getDateTime()));
bvcPayRequest.setChargeFlag(chargeFlag);
if(cellReqMsg.substring(194, 198)!=null){
bvcPayRequest.setDestinationAttr(Integer.parseInt(cellReqMsg.substring(194, 198)));
}
if (resp != null && !resp.equals("")) {
bvcPayRequest.setBalance(Integer.parseInt(resp.substring(114, 126)));
bvcPayRequest.setBalanceTypeId(cellReqMsg.substring(186, 194).trim());
bvcPayRequest.setBalanceUnit(Integer.parseInt(resp.substring(126,
128)));
bvcPayRequest.setEffectiveTime(resp.substring(128, 142).trim());
bvcPayRequest.setExpireationTime(resp.substring(142, 156).trim());
bvcPayRequest.setObjType(cellReqMsg.substring(198, 201).trim());
} else {
bvcPayRequest.setBalance(0);
bvcPayRequest.setBalanceTypeId(SocketMsgType.BALANCE_TYPE_ID);
bvcPayRequest.setBalanceUnit(0);
bvcPayRequest.setEffectiveTime(null);
bvcPayRequest.setExpireationTime(null);
bvcPayRequest.setObjType(cellReqMsg.substring(198, 201).trim());
}
// 根据seqNo查询payRequest表

List<BvcPayRequest> list = this.queryChargeRecordBySeqNo(seqNo);

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

bvcPayRequest = (BvcPayRequest) list.get(i);

if (seqNo.equals((bvcPayRequest.getSeqNo()))) {

bvcPayRequest.setUpdateTime(TimeUtil.string2Date(
new SimpleDateFormat("yyyyMMddHHmmss"), this.getDateTime()));
this.updateChargeRecordBySeqNo(bvcPayRequest);
}
}
this.saveChargeCard(bvcPayRequest);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值