美文网首页
策略模式在P2P的实践

策略模式在P2P的实践

作者: 万物皆有序和公式 | 来源:发表于2019-03-31 15:05 被阅读0次
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>

相关文章

网友评论

      本文标题:策略模式在P2P的实践

      本文链接:https://www.haomeiwen.com/subject/udxubqtx.html