From 3fa3458f7bf223445c95bc83d365d10b9c91c884 Mon Sep 17 00:00:00 2001 From: 18650502300 <18650502300@163.com> Date: Fri, 10 Jan 2025 16:23:47 +0800 Subject: [PATCH] 111 --- .../domain/enums/BusinessType.java | 30 +++++++++ .../impl/ChangeBalanceServiceImpl.java | 67 +++++++++---------- 2 files changed, 63 insertions(+), 34 deletions(-) create mode 100644 share-space-system/src/main/java/com/ruoyi/ss/changeBalance/domain/enums/BusinessType.java diff --git a/share-space-system/src/main/java/com/ruoyi/ss/changeBalance/domain/enums/BusinessType.java b/share-space-system/src/main/java/com/ruoyi/ss/changeBalance/domain/enums/BusinessType.java new file mode 100644 index 0000000..d45dbf6 --- /dev/null +++ b/share-space-system/src/main/java/com/ruoyi/ss/changeBalance/domain/enums/BusinessType.java @@ -0,0 +1,30 @@ +package com.ruoyi.ss.changeBalance.domain.enums; + +import lombok.Getter; + +@Getter +public enum BusinessType { + ORDER_INCOME("1", "订单收入:"), + REORDER_INCOME("2", "续单订单收入:"), + ORDER_REFUND("4", "订单退款:"), + WITHDRAW("5", "提现"), + WITHDRAW_FAIL("6", "提现失败"), + SMS_CHARGE("8", "短信扣费"); + + private final String code; + private final String description; + + BusinessType(String code, String description) { + this.code = code; + this.description = description; + } + + public static BusinessType fromCode(String code) { + for (BusinessType type : values()) { + if (type.getCode().equals(code)) { + return type; + } + } + return null; // 或者抛出异常 + } +} diff --git a/share-space-system/src/main/java/com/ruoyi/ss/changeBalance/service/impl/ChangeBalanceServiceImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/changeBalance/service/impl/ChangeBalanceServiceImpl.java index cce14b8..6daeda5 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/changeBalance/service/impl/ChangeBalanceServiceImpl.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/changeBalance/service/impl/ChangeBalanceServiceImpl.java @@ -6,6 +6,7 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.ss.changeBalance.domain.ChangeBalance; import com.ruoyi.ss.changeBalance.domain.ChangeBalanceQuery; +import com.ruoyi.ss.changeBalance.domain.enums.BusinessType; import com.ruoyi.ss.changeBalance.mapper.ChangeBalanceMapper; import com.ruoyi.ss.changeBalance.service.IChangeBalanceService; import com.ruoyi.ss.user.service.IUserService; @@ -17,6 +18,8 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.List; +import static com.ruoyi.common.constant.ServiceConstants.FLOW_TYPE_INCOME; + /** * 余额变动Service业务层处理 * @@ -138,63 +141,59 @@ public class ChangeBalanceServiceImpl implements IChangeBalanceService */ @Override public int generateChangeBalance(String orderNo,String outTradeNo,String type,String busType,BigDecimal payFee,Long userId,String userName,String phone,String userType) { + // 获取当前余额 + BigDecimal balance = userService.selectUserBalanceById(userId); + + // 计算变更后的余额 + BigDecimal afterBalance; + if (type.equals(FLOW_TYPE_INCOME)) { + afterBalance = balance.add(payFee); + } else { + afterBalance = balance.subtract(payFee); + // 校验余额是否会变成负数 + if (afterBalance.compareTo(BigDecimal.ZERO) < 0) { + throw new ServiceException("余额不足"); + } + } + ChangeBalance rlChangeBalance = new ChangeBalance(); rlChangeBalance.setOrderNo(orderNo); rlChangeBalance.setOutTradeNo(outTradeNo); rlChangeBalance.setType(type); rlChangeBalance.setBusType(busType); - BigDecimal balance = userService.selectUserBalanceById(userId); rlChangeBalance.setBeforeBalance(balance); - if(type.equals("1")){ - rlChangeBalance.setAfterBalance(balance.add(payFee)); - }else{ - rlChangeBalance.setAfterBalance(balance.subtract(payFee)); - } + rlChangeBalance.setAfterBalance(afterBalance); rlChangeBalance.setAmount(payFee); rlChangeBalance.setOwnerId(userId); rlChangeBalance.setOwnerName(userName); rlChangeBalance.setOwnerType(userType); rlChangeBalance.setOwnerPhone(phone); rlChangeBalance.setCreateTime(DateUtils.getNowDate()); + // 根据 busType 生成不同的 reason 描述 - BigDecimal changeAmount = rlChangeBalance.getAmount(); - String reason = ""; - switch (busType) { - case "1": - reason = "订单收入:" + orderNo; - break; - case "2": - reason = "续单订单收入:" + orderNo; - break; - case "4": - reason = "订单退款:" + orderNo; + BigDecimal changeAmount = rlChangeBalance.getAmount(); + String reason = "未知业务类型"; // 默认值 + BusinessType businessType = BusinessType.fromCode(busType); + + if (businessType != null) { + reason = businessType.getDescription() + orderNo; + if (businessType == BusinessType.ORDER_REFUND || businessType == BusinessType.WITHDRAW || businessType == BusinessType.SMS_CHARGE) { changeAmount = changeAmount.negate(); - break; - case "5": - reason = "提现"; - changeAmount = changeAmount.negate(); - break; - case "6": - reason = "提现失败"; - break; - case "8": - reason = "短信扣费"; - changeAmount = changeAmount.negate(); - break; - default: - reason = "未知业务类型"; - break; + } } + rlChangeBalance.setReason(reason); BigDecimal finalChangeAmount = changeAmount; + Boolean execute = transactionTemplate.execute(e -> { int i = insertRlChangeBalance(rlChangeBalance); ServiceUtil.assertion(i == 0, "账变记录插入失败"); - int i2 = userService.changeBalance(finalChangeAmount,userId); + int i2 = userService.changeBalance(finalChangeAmount, userId); ServiceUtil.assertion(i2 == 0, "用户余额改变失败"); return Boolean.TRUE; }); - if(Boolean.FALSE.equals(execute))throw new ServiceException("账变记录插入失败"); + + if (Boolean.FALSE.equals(execute)) throw new ServiceException("账变记录插入失败"); return 1; }