diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/TbPayServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/TbPayServiceImpl.java index b5486d06..1396493d 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/TbPayServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/TbPayServiceImpl.java @@ -38,6 +38,8 @@ import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.sql.Timestamp; import java.util.List; import java.util.Map; @@ -350,14 +352,15 @@ public class TbPayServiceImpl implements TbPayService { throw new BadRequestException("用户不存在或已被禁用"); } - long flag = shopUserMapper.decrBalance(Integer.valueOf(orderInfo.getUserId()), orderInfo.getOrderAmount()); + BigDecimal finalAmount = orderInfo.getOrderAmount().multiply(BigDecimal.valueOf(discount)).setScale(2, RoundingMode.UP); + long flag = shopUserMapper.decrBalance(Integer.valueOf(orderInfo.getUserId()), finalAmount); if (flag < 1) { throw new BadRequestException("余额不足或扣除余额失败"); } TbShopUserFlow userFlow = new TbShopUserFlow(); - userFlow.setAmount(orderInfo.getOrderAmount()); - userFlow.setBalance(shopUser.getAmount()); + userFlow.setAmount(finalAmount); + userFlow.setBalance(shopUser.getAmount().subtract(finalAmount)); userFlow.setShopUserId(shopUser.getId()); userFlow.setBizCode("vipCardCash"); userFlow.setBizName("余额支付"); @@ -365,7 +368,7 @@ public class TbPayServiceImpl implements TbPayService { userFlow.setType("-"); shopUserFlowMapper.insert(userFlow); - orderInfo.setPayAmount(orderInfo.getOrderAmount()); + orderInfo.setPayAmount(finalAmount); orderInfo.setPayType("cash"); orderInfo.setStatus("closed"); orderInfo.setPayOrderNo("cash".concat(SnowFlakeUtil.generateOrderNo())); @@ -409,7 +412,7 @@ public class TbPayServiceImpl implements TbPayService { // return Result.fail(CodeEnum.PAYTYPENOEXIST); // } - orderInfo.setPayAmount(orderInfo.getOrderAmount()); + orderInfo.setPayAmount(orderInfo.getOrderAmount().multiply(BigDecimal.valueOf(payDTO.getDiscount()).setScale(2, RoundingMode.UP))); orderInfo.setPayType("cash"); orderInfo.setStatus("closed"); orderInfo.setPayOrderNo("cash".concat(SnowFlakeUtil.generateOrderNo()));