浏览代码

fix:redis监听逻辑优化,移除答题记录弃用字段

hidewnd 2 周之前
父节点
当前提交
98c96f0fcf

+ 0 - 7
yt-common/src/main/java/com/ytpm/app/model/YtDyzAnswerRecord.java

@@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.math.BigDecimal;
 import java.util.Date;
 
 @Data
@@ -22,10 +21,4 @@ public class YtDyzAnswerRecord {
     private Date answerTime;
     @ApiModelProperty("用户ID")
     private String userId;
-
-    @ApiModelProperty("红包收益")
-    private BigDecimal revenue;
-
-    @ApiModelProperty("红包收益比例")
-    private String revenueRate;
 }

+ 3 - 0
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/dao/AppUserMapper.java

@@ -210,4 +210,7 @@ public interface AppUserMapper {
      * 更新红包余额
      */
     void updateUserRedPacket(@Param("userId") String userId, @Param("revenue") BigDecimal redPackRevenue);
+
+    List<String> queryAppIds();
+
 }

+ 14 - 12
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/monitor/RedisKeyExpirationListener.java

@@ -1,5 +1,6 @@
 package com.ytpm.novel.monitor;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.ytpm.agent.enums.UserStatusEnum;
 import com.ytpm.app.model.YtNovelUser;
@@ -16,6 +17,7 @@ import org.springframework.lang.NonNull;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -53,21 +55,21 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
     @Override
     public void onMessage(@NonNull Message message, byte[] pattern) {
         String key = String.valueOf(message);
-        // 全局监听
-        if (key.startsWith("lock_") || key.startsWith("unlock_")) {
-            String[] arr = key.split("_");
-            if (arr.length < 2) {
-                return;
-            }
+        String[] arr = key.split("_");
+        // 全局监听 e.g lock_202510001
+        if (arr.length >= 2 && (key.startsWith("lock_") || key.startsWith("unlock_"))) {
             handleUserLock(key, arr[1], arr[0]);
+            return;
         }
-        // 仅限自身服务的监听
+        // 仅限自身服务的监听 e.g lime_lock_202510001
         String serviceKey = StrUtil.replace(applicationName, "-service", "");
-        if (key.startsWith(serviceKey)) {
-            String[] arr = key.split("_");
-            if (arr.length < 3) {
-                return;
-            }
+        if (arr.length >= 3 && key.startsWith(serviceKey)) {
+            handleUserLock(key, arr[2], arr[1]);
+            return;
+        }
+        // e.g a685138d49cd2d_lock_202510001
+        List<String> ids = appUserMapper.queryAppIds();
+        if (arr.length >= 3 && CollUtil.isNotEmpty(ids) && ids.contains(arr[0])) {
             handleUserLock(key, arr[2], arr[1]);
         }
     }

+ 1 - 1
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/service/impl/VisitorLoginServiceImpl.java

@@ -216,7 +216,7 @@ public class VisitorLoginServiceImpl extends AbstractLoginService {
                 totalRevenue = adRecordParam.getRevenue() == null ? totalRevenue : totalRevenue.add(adRecordParam.getRevenue());
             }
             log.info(StrUtil.format("[visitor adRecords] userId:{} recordCount:{} revenue:{} ",
-                    ytNovelUser.getUserId(), adRecordIds.size(), totalRevenue));
+                    ytNovelUser.getUserId(), adRecordIds.size(), totalRevenue.toPlainString()));
         }
         if (CollUtil.isEmpty(adRecordIds)) {
             throw new CustomerException(StrUtil.emptyToDefault(defaultConfig.getLowValueTip(), RepMessage.RISK_VISITOR_LOWER_VALUE));

+ 3 - 0
yt-novel/yt-novel-service/src/main/resources/mapper/AppUserMapper.xml

@@ -758,6 +758,9 @@
         where device_id = #{deviceId}
         limit 1
     </select>
+    <select id="queryAppIds" resultType="java.lang.String">
+        select distinct app_id from yt_app_default_config
+    </select>
     <update id="unlockUser">
         update yt_dyz_user
         set user_status = 1

+ 0 - 6
yt-question/yt-question-service/src/main/java/com/ytpm/question/controller/UserController.java

@@ -214,12 +214,6 @@ public class UserController {
                 ifPowerLimit = "766".equals(result.getMessage())
                         || result.getCode() == StatusCode.ACCESS_RISK_ERROR && StrUtil.isNotEmpty(result.getMessage());
             }
-            // 获取今日红包收益
-            BigDecimal todayRedPacketBalance = questionMapper.getAnswerRevenue(userId, 1);
-            if (todayRedPacketBalance != null) {
-                todayRedPacketBalance = todayRedPacketBalance.setScale(5, RoundingMode.HALF_UP);
-            }
-            user.setTodayRedPacketBalance(todayRedPacketBalance);
             user.setIfPowerLimit(ifPowerLimit);
         }
         return Result.resultObjOk(user);

