java 会员架构_b2b2c商城系统-会员预存款架构及源码分享

packagecom.enation.app.javashop.core.trade.deposite.service.impl;importcom.enation.app.javashop.core.client.member.DepositeClient;importcom.enation.app.javashop.core.member.model.dto.DepositeParamDTO;importcom.enation.app.javashop.core.payment.model.dos.PaymentBillDO;importcom.enation.app.javashop.core.payment.service.PaymentBillManager;importcom.enation.app.javashop.core.statistics.util.DateUtil;importcom.enation.app.javashop.core.trade.TradeErrorCode;importcom.enation.app.javashop.core.trade.deposite.model.dos.RechargeDO;importcom.enation.app.javashop.core.trade.deposite.service.RechargeManager;importcom.enation.app.javashop.core.trade.order.model.enums.PayStatusEnum;importcom.enation.app.javashop.core.trade.order.model.enums.TradeTypeEnum;importcom.enation.app.javashop.framework.context.UserContext;importcom.enation.app.javashop.framework.exception.ServiceException;importcom.enation.app.javashop.framework.security.model.Buyer;importcom.enation.app.javashop.framework.util.CurrencyUtil;importcom.enation.app.javashop.framework.util.SqlSplicingUtil;importcom.enation.app.javashop.framework.util.StringUtil;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Qualifier;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Propagation;importorg.springframework.transaction.annotation.Transactional;importcom.enation.app.javashop.framework.database.DaoSupport;importcom.enation.app.javashop.framework.database.Page;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;/*** 充值记录业务类

*@authorliuyulei

*@versionv1.0

*@sincev7.1.5

* 2019-12-30 16:38:45*/@Servicepublic class RechargeManagerImpl implementsRechargeManager {

@Autowired

@Qualifier("tradeDaoSupport")privateDaoSupport daoSupport;

@AutowiredprivatePaymentBillManager paymentBillManager;

@AutowiredprivateDepositeClient depositeClient;

@Override

@Transactional(value= "tradeTransactionManager",propagation = Propagation.REQUIRED,rollbackFor=Exception.class)publicRechargeDO recharge(Double money) {

Buyer buyer=UserContext.getBuyer();//本金额支付次数

int times = 0;//账单编号格式: 年月日+ memberID掩码 + 价格掩码 +支付次数//掩码均为5位数,不足前面补零

String snPrefix = createSn(buyer.getUid(), "D", money);

String sn= snPrefix +times;

RechargeDO rechargeDO= this.getModel(sn);if(rechargeDO == null){//整合充值订单数据

rechargeDO = newRechargeDO(sn,buyer.getUid(),buyer.getUsername(),money);//添加充值订单

createBill(rechargeDO);

}else{//如果是已付款

if(!PayStatusEnum.PAY_NO.name().equals(rechargeDO.getPayStatus())){//获取到已支付次数

times = Integer.parseInt(sn.substring(19, sn.length()));//循环生成sn

while (true) {

times++;

sn= snPrefix +times;

RechargeDO rechargeTemp= this.getModel(sn);//找到一个没有使用过的 就可以break了

if (rechargeTemp == null) {break;

}

}//充值订单已经被支付,则表示当天再次支付

rechargeDO.setRechargeSn(sn);

rechargeDO.setPayStatus(PayStatusEnum.PAY_NO.name());

createBill(rechargeDO);

}//如果没有被支付则不用创建充值订单,再次为此订单支付即可

}returnrechargeDO;

}

@Override

@Transactional(value= "tradeTransactionManager",propagation = Propagation.REQUIRED,rollbackFor=Exception.class)public voidpaySuccess(String sn, Double price) {

RechargeDO rechargeDO= this.getModel(sn);if(!rechargeDO.getRechargeMoney().equals(price)){throw new ServiceException(TradeErrorCode.E454.code(), "付款金额和应付金额不一致");

}this.daoSupport.execute("update es_deposite_recharge set pay_status = ? where recharge_sn = ? ",PayStatusEnum.PAY_YES.name(),sn);//增加会员预存款 余额

depositeClient.increase(price,rechargeDO.getMemberId(),"会员充值,充值单号:" +rechargeDO.getRechargeSn());

}

@Override

@Transactional(value= "tradeTransactionManager",propagation = Propagation.REQUIRED,rollbackFor=Exception.class)public voidupdatePaymentMethod(String subSn, String pluginId, String methodName) {

String sql= "update es_deposite_recharge set payment_plugin_id = ?,recharge_way = ?, pay_time = ? where recharge_sn = ? ";this.daoSupport.execute(sql,pluginId,methodName, DateUtil.getDateline(),subSn);

}

@OverridepublicPage list(DepositeParamDTO paramDTO){

StringBuffer sql= new StringBuffer("select * from es_deposite_recharge ");

List whereSql = new ArrayList<>();

List term = new ArrayList<>();//根据会员名称查询

if(!StringUtil.isEmpty(paramDTO.getMemberName())){

whereSql.add(" member_name = ? ");

term.add(paramDTO.getMemberName());

}//根据会员id查询

if(paramDTO.getMemberId() != null){

whereSql.add(" member_id = ? ");

term.add(paramDTO.getMemberId());

}//根据充值编号查询

if(!StringUtil.isEmpty(paramDTO.getSn()) ){

whereSql.add(" recharge_sn = ? ");

term.add(paramDTO.getSn());

}//根据充值编号查询

if(!StringUtil.isEmpty(paramDTO.getSn()) ){

whereSql.add(" recharge_sn = ? ");

term.add(paramDTO.getSn());

}//根据充值时间查询

if(paramDTO.getStartTime() != null){

whereSql.add(" recharge_time >= ? ");

term.add(paramDTO.getStartTime());

}//根据充值时间查询

if(paramDTO.getStartTime() != null){

whereSql.add(" recharge_time <= ? ");

term.add(paramDTO.getEndTime());

}

whereSql.add(" pay_status = ? ");

term.add(PayStatusEnum.PAY_YES.name());//拼接sql

sql.append(SqlSplicingUtil.sqlSplicing(whereSql));

sql.append("order by recharge_time desc");

Page webPage= this.daoSupport.queryForPage(sql.toString(),paramDTO.getPageNo(), paramDTO.getPageSize() , RechargeDO.class,term.toArray() );returnwebPage;

}

@OverridepublicDouble getPrice(String sn) {return this.daoSupport.queryForDouble("select recharge_money from es_deposite_recharge where recharge_sn = ? ",sn);

}

@OverridepublicRechargeDO getModel(String sn) {return this.daoSupport.queryForObject("select * from es_deposite_recharge where recharge_sn = ? ",RechargeDO.class,sn);

}privateString mask(String str) {

String mask= "000000";

mask= mask +str;

mask= mask.substring(mask.length() - 5);returnmask;

}privateString createSn(Integer memberId,String prefix,Double price) {

String memberMask= mask("" +memberId);

String priceMask= mask("" + CurrencyUtil.mul(price,100).intValue());

String snPrefix= prefix + DateUtil.toString(new Date(), "yyyyMMdd") + memberMask +priceMask;returnsnPrefix;

}private voidcreateBill(RechargeDO rechargeDO) {

daoSupport.insert(rechargeDO);//创建充值 支付 账单数据

PaymentBillDO paymentBillDO = newPaymentBillDO();

paymentBillDO.setSubSn(rechargeDO.getRechargeSn());

paymentBillDO.setTradePrice(rechargeDO.getRechargeMoney());

paymentBillDO.setServiceType(TradeTypeEnum.RECHARGE.name());

paymentBillManager.add(paymentBillDO);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值