• 微服务项目:尚融宝(52)(核心业务流程:充值服务(2))


    放弃幻想,认清现实,准备斗争

    一、定义回调接口

    1、controller

    UserAccountController中创建回调方法 

    1. @ApiOperation(value = "用户充值异步回调")
    2. @PostMapping("/notify")
    3. public String notify(HttpServletRequest request) {
    4. Map paramMap = RequestHelper.switchMap(request.getParameterMap());
    5. log.info("用户充值异步回调:" + JSON.toJSONString(paramMap));
    6. //校验签名
    7. if(RequestHelper.isSignEquals(paramMap)) {
    8. //充值成功交易
    9. if("0001".equals(paramMap.get("resultCode"))) {
    10. return userAccountService.notify(paramMap);
    11. } else {
    12. log.info("用户充值异步回调充值失败:" + JSON.toJSONString(paramMap));
    13. return "success";
    14. }
    15. } else {
    16. log.info("用户充值异步回调签名错误:" + JSON.toJSONString(paramMap));
    17. return "fail";
    18. }
    19. }

    2、Service

    接口:UserAccountService

    String notify(Map paramMap);

    实现:UserAccountServiceImpl 

    1. @Transactional(rollbackFor = Exception.class)
    2. @Override
    3. public String notify(Map paramMap) {
    4. log.info("充值成功:" + JSONObject.toJSONString(paramMap));
    5. String bindCode = (String)paramMap.get("bindCode"); //充值人绑定协议号
    6. String chargeAmt = (String)paramMap.get("chargeAmt"); //充值金额
    7. //优化
    8. baseMapper.updateAccount(bindCode, new BigDecimal(chargeAmt), new BigDecimal(0));
    9. //增加交易流水
    10. //TODO
    11. return "success";
    12. }

    3、创建Mapper方法

    接口:UserAccountMapper

    1. void updateAccount(
    2. @Param("bindCode")String bindCode,
    3. @Param("amount")BigDecimal amount,
    4. @Param("freezeAmount")BigDecimal freezeAmount);

    XML:UserAccountMapper.xml 

     
        update
        user_account
        set
        amount = amount + #{amount},
        freeze_amount = freeze_amount + #{freezeAmount}
       
    where
        user_id = (select id from user_info where bind_code = #{bindCode})

    二、增加交易流水

    1、枚举

    TransTypeEnum

    1. CHARGE(1,"充值"),
    2. INVEST_LOCK(2,"投标锁定"),
    3. INVEST_UNLOCK(3,"放款解锁"),
    4. CANCEL_LEND(4,"撤标"),
    5. BORROW_BACK(5,"放款到账"),
    6. RETURN_DOWN(6,"还款扣减"),
    7. INVEST_BACK(7,"出借回款"),
    8. WITHDRAW(8,"提现"),
    9. ;

    2、创建BO对象 

    1. @Data
    2. @AllArgsConstructor
    3. @NoArgsConstructor
    4. public class TransFlowBO {
    5. private String agentBillNo;
    6. private String bindCode;
    7. private BigDecimal amount;
    8. private TransTypeEnum transTypeEnum;
    9. private String memo;
    10. }

    3、保存交易流水业务

    接口:TransFlowService

    void saveTransFlow(TransFlowBO transFlowBO);

     实现:TransFlowServiceImpl

    1. @Resource
    2. private UserInfoMapper userInfoMapper;
    3. @Override
    4. public void saveTransFlow(TransFlowBO transFlowBO) {
    5. //获取用户基本信息 user_info
    6. QueryWrapper userInfoQueryWrapper = new QueryWrapper<>();
    7. userInfoQueryWrapper.eq("bind_code", transFlowBO.getBindCode());
    8. UserInfo userInfo = userInfoMapper.selectOne(userInfoQueryWrapper);
    9. //存储交易流水数据
    10. TransFlow transFlow = new TransFlow();
    11. transFlow.setUserId(userInfo.getId());
    12. transFlow.setUserName(userInfo.getName());
    13. transFlow.setTransNo(transFlowBO.getAgentBillNo());
    14. transFlow.setTransType(transFlowBO.getTransTypeEnum().getTransType());
    15. transFlow.setTransTypeName(transFlowBO.getTransTypeEnum().getTransTypeName());
    16. transFlow.setTransAmount(transFlowBO.getAmount());
    17. transFlow.setMemo(transFlowBO.getMemo());
    18. baseMapper.insert(transFlow);
    19. }

    4、notify中调用

    UserAccountServiceImpl

    1. @Resource
    2. private TransFlowService transFlowService;
    3. @Transactional(rollbackFor = Exception.class)
    4. @Override
    5. public String notify(Map paramMap) {
    6. ......
    7. //增加交易流水
    8. String agentBillNo = (String)paramMap.get("agentBillNo"); //商户充值订单号
    9. TransFlowBO transFlowBO = new TransFlowBO(
    10. agentBillNo,
    11. bindCode,
    12. new BigDecimal(chargeAmt),
    13. TransTypeEnum.RECHARGE,
    14. "充值");
    15. transFlowService.saveTransFlow(transFlowBO);
    16. return "success";
    17. }

     

    上篇位置 

    http://t.csdn.cn/o04EIicon-default.png?t=N7T8http://t.csdn.cn/o04EI

  • 相关阅读:
    合肥先进光源束测专用网络的规划-续
    入门力扣自学笔记190 C++ (题目编号:481)
    C++ 性能优化指南 KurtGuntheroth 第12章 优化并发 摘录
    Cholesterol-PEG-Amine CLS-PEG-NH2 胆固醇-聚乙二醇-氨基科研用
    CTF-栈溢出-基本ROP-【ret2shellcode】
    R语言动量交易策略分析调整后的数据
    深度学习论文翻译解析(二十三):Segment Angthing
    PB对象命名规范
    AGX-Orin问题汇总
    数据化运营08 多维分析:如何利用指标维度摆脱视野局限?
  • 原文地址:https://blog.csdn.net/m0_62436868/article/details/126965011