Kaynağa Gözat

feat(account): 增加兑换余额及积分字段并完善账户变更逻辑

- 在UserAccount及相关VO、Form类中新增兑换余额和积分字段
- 修改账户余额变更逻辑,支持兑换余额的增加和扣减
- 调整账户变动日志记录,合并兑换余额与账户余额计算
- 优化后台用户信息相关积分字段的移除及重构
- 新增首页广告弹窗接口方法
- 优化数据库Mapper映射,新增兑换余额和积分字段映射
- 补充系统常量中兑换变更类型定义
wzq 1 gün önce
ebeveyn
işleme
050d3c0500

+ 5 - 0
src/main/java/com/zsElectric/boot/business/controller/applet/AppletHomeController.java

@@ -72,6 +72,11 @@ public class AppletHomeController {
         return Result.success(appletHomeService.getBannerList(location));
     }
 
+    /**
+     * 获取首页广告弹窗列表
+     *
+     * @return 广告弹窗列表
+     */
     @Operation(summary = "获取首页广告弹窗列表")
     @GetMapping("/getAdvertisingList")
     public Result<List<Advertising>> getAdvertisingList() {

+ 4 - 4
src/main/java/com/zsElectric/boot/business/model/entity/UserAccount.java

@@ -30,13 +30,13 @@ public class UserAccount extends BaseEntity {
      */
     private BigDecimal balance;
     /**
-     * 交易码
+     * 兑换余额
      */
-    private String tradeCode;
+    private BigDecimal redeemBalance;
     /**
-     * 欠款金额
+     * 积分
      */
-    private BigDecimal amountOwed;
+    private Integer integral;
     /**
      * 创建人
      */

+ 0 - 4
src/main/java/com/zsElectric/boot/business/model/entity/UserInfo.java

@@ -37,10 +37,6 @@ public class UserInfo extends BaseEntity {
      * 微信openid
      */
     private String openid;
-    /**
-     * 积分
-     */
-    private BigDecimal integralNum;
     /**
      * 所属第三方(无则为自营)
      */

+ 4 - 5
src/main/java/com/zsElectric/boot/business/model/form/UserAccountForm.java

@@ -33,12 +33,11 @@ public class UserAccountForm implements Serializable {
     @Schema(description = "可用抵用券余额")
     private BigDecimal balance;
 
-    @Schema(description = "交易码")
-    @Size(max=255, message="交易码长度不能超过255个字符")
-    private String tradeCode;
+    @Schema(description = "兑换余额")
+    private String redeemBalance;
 
-    @Schema(description = "欠款金额")
-    private BigDecimal amountOwed;
+    @Schema(description = "积分")
+    private Integer integral;
 
     @Schema(description = "创建时间")
     @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")

+ 0 - 3
src/main/java/com/zsElectric/boot/business/model/form/UserInfoForm.java

@@ -42,9 +42,6 @@ public class UserInfoForm implements Serializable {
     @Size(max=128, message="微信openid长度不能超过128个字符")
     private String openid;
 
-    @Schema(description = "积分")
-    private BigDecimal integralNum;
-
     @Schema(description = "所属第三方(无则为自营)")
     private Long groupId;
 

+ 2 - 0
src/main/java/com/zsElectric/boot/business/model/vo/CouponVO.java

@@ -56,4 +56,6 @@ public class CouponVO implements Serializable {
     private LocalDateTime updateTime;
     @Schema(description = "逻辑删除(0-未删除 1-已删除)")
     private Integer isDeleted;
+    @Schema(description = "优惠劵是否可用")
+    private Boolean orUseAble;
 }

+ 4 - 4
src/main/java/com/zsElectric/boot/business/model/vo/UserAccountVO.java

@@ -31,10 +31,10 @@ public class UserAccountVO implements Serializable {
     private Long userId;
     @Schema(description = "可用抵用券余额")
     private BigDecimal balance;
-    @Schema(description = "交易码")
-    private String tradeCode;
-    @Schema(description = "欠款金额")
-    private BigDecimal amountOwed;
+    @Schema(description = "兑换余额")
+    private String redeemBalance;
+    @Schema(description = "积分")
+    private Integer integral;
     @Schema(description = "创建时间")
     private LocalDateTime createTime;
     @Schema(description = "创建人")

+ 0 - 2
src/main/java/com/zsElectric/boot/business/model/vo/UserInfoVO.java

@@ -35,8 +35,6 @@ public class UserInfoVO implements Serializable {
     private String phone;
     @Schema(description = "微信openid")
     private String openid;
-    @Schema(description = "积分")
-    private BigDecimal integralNum;
     @Schema(description = "所属第三方(无则为自营)")
     private Long groupId;
     @Schema(description = "创建时间")

+ 12 - 8
src/main/java/com/zsElectric/boot/business/model/vo/applet/AppUserInfoVO.java

@@ -32,30 +32,34 @@ public class AppUserInfoVO implements Serializable {
      * 微信openid
      */
     private String openid;
-    /**
-     * 积分
-     */
-    private BigDecimal integralNum;
     /**
      * 所属第三方(无则为自营)
      */
     private Long groupId;
-
     /**
      * 可用抵用券余额
      */
     private BigDecimal balance;
-
+    /**
+     * 兑换余额
+     */
+    private BigDecimal redeemBalance;
+    /**
+     * 账户余额
+     */
+    private BigDecimal accountBalance;
+    /**
+     * 积分
+     */
+    private Integer integral;
     /**
      * 企业ID
      */
     private Long firmId;
-
     /**
      * 用户企业身份 1 管理员 2普通员工
      */
     private Integer firmUserType;
-
     /**
      * 企业名称
      */

+ 26 - 9
src/main/java/com/zsElectric/boot/business/service/impl/UserAccountServiceImpl.java

@@ -109,7 +109,7 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountMapper, UserA
      * 更新账户余额并记录日志
      *
      * @param userId 用户ID
-     * @param changeAmount 变更金额(正数为增加,负数为减少)
+     * @param changeAmount 变更金额
      * @param changeType 变更类型(1-增加,2-减少)
      * @param changeNote 变更备注
      * @param changeId 变更记录编号(订单号或充电订单号)
@@ -123,20 +123,37 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountMapper, UserA
         
         // 创建账户变动日志
         UserAccountLog accountLog = new UserAccountLog();
-        accountLog.setBeforeBalance(userAccount.getBalance());
+        accountLog.setBeforeBalance(userAccount.getBalance().add(userAccount.getRedeemBalance()));
         
         // 计算变更后余额
         BigDecimal finalBalance;
         if (SystemConstants.CHANGE_TYPE_ADD.equals(changeType)) {
             // 增加余额
             finalBalance = userAccount.getBalance().add(changeAmount);
-        } else {
-            // 减少余额
-            finalBalance = userAccount.getBalance().subtract(changeAmount);
+            // 更新账户余额
+            userAccount.setBalance(finalBalance);
+        }
+        else if (SystemConstants.REDEEM_CHANGE_TYPE_ADD.equals(changeType)) {
+            // 增加兑换余额
+            finalBalance = userAccount.getRedeemBalance().subtract(changeAmount);
+            // 减去账户余额
+            userAccount.setRedeemBalance(finalBalance);
+        }
+        else{
+            // 减少余额,有限减少兑换余额,不够的再减抵用余额
+            if (userAccount.getRedeemBalance().compareTo(changeAmount) >= 0) {
+                // 兑换余额充足,直接减少
+                finalBalance = userAccount.getBalance().subtract(changeAmount);
+                // 减去账户余额
+                userAccount.setRedeemBalance(finalBalance);
+            } else {
+                // 账户余额不足,先减去兑换余额,不够的再减抵用余额
+                BigDecimal subtract = changeAmount.subtract(userAccount.getRedeemBalance());
+                finalBalance = userAccount.getBalance().subtract(subtract);
+                userAccount.setRedeemBalance(BigDecimal.ZERO);
+                userAccount.setBalance(finalBalance);
+            }
         }
-        
-        // 更新账户余额
-        userAccount.setBalance(finalBalance);
         this.updateById(userAccount);
         
         // 保存变动日志
@@ -145,7 +162,7 @@ public class UserAccountServiceImpl extends ServiceImpl<UserAccountMapper, UserA
         accountLog.setChangeNote(changeNote);
         accountLog.setChangeId(changeId);
         accountLog.setAccountType(SystemConstants.ACCOUNT_TYPE_PERSONAL);
-        accountLog.setChangeBalance(finalBalance);
+        accountLog.setChangeBalance(userAccount.getBalance().add(userAccount.getRedeemBalance()));
         userAccountLogMapper.insert(accountLog);
         
         return userAccount;

+ 1 - 1
src/main/java/com/zsElectric/boot/business/service/impl/UserInfoServiceImpl.java

@@ -216,7 +216,7 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> i
         newUser.setPhone(phone);
         newUser.setOpenid(openId);
         newUser.setNickName("微信用户_" + phone.substring(phone.length() - 4));
-        newUser.setIntegralNum(java.math.BigDecimal.ZERO);
+
         
         boolean saved = this.save(newUser);
         if (!saved) {

+ 1 - 0
src/main/java/com/zsElectric/boot/common/constant/SystemConstants.java

@@ -56,6 +56,7 @@ public interface SystemConstants {
      */
     Integer CHANGE_TYPE_ADD = 1;
     Integer CHANGE_TYPE_REDUCE = 2;
+    Integer REDEEM_CHANGE_TYPE_ADD = 3;
 
     /**
      * 账户类型  1-个人账户 2-集团账户

+ 0 - 1
src/main/java/com/zsElectric/boot/system/service/impl/UserServiceImpl.java

@@ -352,7 +352,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         newUserInfo.setPhone(mobile);
         newUserInfo.setOpenid(openId); // openId 可以为 null
         newUserInfo.setNickName("微信用户_" + mobile.substring(mobile.length() - 4)); // 使用手机号后4位作为昵称
-        newUserInfo.setIntegralNum(BigDecimal.ZERO); // 初始积分为0
         newUserInfo.setCreateTime(LocalDateTime.now());
         newUserInfo.setUpdateTime(LocalDateTime.now());
         

+ 2 - 2
src/main/resources/mapper/business/UserAccountMapper.xml

@@ -8,8 +8,8 @@
                 id,
                 user_id,
                 balance,
-                trade_code,
-                amount_owed,
+                redeem_balance,
+                integral,
                 create_time,
                 create_by,
                 update_time,

+ 3 - 2
src/main/resources/mapper/business/UserInfoMapper.xml

@@ -11,7 +11,6 @@
         fi.name AS firmName,
         ui.phone,
         ui.openid,
-        ui.integral_num,
         ui.group_id,
         ui.create_time,
         ui.create_by,
@@ -33,9 +32,11 @@
                 ui.nick_name,
                 ui.phone,
                 ui.openid,
-                ui.integral_num,
+                ua.integral,
                 ui.group_id,
                 ua.balance,
+                ua.redeem_balance,
+                (ua.balance + ua.redeem_balance) AS accountBalance,
                 uf.firm_id,
                 uf.type AS firmUserType,
                 fi.name AS firmName