微服务项目:尚融宝(53)(核心业务流程:投标(4))

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

前端整合

投资

pages/lend/_id.vue

   //投资
    commitInvest() {
      //校验用户是否登录
      let userInfo = cookie.get('userInfo')
      // console.log(typeof userInfo)
      // console.log(!userInfo) //true
      if (!userInfo) {
        window.location.href = '/login'
        return
      }

      //校验当前用户是否是投资人
      let userInfoObj = JSON.parse(userInfo)
      if (userInfoObj.userType == 2) {
        //借款人
        this.$message.error('借款人无法投资')
        return
      }

      console.log(this.lend.investAmount)
      console.log(this.invest.investAmount)
      console.log(this.lend.amount)
      //判断标的是否超卖:标的已投金额 + 本次投资金额 > 标的总金额
      if (
        this.lend.investAmount + Number(this.invest.investAmount) >
        this.lend.amount
      ) {
        this.$message.error('标的可投资金额不足')
        return
      }

      //是否是100的整数倍
      // console.log(this.invest.investAmount)
      // console.log(Number(this.invest.investAmount))
      // console.log(typeof Number(this.invest.investAmount))
      // return
      if (
        Number(this.invest.investAmount) === 0 ||
        this.invest.investAmount % this.lend.lowestAmount != 0
      ) {
        this.$message.error(`投资金额必须是${this.lend.lowestAmount}的整数倍`)
        return
      }

      //余额的判断
      if (this.invest.investAmount > this.account) {
        this.$message.error('余额不足,请充值')
        return
      }

      //数据提交
      this.$alert(
        '
您即将前往汇付宝确认标的
', '前往汇付宝资金托管平台', { dangerouslyUseHTMLString: true, confirmButtonText: '立即前往', callback: (action) => { console.log('action', action) if (action === 'confirm') { this.invest.lendId = this.lend.id this.$axios .$post('/api/core/lendItem/auth/commitInvest', this.invest) .then((response) => { // console.log(response.data.formStr) // debugger document.write(response.data.formStr) }) } }, } ) }

定义回调接口

1、controller

LendItemController中创建回调方法 

@ApiOperation("会员投资异步回调")
@PostMapping("/notify")
public String notify(HttpServletRequest request) {

    Map paramMap = RequestHelper.switchMap(request.getParameterMap());
    log.info("用户投资异步回调:" + JSON.toJSONString(paramMap));

    //校验签名 P2pInvestNotifyVo
    if(RequestHelper.isSignEquals(paramMap)) {
        if("0001".equals(paramMap.get("resultCode"))) {
            lendItemService.notify(paramMap);
        } else {
            log.info("用户投资异步回调失败:" + JSON.toJSONString(paramMap));
            return "fail";
        }
    } else {
        log.info("用户投资异步回调签名错误:" + JSON.toJSONString(paramMap));
        return "fail";
    }
    return "success";
}

2、Service

实现回调的业务

接口:LendItemService

void notify(Map paramMap);

实现:LendItemServiceImpl

@Resource
private TransFlowService transFlowService;

@Resource
private UserAccountMapper userAccountMapper;

@Transactional(rollbackFor = Exception.class)
@Override
public void notify(Map paramMap) {

    log.info("投标成功");

    //获取投资编号
    String agentBillNo = (String)paramMap.get("agentBillNo");

    boolean result = transFlowService.isSaveTransFlow(agentBillNo);
    if(result){
        log.warn("幂等性返回");
        return;
    }

    //获取用户的绑定协议号
    String bindCode = (String)paramMap.get("voteBindCode");
    String voteAmt = (String)paramMap.get("voteAmt");

    //修改商户系统中的用户账户金额:余额、冻结金额
    userAccountMapper.updateAccount(bindCode, new BigDecimal("-" + voteAmt), new BigDecimal(voteAmt));

    //修改投资记录的投资状态改为已支付
    LendItem lendItem = this.getByLendItemNo(agentBillNo);
    lendItem.setStatus(1);//已支付
    baseMapper.updateById(lendItem);

    //修改标的信息:投资人数、已投金额
    Long lendId = lendItem.getLendId();
    Lend lend = lendMapper.selectById(lendId);
    lend.setInvestNum(lend.getInvestNum() + 1);
    lend.setInvestAmount(lend.getInvestAmount().add(lendItem.getInvestAmount()));
    lendMapper.updateById(lend);

    //新增交易流水
    TransFlowBO transFlowBO = new TransFlowBO(
        agentBillNo,
        bindCode,
        new BigDecimal(voteAmt),
        TransTypeEnum.INVEST_LOCK,
        "投资项目编号:" + lend.getLendNo() + ",项目名称:" + lend.getTitle());
    transFlowService.saveTransFlow(transFlowBO);
}

3、辅助方法

LendItemServiceImpl

private LendItem getByLendItemNo(String lendItemNo) {
    QueryWrapper queryWrapper = new QueryWrapper();
    queryWrapper.eq("lend_item_no", lendItemNo);
    return baseMapper.selectOne(queryWrapper);

}

微服务项目:尚融宝(53)(核心业务流程:投标(4))_第1张图片

上篇链接:

 微服务项目:尚融宝(52)(核心业务流程:投标(3))_一个风轻云淡的博客-CSDN博客https://blog.csdn.net/m0_62436868/article/details/126984370?spm=1001.2014.3001.5501

今日分享

一、计算机系统的基本组成

1、一个完整的计算机系统都由硬件系统和软件系统组成。

2、硬件是指组成一台计算机的各种物理装置,包括运算器、控制器、存储器、输入设备和输出设备五部分,各部分通过总线连接在一起。

3、软件是指在硬件系统上运行的各种程序和相关资料,包括系统软件和应用软件两部分。

二、计算机硬件系统

仅有硬件而没有任何软件支持的计算机称为裸机。硬件是计算机的躯体,软件是计算机的灵魂,二者缺一不可。

第一台计算机ENIAC诞生至今,计算机硬件结构仍是依据冯·诺依曼提出的存储程序工作原理。

你可能感兴趣的:(微服务项目:尚融宝,javascript,开发语言,ecmascript)