Bläddra i källkod

feat(recommend): 新增推荐规则 Mapper 与 XML(L1/L2/L3 三层精确查询)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jintao.geng 1 månad sedan
förälder
incheckning
a15537e7c4

+ 36 - 0
mango-infrastructure/src/main/java/com/mangoo/rating/recommend/mapper/RatingRecommendRuleMapper.java

@@ -0,0 +1,36 @@
+package com.mangoo.rating.recommend.mapper;
+
+import com.mangoo.rating.recommend.po.RatingRecommendRulePO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 评级时效推荐规则 Mapper(本期仅只读查询)
+ *
+ * @author gengjintao
+ * @date 2026/06/24
+ */
+@Mapper
+public interface RatingRecommendRuleMapper {
+
+    /**
+     * L1:四字段全等命中(取最新生效)
+     */
+    RatingRecommendRulePO selectByExact(@Param("player") String player,
+                                        @Param("year") String year,
+                                        @Param("series") String series,
+                                        @Param("cardSet") String cardSet);
+
+    /**
+     * L2:series + cardSet + year 命中(player 放宽)
+     */
+    RatingRecommendRulePO selectBySeriesSetYear(@Param("series") String series,
+                                                @Param("cardSet") String cardSet,
+                                                @Param("year") String year);
+
+    /**
+     * L3:series + cardSet 命中(player + year 放宽)
+     */
+    RatingRecommendRulePO selectBySeriesSet(@Param("series") String series,
+                                            @Param("cardSet") String cardSet);
+}

+ 64 - 0
mango-infrastructure/src/main/resources/mapper/RatingRecommendRuleMapper.xml

@@ -0,0 +1,64 @@
+<?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="com.mangoo.rating.recommend.mapper.RatingRecommendRuleMapper">
+
+    <resultMap type="com.mangoo.rating.recommend.po.RatingRecommendRulePO" id="BaseResultMap">
+        <result property="id" column="id"/>
+        <result property="player" column="player"/>
+        <result property="year" column="year"/>
+        <result property="series" column="series"/>
+        <result property="cardSet" column="card_set"/>
+        <result property="recommendEfficiency" column="recommend_efficiency"/>
+        <result property="effectiveTime" column="effective_time"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="delFlag" column="del_flag"/>
+    </resultMap>
+
+    <sql id="baseColumnList">
+        id, player, year, series, card_set, recommend_efficiency, effective_time,
+        create_time, update_time, del_flag
+    </sql>
+
+    <!-- L1:四字段全等命中(取最新生效) -->
+    <select id="selectByExact" resultMap="BaseResultMap">
+        SELECT <include refid="baseColumnList"/>
+        FROM t_rating_recommend_rule
+        WHERE del_flag = 0
+          AND player = #{player}
+          AND year = #{year}
+          AND series = #{series}
+          AND card_set = #{cardSet}
+          AND (effective_time IS NULL OR effective_time &lt;= now())
+        ORDER BY effective_time DESC NULLS LAST, id DESC
+        LIMIT 1
+    </select>
+
+    <!-- L2:系列+卡种+年份命中 -->
+    <select id="selectBySeriesSetYear" resultMap="BaseResultMap">
+        SELECT <include refid="baseColumnList"/>
+        FROM t_rating_recommend_rule
+        WHERE del_flag = 0
+          AND series = #{series}
+          AND card_set = #{cardSet}
+          AND year = #{year}
+          AND (effective_time IS NULL OR effective_time &lt;= now())
+        ORDER BY effective_time DESC NULLS LAST, id DESC
+        LIMIT 1
+    </select>
+
+    <!-- L3:系列+卡种命中 -->
+    <select id="selectBySeriesSet" resultMap="BaseResultMap">
+        SELECT <include refid="baseColumnList"/>
+        FROM t_rating_recommend_rule
+        WHERE del_flag = 0
+          AND series = #{series}
+          AND card_set = #{cardSet}
+          AND (effective_time IS NULL OR effective_time &lt;= now())
+        ORDER BY effective_time DESC NULLS LAST, id DESC
+        LIMIT 1
+    </select>
+
+</mapper>