@Transactional(rollbackFor = Exception.class) 8 @Override 9 public void notify(Map<String, Object> paramMap) { 10 11 log.info("投标成功"); 12 13 //获取投资编号 14 String agentBillNo = (String)paramMap.get("agentBillNo"); 15 16 boolean result = transFlowService.isSaveTransFlow(agentBillNo); 17 if(result){ 18 log.warn("幂等性返回"); 19 return; 20 } 21 22 //获取用户的绑定协议号 23 String bindCode = (String)paramMap.get("voteBindCode"); 24 String voteAmt = (String)paramMap.get("voteAmt"); 25 26 //修改商户系统中的用户账户金额:余额、冻结金额 27 userAccountMapper.updateAccount(bindCode, new BigDecimal("-" + voteAmt), new BigDecimal(voteAmt)); 28 29 //修改投资记录的投资状态改为已支付 30 LendItem lendItem = this.getByLendItemNo(agentBillNo); 31 lendItem.setStatus(1);//已支付 32 baseMapper.updateById(lendItem); 33 34 //修改标的信息:投资人数、已投金额 35 Long lendId = lendItem.getLendId(); 36 Lend lend = lendMapper.selectById(lendId); 37 lend.setInvestNum(lend.getInvestNum() + 1); 38 lend.setInvestAmount(lend.getInvestAmount().add(lendItem.getInvestAmount())); 39 lendMapper.updateById(lend); 40 41 //新增交易流水 42 TransFlowBO transFlowBO = new TransFlowBO( 43 agentBillNo, 44 bindCode, 45 new BigDecimal(voteAmt), 46 TransTypeEnum.INVEST_LOCK, 47 "投资项目编号:" + lend.getLendNo() + ",项目名称:" + lend.getTitle()); 48 transFlowService.saveTransFlow(transFlowBO); 49 }
时间: 2023-06-12 22:08:04 浏览: 74
这段代码是一个 Java 方法的实现,该方法用于处理投标成功的通知。方法使用 @Transactional 注解来确保事务的一致性,同时也会在遇到异常时进行回滚。该方法接收一个 Map 类型的参数,其中包含了投标成功的相关信息。在方法的第 14 行,通过参数获取了投资编号 agentBillNo。接着在第 16 行调用了 transFlowService.isSaveTransFlow 方法,该方法用于检查是否已经保存了交易流水,避免重复保存。如果已经保存,则在第 18 至 20 行之间进行幂等性返回。如果没有保存,则在第 22 至 39 行之间进行相关操作,包括修改用户账户金额、修改投资记录状态、修改标的信息、新增交易流水等。最后在第 42 至 48 行之间新增一条交易流水记录,并通过 transFlowService.saveTransFlow 方法进行保存。
相关问题
@Transactional(rollbackFor = Exception.class)与@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)的区别
@Transactional注解用于声明事务,在Spring中常用来保证方法的执行在一个事务内部,以确保数据的一致性和完整性。其中,rollbackFor参数指定哪些异常需要回滚事务,Propagation.REQUIRED指定了方法的事务传播行为。
区别如下:
- @Transactional(rollbackFor = Exception.class):这个注解只指定了回滚的异常类型,而没有指定传播行为,默认传播行为是Propagation.REQUIRED。
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class):这个注解指定了方法的事务传播行为和回滚的异常类型。
简单来说,前者只指定了回滚异常类型,而后者不仅指定了回滚异常类型,还明确指定了事务的传播行为。
@Override @Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
在Spring项目中,使用`@Transactional`注解可以为方法添加事务支持。其中,`isolation`参数用于指定事务的隔离级别,`rollbackFor`参数用于指定需要回滚的异常类型。
对于`@Transactional(isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)`这个注解,它的作用是将方法设置为使用读已提交的隔离级别,并且在遇到任何异常时都进行回滚。
隔离级别`READ_COMMITTED`表示一个事务只能读取到已经提交的数据,避免了脏读。而`rollbackFor = Exception.class`表示遇到任何异常都会触发事务回滚。
需要注意的是,Spring的事务隔离级别和数据库的事务隔离级别是有关联的。当Spring项目中使用了`@Transactional`注解指定了隔离级别时,会优先使用Spring的隔离级别,而不是数据库的隔离级别。因此,如果两者不一样,以Spring的隔离级别为准。