Pārlūkot izejas kodu

VipPlan 不存储在 db, 而是使用 VipMember enum

reghao 5 mēneši atpakaļ
vecāks
revīzija
546b44a93a

+ 1 - 1
user/user-service/src/main/java/cn/reghao/tnb/user/app/controller/UserVipController.java

@@ -4,7 +4,7 @@ import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.web.WebResult;
 import cn.reghao.tnb.common.auth.AuthUser;
 import cn.reghao.tnb.user.app.model.dto.BuyVip;
-import cn.reghao.tnb.user.app.model.po.VipPlan;
+import cn.reghao.tnb.user.app.model.vo.VipPlan;
 import cn.reghao.tnb.user.app.model.vo.MyVip;
 import cn.reghao.tnb.user.app.service.UserVipService;
 import io.swagger.v3.oas.annotations.tags.Tag;

+ 0 - 14
user/user-service/src/main/java/cn/reghao/tnb/user/app/db/mapper/VipPlanMapper.java

@@ -1,14 +0,0 @@
-package cn.reghao.tnb.user.app.db.mapper;
-
-import cn.reghao.jutil.jdk.db.BaseMapper;
-import cn.reghao.tnb.user.app.model.po.VipPlan;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author reghao
- * @date 2024-07-06 16:49:51
- */
-@Mapper
-public interface VipPlanMapper extends BaseMapper<VipPlan> {
-    VipPlan findByPlanId(int planId);
-}

+ 52 - 0
user/user-service/src/main/java/cn/reghao/tnb/user/app/model/constant/VipMember.java

@@ -0,0 +1,52 @@
+package cn.reghao.tnb.user.app.model.constant;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author reghao
+ * @date 2025-10-16 11:17:17
+ */
+public enum VipMember {
+    Month(1, "月度会员", 9.9, 30),
+    Season(2, "季度会员", 28.9, 90),
+    Year(3, "年度会员", 99.9, 365);
+
+    private final int planId;
+    private final String name;
+    private final double price;
+    private final int duration;
+    VipMember(int planId, String name, double price, int duration) {
+        this.planId = planId;
+        this.name = name;
+        this.price = price;
+        this.duration = duration;
+    }
+
+    private static final Map<Integer, VipMember> vipPlanMap = new HashMap<>();
+    static {
+        for (VipMember vipMember : VipMember.values()) {
+            vipPlanMap.put(vipMember.planId, vipMember);
+        }
+    }
+
+    public static VipMember getByPlanId(int planId) {
+        return vipPlanMap.get(planId);
+    }
+
+    public int getPlanId() {
+        return planId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public double getPrice() {
+        return price;
+    }
+
+    public int getDuration() {
+        return duration;
+    }
+}

+ 0 - 20
user/user-service/src/main/java/cn/reghao/tnb/user/app/model/po/VipPlan.java

@@ -1,20 +0,0 @@
-package cn.reghao.tnb.user.app.model.po;
-
-import cn.reghao.jutil.jdk.db.BaseObject;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-
-/**
- * @author reghao
- * @date 2024-07-06 12:16:48
- */
-@AllArgsConstructor
-@NoArgsConstructor
-@Getter
-public class VipPlan extends BaseObject<Integer> {
-    private Integer planId;
-    private String name;
-    private Double price;
-    private Integer duration;
-}

+ 25 - 0
user/user-service/src/main/java/cn/reghao/tnb/user/app/model/vo/VipPlan.java

@@ -0,0 +1,25 @@
+package cn.reghao.tnb.user.app.model.vo;
+
+import cn.reghao.tnb.user.app.model.constant.VipMember;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author reghao
+ * @date 2024-07-06 12:16:48
+ */
+@NoArgsConstructor
+@Getter
+public class VipPlan {
+    private Integer planId;
+    private String name;
+    private Double price;
+    private Integer duration;
+
+    public VipPlan(VipMember vipMember) {
+        this.planId = vipMember.getPlanId();
+        this.name = vipMember.getName();
+        this.price = vipMember.getPrice();
+        this.duration = vipMember.getDuration();
+    }
+}

+ 1 - 1
user/user-service/src/main/java/cn/reghao/tnb/user/app/service/AdminUserService.java

@@ -15,7 +15,7 @@ import cn.reghao.tnb.user.api.dto.WalletChargeDto;
 import cn.reghao.tnb.user.api.iface.UserWalletService;
 import cn.reghao.tnb.user.app.db.mapper.UserProfileMapper;
 import cn.reghao.tnb.user.app.model.po.UserProfile;
-import cn.reghao.tnb.user.app.model.po.VipPlan;
+import cn.reghao.tnb.user.app.model.vo.VipPlan;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;

+ 11 - 8
user/user-service/src/main/java/cn/reghao/tnb/user/app/service/UserVipService.java

@@ -4,16 +4,18 @@ import cn.reghao.jutil.jdk.converter.DateTimeConverter;
 import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.tnb.common.auth.UserContext;
 import cn.reghao.tnb.user.app.db.mapper.UserVipMapper;
-import cn.reghao.tnb.user.app.db.mapper.VipPlanMapper;
+import cn.reghao.tnb.user.app.model.constant.VipMember;
 import cn.reghao.tnb.user.app.model.dto.BuyVip;
 import cn.reghao.tnb.user.app.model.po.UserVip;
-import cn.reghao.tnb.user.app.model.po.VipPlan;
+import cn.reghao.tnb.user.app.model.vo.VipPlan;
 import cn.reghao.tnb.user.app.model.vo.MyVip;
 import org.springframework.stereotype.Service;
 
 import java.time.Duration;
 import java.time.LocalDateTime;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -22,12 +24,10 @@ import java.util.List;
 @Service
 public class UserVipService {
     private final UserVipMapper userVipMapper;
-    private final VipPlanMapper vipPlanMapper;
     private final WalletService walletService;
 
-    public UserVipService(UserVipMapper userVipMapper, VipPlanMapper vipPlanMapper, WalletService walletService) {
+    public UserVipService(UserVipMapper userVipMapper, WalletService walletService) {
         this.userVipMapper = userVipMapper;
-        this.vipPlanMapper = vipPlanMapper;
         this.walletService = walletService;
     }
 
@@ -54,16 +54,19 @@ public class UserVipService {
     }
 
     public List<VipPlan> getVipPlans() {
-        return vipPlanMapper.findAll();
+        return Arrays.stream(VipMember.values())
+                .map(VipPlan::new)
+                .collect(Collectors.toList());
     }
 
     public Result buyVip(BuyVip buyVip) throws Exception {
         int planId = buyVip.getPlanId();
-        VipPlan vipPlan = vipPlanMapper.findByPlanId(planId);
-        if (vipPlan == null) {
+        VipMember vipMember = VipMember.getByPlanId(planId);
+        if (vipMember == null) {
             return Result.fail("vip 计划不存在");
         }
 
+        VipPlan vipPlan = new VipPlan(vipMember);
         long userId = UserContext.getUserId();
         try {
             double price = vipPlan.getPrice();

+ 0 - 14
user/user-service/src/main/resources/mapper/VipPlanMapper.xml

@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-<mapper namespace="cn.reghao.tnb.user.app.db.mapper.VipPlanMapper">
-    <select id="findAll" resultType="cn.reghao.tnb.user.app.model.po.VipPlan">
-        select *
-        from user_vip_plan
-    </select>
-    <select id="findByPlanId" resultType="cn.reghao.tnb.user.app.model.po.VipPlan">
-        select *
-        from user_vip_plan
-        where plan_id=#{planId}
-    </select>
-</mapper>