前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务项目:尚融宝(52)(核心业务流程:充值服务(2))

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

作者头像
一个风轻云淡
发布2022-11-15 15:12:33
2370
发布2022-11-15 15:12:33
举报
文章被收录于专栏:java学习java

一、定义回调接口

1、controller

UserAccountController中创建回调方法 

代码语言:javascript
复制
@ApiOperation(value = "用户充值异步回调")
@PostMapping("/notify")
public String notify(HttpServletRequest request) {
    Map<String, Object> paramMap = RequestHelper.switchMap(request.getParameterMap());
    log.info("用户充值异步回调:" + JSON.toJSONString(paramMap));

    //校验签名
    if(RequestHelper.isSignEquals(paramMap)) {
        //充值成功交易
        if("0001".equals(paramMap.get("resultCode"))) {
            return userAccountService.notify(paramMap);
        } else {
            log.info("用户充值异步回调充值失败:" + JSON.toJSONString(paramMap));
            return "success";
        }
    } else {
        log.info("用户充值异步回调签名错误:" + JSON.toJSONString(paramMap));
        return "fail";
    }
}

2、Service

接口:UserAccountService

代码语言:javascript
复制
String notify(Map<String, Object> paramMap);

实现:UserAccountServiceImpl 

代码语言:javascript
复制
@Transactional(rollbackFor = Exception.class)
@Override
public String notify(Map<String, Object> paramMap) {

    log.info("充值成功:" + JSONObject.toJSONString(paramMap));

    String bindCode = (String)paramMap.get("bindCode"); //充值人绑定协议号
    String chargeAmt = (String)paramMap.get("chargeAmt"); //充值金额

    //优化
    baseMapper.updateAccount(bindCode, new BigDecimal(chargeAmt), new BigDecimal(0));
    
    //增加交易流水
    //TODO
    
    return "success";
}

3、创建Mapper方法

接口:UserAccountMapper

代码语言:javascript
复制
void updateAccount(
    @Param("bindCode")String bindCode,
    @Param("amount")BigDecimal amount,
    @Param("freezeAmount")BigDecimal freezeAmount);

XML:UserAccountMapper.xml 

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

二、增加交易流水

1、枚举

TransTypeEnum

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

2、创建BO对象 

代码语言:javascript
复制
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TransFlowBO {

    private String agentBillNo;
    private String bindCode;
    private BigDecimal amount;
    private TransTypeEnum transTypeEnum;
    private String memo;
}

3、保存交易流水业务

接口:TransFlowService

代码语言:javascript
复制
void saveTransFlow(TransFlowBO transFlowBO);

 实现:TransFlowServiceImpl

代码语言:javascript
复制
@Resource
private UserInfoMapper userInfoMapper;

@Override
public void saveTransFlow(TransFlowBO transFlowBO) {

    //获取用户基本信息 user_info
    QueryWrapper<UserInfo> userInfoQueryWrapper = new QueryWrapper<>();
    userInfoQueryWrapper.eq("bind_code", transFlowBO.getBindCode());
    UserInfo userInfo = userInfoMapper.selectOne(userInfoQueryWrapper);

    //存储交易流水数据
    TransFlow transFlow = new TransFlow();
    transFlow.setUserId(userInfo.getId());
    transFlow.setUserName(userInfo.getName());
    transFlow.setTransNo(transFlowBO.getAgentBillNo());
    transFlow.setTransType(transFlowBO.getTransTypeEnum().getTransType());
    transFlow.setTransTypeName(transFlowBO.getTransTypeEnum().getTransTypeName());
    transFlow.setTransAmount(transFlowBO.getAmount());
    transFlow.setMemo(transFlowBO.getMemo());
    baseMapper.insert(transFlow);
}

4、notify中调用

UserAccountServiceImpl

代码语言:javascript
复制
@Resource
private TransFlowService transFlowService;

@Transactional(rollbackFor = Exception.class)
@Override
public String notify(Map<String, Object> paramMap) {

    ......

    //增加交易流水
    String agentBillNo = (String)paramMap.get("agentBillNo"); //商户充值订单号
    TransFlowBO transFlowBO = new TransFlowBO(
        agentBillNo,
        bindCode,
        new BigDecimal(chargeAmt),
        TransTypeEnum.RECHARGE,
        "充值");
    transFlowService.saveTransFlow(transFlowBO);
    
    return "success";
}

上篇位置 

http://t.csdn.cn/o04EI

http://t.csdn.cn/o04EI

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、定义回调接口
    • 1、controller
      • 2、Service
        • 3、创建Mapper方法
        • 二、增加交易流水
          • 1、枚举
          • 2、创建BO对象 
            • 3、保存交易流水业务
              • 4、notify中调用
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档