大数据最新微服务项目:尚融宝(52)(核心业务流程:投标,2024年字节跳动74道高级程序员面试

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

@RestController
@RequestMapping(“/api/core/lendItem”)
@Slf4j
public class LendItemController {

@Resource
LendItemService lendItemService;

@ApiOperation("会员投资提交数据")
@PostMapping("/auth/commitInvest")
public R commitInvest(@RequestBody InvestVO investVO, HttpServletRequest request) {

    String token = request.getHeader("token");
    Long userId = JwtUtils.getUserId(token);
    String userName = JwtUtils.getUserName(token);
    investVO.setInvestUserId(userId);
    investVO.setInvestName(userName);

    //构建充值自动提交表单
    String formStr = lendItemService.commitInvest(investVO);
    return R.ok().data("formStr", formStr);
}

}


### 4、Service


**接口:LendItemService**



String commitInvest(InvestVO investVO);


**实现:LendItemServiceImpl**



@Resource
private LendMapper lendMapper;

@Resource
private LendService lendService;

@Resource
private UserAccountService userAccountService;

@Resource
private UserBindService userBindService;

@Override
public String commitInvest(InvestVO investVO) {

//输入校验==========================================
Long lendId = investVO.getLendId();
//获取标的信息
Lend lend = lendMapper.selectById(lendId);

//标的状态必须为募资中
Assert.isTrue(
    lend.getStatus().intValue() == LendStatusEnum.INVEST_RUN.getStatus().intValue(),
    ResponseEnum.LEND_INVEST_ERROR);

//标的不能超卖:(已投金额 + 本次投资金额 )>=标的金额(超卖)
BigDecimal sum = lend.getInvestAmount().add(new BigDecimal(investVO.getInvestAmount()));
Assert.isTrue(sum.doubleValue() <= lend.getAmount().doubleValue(),
              ResponseEnum.LEND_FULL_SCALE_ERROR);

//账户可用余额充足:当前用户的余额 >= 当前用户的投资金额(可以投资)
Long investUserId = investVO.getInvestUserId();
BigDecimal amount = userAccountService.getAccount(investUserId);//获取当前用户的账户余额
Assert.isTrue(amount.doubleValue() >= Double.parseDouble(investVO.getInvestAmount()),
              ResponseEnum.NOT_SUFFICIENT_FUNDS_ERROR);

//在商户平台中生成投资信息==========================================
//标的下的投资信息
LendItem lendItem = new LendItem();
lendItem.setInvestUserId(investUserId);//投资人id
lendItem.setInvestName(investVO.getInvestName());//投资人名字
String lendItemNo = LendNoUtils.getLendItemNo();
lendItem.setLendItemNo(lendItemNo); //投资条目编号(一个Lend对应一个或多个LendItem)
lendItem.setLendId(investVO.getLendId());//对应的标的id
lendItem.setInvestAmount(new BigDecimal(investVO.getInvestAmount())); //此笔投资金额
lendItem.setLendYearRate(lend.getLendYearRate());//年化
lendItem.setInvestTime(LocalDateTime.now()); //投资时间
lendItem.setLendStartDate(lend.getLendStartDate()); //开始时间
lendItem.setLendEndDate(lend.getLendEndDate()); //结束时间

//预期收益
BigDecimal expectAmount = lendService.getInterestCount(
    lendItem.getInvestAmount(),
    lendItem.getLendYearRate(),
    lend.getPeriod(),
    lend.getReturnMethod());
lendItem.setExpectAmount(expectAmount);

//实际收益
lendItem.setRealAmount(new BigDecimal(0));

lendItem.setStatus(0);//默认状态:刚刚创建
baseMapper.insert(lendItem);


//组装投资相关的参数,提交到汇付宝资金托管平台==========================================
//在托管平台同步用户的投资信息,修改用户的账户资金信息==========================================
//获取投资人的绑定协议号
String bindCode = userBindService.getBindCodeByUserId(investUserId);
//获取借款人的绑定协议号
String benefitBindCode = userBindService.getBindCodeByUserId(lend.getUserId());

//封装提交至汇付宝的参数
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("agentId", HfbConst.AGENT_ID);
paramMap.put("voteBindCode", bindCode);
paramMap.put("benefitBindCode",benefitBindCode);
paramMap.put("agentProjectCode", lend.getLendNo());//项目标号
paramMap.put("agentProjectName", lend.getTitle());

//在资金托管平台上的投资订单的唯一编号,要和lendItemNo保持一致。
paramMap.put("agentBillNo", lendItemNo);//订单编号
paramMap.put("voteAmt", investVO.getInvestAmount());
paramMap.put("votePrizeAmt", "0");
paramMap.put("voteFeeAmt", "0");
paramMap.put("projectAmt", lend.getAmount()); //标的总金额
paramMap.put("note", "");
paramMap.put("notifyUrl", HfbConst.INVEST_NOTIFY_URL); //检查常量是否正确
paramMap.put("returnUrl", HfbConst.INVEST_RETURN_URL);
paramMap.put("timestamp", RequestHelper.getTimestamp());
String sign = RequestHelper.getSign(paramMap);
paramMap.put("sign", sign);

//构建充值自动提交表单
String formStr = FormHelper.buildForm(HfbConst.INVEST_URL, paramMap);
return formStr;

}


### 5、UserBindService


**创建一个通用的Service方法,以方便调用,根据userId获取用户绑定账号**


**接口:UserBindService**



String getBindCodeByUserId(Long userId);


**实现:UserBindServiceImpl**



@Override
public String getBindCodeByUserId(Long userId){
QueryWrapper userBindQueryWrapper = new QueryWrapper<>();

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值