Bläddra i källkod

权益规则数据优化

skyline 1 år sedan
förälder
incheckning
c36a243163

+ 7 - 0
entity/src/main/java/com/kym/entity/miniapp/UserCoupon.java

@@ -1,5 +1,6 @@
 package com.kym.entity.miniapp;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -50,6 +51,12 @@ public class UserCoupon extends BaseEntity {
      */
     private Long activityId;
 
+    /**
+     * 活动规则描述
+     */
+    @TableField(exist = false)
+    private String activityDesc;
+
     /**
      * 主活动名称
      */

+ 7 - 0
entity/src/main/java/com/kym/entity/miniapp/UserRechargeRights.java

@@ -1,5 +1,6 @@
 package com.kym.entity.miniapp;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.kym.entity.BaseEntity;
@@ -38,6 +39,12 @@ public class UserRechargeRights extends BaseEntity {
      */
     private Long activityId;
 
+    /**
+     * 活动规则描述
+     */
+    @TableField(exist = false)
+    private String activityDesc;
+
     /**
      * 用户id
      */

+ 28 - 6
service/src/main/java/com/kym/service/miniapp/impl/AccountServiceImpl.java

@@ -2,12 +2,16 @@ package com.kym.service.miniapp.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.kym.common.utils.CommUtil;
+import com.kym.entity.admin.Activity;
 import com.kym.entity.miniapp.Account;
 import com.kym.entity.miniapp.UserCoupon;
 import com.kym.entity.miniapp.UserRechargeRights;
 import com.kym.entity.miniapp.vo.UserRightsAndCouponsVo;
 import com.kym.mapper.miniapp.AccountMapper;
+import com.kym.service.admin.ActivityService;
 import com.kym.service.miniapp.AccountService;
 import com.kym.service.miniapp.UserCouponService;
 import com.kym.service.miniapp.UserRechargeRightsService;
@@ -15,8 +19,8 @@ import com.kym.service.mybatisplus.MyBaseServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -34,9 +38,12 @@ public class AccountServiceImpl extends MyBaseServiceImpl<AccountMapper, Account
 
     private final UserCouponService userCouponService;
 
-    public AccountServiceImpl(UserRechargeRightsService userRechargeRightsService, UserCouponService userCouponService) {
+    private final ActivityService activityService;
+
+    public AccountServiceImpl(UserRechargeRightsService userRechargeRightsService, UserCouponService userCouponService, ActivityService activityService) {
         this.userRechargeRightsService = userRechargeRightsService;
         this.userCouponService = userCouponService;
+        this.activityService = activityService;
     }
 
     @Override
@@ -51,6 +58,7 @@ public class AccountServiceImpl extends MyBaseServiceImpl<AccountMapper, Account
      */
     @Override
     public UserRightsAndCouponsVo listRightsAndCoupons() {
+        var activityIdList = new ArrayList<>();
         var vo = new UserRightsAndCouponsVo();
         var userId = StpUtil.getLoginIdAsLong();
         vo.setUserId(userId);
@@ -61,7 +69,7 @@ public class AccountServiceImpl extends MyBaseServiceImpl<AccountMapper, Account
                 .orderByDesc(UserRechargeRights::getStatus)
                 .orderByAsc(UserRechargeRights::getEndTime)
                 .list();
-        vo.setUserRechargeRightsList(userRechargeRight);
+        activityIdList.addAll(userRechargeRight.stream().map(UserRechargeRights::getActivityId).toList());
 
         // 当前用户的优惠券列表(含已失效)
         var usesrCouponList = userCouponService.lambdaQuery()
@@ -70,8 +78,22 @@ public class AccountServiceImpl extends MyBaseServiceImpl<AccountMapper, Account
                 .orderByAsc(UserCoupon::getUsageStatus)
                 .orderByAsc(UserCoupon::getEndTime)
                 .list();
-        vo.setUserCouponList(usesrCouponList);
-
+        activityIdList.addAll(usesrCouponList.stream().map(UserCoupon::getActivityId).toList());
+
+        // 手动切换数据源
+        if(CommUtil.isNotEmptyAndNull(activityIdList)){
+            DynamicDataSourceContextHolder.push("db-admin");
+            var res= activityService.lambdaQuery().in(Activity::getId, activityIdList).list()
+                    .stream()
+                    .filter(item -> item.getActivityDesc() != null)
+                    .collect(Collectors.toMap(Activity::getId, Activity::getActivityDesc));
+            DynamicDataSourceContextHolder.poll();
+
+            userRechargeRight.forEach(userRechargeRights -> userRechargeRights.setActivityDesc(res.get(userRechargeRights.getActivityId())));
+            usesrCouponList.forEach(userCoupon -> userCoupon.setActivityDesc(res.get(userCoupon.getActivityId())));
+            vo.setUserRechargeRightsList(userRechargeRight);
+            vo.setUserCouponList(usesrCouponList);
+        }
         return vo;
     }