+ 6 - 0
yt-question/yt-question-service/src/main/java/com/ytpm/question/dao/AppUserMapper.java

@@ -15,6 +15,7 @@ import com.ytpm.middle.view.AppUserHourVO;
 import com.ytpm.middle.view.UserRankingListVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.beans.factory.annotation.Value;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -218,4 +219,9 @@ public interface AppUserMapper {
      * 更新红包余额
      */
     void updateUserRedPacket(@Param("userId") String userId, @Param("revenue") BigDecimal redPackRevenue);
+
+    /**
+     * 查询所有AppIds
+     */
+    List<String> queryAppIds();
 }

+ 3 - 9
yt-question/yt-question-service/src/main/java/com/ytpm/question/dao/QuestionMapper.java

@@ -5,7 +5,6 @@ import com.ytpm.app.view.QuestionListView;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
-import java.math.BigDecimal;
 import java.util.List;
 
 @Mapper
@@ -14,7 +13,7 @@ public interface QuestionMapper {
     /**
      * 获取题库
      */
-    List<QuestionListView> questionList(@Param("appId")String appId);
+    List<QuestionListView> questionList(@Param("appId") String appId);
 
     /**
      * 回答问题
@@ -28,15 +27,10 @@ public interface QuestionMapper {
 
     /**
      * 获取答题数
+     *
      * @param type 1-今日 2-历史
      */
-    Integer getAnswerCount(@Param("userId")String userId, @Param("type") int type);
-
-    /**
-     * 获取答题收益
-     * @param type 1-今日 2-历史
-     */
-    BigDecimal getAnswerRevenue(@Param("userId")String userId, @Param("type") int type);
+    Integer getAnswerCount(@Param("userId") String userId, @Param("type") int type);
 
     /**
      * 查询答题历史记录

+ 14 - 12
yt-question/yt-question-service/src/main/java/com/ytpm/question/monitor/RedisKeyExpirationListener.java

@@ -1,5 +1,6 @@
 package com.ytpm.question.monitor;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.ytpm.agent.enums.UserStatusEnum;
 import com.ytpm.app.model.YtDyzUser;
@@ -16,6 +17,7 @@ import org.springframework.lang.NonNull;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -51,21 +53,21 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
     @Override
     public void onMessage(@NonNull Message message, byte[] pattern) {
         String key = String.valueOf(message);
-        // 全局监听
-        if (key.startsWith("lock_") || key.startsWith("unlock_")) {
-            String[] arr = key.split("_");
-            if (arr.length < 2) {
-                return;
-            }
+        String[] arr = key.split("_");
+        // 全局监听 e.g lock_202510001
+        if (arr.length >= 2 && (key.startsWith("lock_") || key.startsWith("unlock_"))) {
             handleUserLock(key, arr[1], arr[0]);
+            return;
         }
-        // 仅限自身服务的监听
+        // 仅限自身服务的监听 e.g lime_lock_202510001
         String serviceKey = StrUtil.replace(applicationName, "-service", "");
-        if (key.startsWith(serviceKey)) {
-            String[] arr = key.split("_");
-            if (arr.length < 3) {
-                return;
-            }
+        if (arr.length >= 3 && key.startsWith(serviceKey)) {
+            handleUserLock(key, arr[2], arr[1]);
+            return;
+        }
+        // e.g a685138d49cd2d_lock_202510001
+        List<String> ids = appUserMapper.queryAppIds();
+        if (arr.length >= 3 && CollUtil.isNotEmpty(ids) && ids.contains(arr[0])) {
             handleUserLock(key, arr[2], arr[1]);
         }
     }

+ 1 - 1
yt-question/yt-question-service/src/main/java/com/ytpm/question/service/impl/VisitorLoginServiceImpl.java

@@ -230,7 +230,7 @@ public class VisitorLoginServiceImpl extends AbstractLoginService {
                 totalRevenue = adRecordParam.getRevenue() == null ? totalRevenue : totalRevenue.add(adRecordParam.getRevenue());
             }
             log.info(StrUtil.format("[visitor adRecords]userId:{} recordCount:{} revenue:{}",
-                    ytDyzUser.getUserId(), adRecordIds.size(), totalRevenue));
+                    ytDyzUser.getUserId(), adRecordIds.size(), totalRevenue.toPlainString()));
         }
         if (CollUtil.isEmpty(adRecordIds)) {
             throw new CustomerException(StrUtil.emptyToDefault(defaultConfig.getLowValueTip(), RepMessage.RISK_VISITOR_LOWER_VALUE));

+ 3 - 0
yt-question/yt-question-service/src/main/resources/mapper/AppUserMapper.xml

@@ -766,6 +766,9 @@
         where device_id = #{deviceId}
         limit 1
     </select>
+    <select id="queryAppIds" resultType="java.lang.String">
+        select distinct app_id from yt_app_default_config
+    </select>
     <update id="unlockUser">
         update yt_dyz_user
         set user_status = 1

+ 3 - 14
yt-question/yt-question-service/src/main/resources/mapper/QuestionMapper.xml

@@ -15,8 +15,8 @@
         </collection>
     </resultMap>
     <insert id="saveAnswerRecord">
-        insert into yt_dyz_answer_record (record_id, question_id, item_id, duration, answer_time, user_id, revenue, revenue_rate)
-        values (#{recordId},#{questionId},#{itemId},#{duration},#{answerTime},#{userId}, #{revenue}, #{revenueRate});
+        insert into yt_dyz_answer_record (record_id, question_id, item_id, duration, answer_time, user_id)
+        values (#{recordId},#{questionId},#{itemId},#{duration},#{answerTime},#{userId});
     </insert>
     <select id="questionList" resultMap="questionListMap">
         SELECT ydq.question_id,
@@ -48,24 +48,13 @@
             and DATE_FORMAT(answer_time, '%Y-%m-%d') = current_date()
         </if>
     </select>
-    <select id="getAnswerRevenue" resultType="java.math.BigDecimal">
-        select
-        sum(revenue * revenue_rate)
-        from yt_dyz_answer_record
-        where user_id = #{userId} and revenue is not null and revenue_rate is not null
-        <if test="type != null and type == 1">
-            and DATE_FORMAT(answer_time, '%Y-%m-%d') = current_date()
-        </if>
-    </select>
     <select id="getAnswerRecords" resultType="com.ytpm.app.model.YtDyzAnswerRecord">
         select record_id,
                question_id,
                item_id,
                duration,
                answer_time,
-               user_id,
-               revenue,
-               revenue_rate
+               user_id
         from yt_dyz_answer_record
         where user_id = #{userId}
         order by answer_time desc