public interface DealAction {
void deal(Integer userId, BigDecimal operMoney, String remark);
}
public abstract class AbstractDealAction implements DealAction{
protected BusAccountLog log ;
public AbstractDealAction(){
log=new BusAccountLog();
}
public BusAccountLog getLog() {
return log;
}
@Override
public void deal(Integer userId,BigDecimal operMoney,String remark) {
instance(userId,operMoney,remark);
dealAccount();
}
public void instance(Integer userId,BigDecimal operMoney,String remark){
log.setUserId(userId);
log.setOperMoney(operMoney);
log.setRemark(remark);
}
public abstract void dealAccount();
}
public class BackCashDealAction extends AbstractDealAction {
public BackCashDealAction() {
log.setOperType(DealType.USER_CASH_RETURN);
}
@Override
public void dealAccount() {
log.setFrozen(log.getOperMoney().negate());
log.setUsable(log.getOperMoney());
}
}
@Component
public class DealModule {
@Autowired
BusAccountMapper accountMapper;
@Autowired
BusAccountLogMapper accountLogMapper;
private void dealLog(BusAccountLog log){
BusAccount act=accountMapper.getAccountByUserId(log.getUserId());
accountMapper.dealAccount(act,
log.getUsable(),
log.getFrozen(),
log.getWait(),
log.getRepay());
log.setUsable(log.getUsable().add(act.getUsable()));
log.setFrozen(log.getFrozen().add(act.getFrozen()));
log.setWait(log.getWait().add(act.getWait()));
log.setRepay(log.getRepay().add(act.getRepay()));
log.setTotal(log.getUsable()
.add(log.getFrozen())
.add(log.getWait())
);
log.setOperMoney(log.getOperMoney().abs());
accountLogMapper.insert(log);
}
public void dealAction(DealAction action){
AbstractDealAction act=(AbstractDealAction)action;
dealLog(act.getLog());
}
}
BigDecimal payAmount = new BigDecimal(params.get("pay_amt"));
//修改充值订单状态
int i=busAccountRechargeMapper.updateAccountRechargeStatus(orderNo,2,1);
if (i==0){
throw new CrowdException("系统繁忙");
}
if(i==1){
//处理用户资金
DealAction action=new RechargeDealAction();
action.deal(userId,payAmount,"用戶充值:"+payAmount);
dealModule.dealAction(action);
<update id="dealAccount" >
update bus_account set
total = total + #{dealUsableAmt}+ #{dealFrozenAmt}+#{dealWaitAmt},
usable = usable + #{dealUsableAmt},
frozen = frozen + #{dealFrozenAmt},
wait = wait + #{dealWaitAmt},
repay = repay + #{dealRepayAmt}
where user_id = #{act.userId}
<if test="dealUsableAmt>0">
and usable=#{act.usable}
</if>
<if test="dealFrozenAmt>0">
and frozen=#{act.frozen}
</if>
<if test="dealWaitAmt>0">
and wait=#{act.wait}
</if>
<if test="dealRepayAmt>0">
and repay=#{act.repay}
</if>
</update>
网友评论