Эх сурвалжийг харах

feat(recommend): 新增推荐规则 Manager 接口与实现

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jintao.geng 1 сар өмнө
parent
commit
944457bce3

+ 27 - 0
mango-manager/src/main/java/com/mangoo/rating/recommend/manager/RatingRecommendRuleManager.java

@@ -0,0 +1,27 @@
+package com.mangoo.rating.recommend.manager;
+
+import com.mangoo.rating.recommend.po.RatingRecommendRulePO;
+
+/**
+ * 评级时效推荐规则 Manager(封装 Mapper,做空值校验与策略上抛)
+ *
+ * @author gengjintao
+ * @date 2026/06/24
+ */
+public interface RatingRecommendRuleManager {
+
+    /**
+     * L1:四字段全等命中(任一为空则不查询,返回 null)
+     */
+    RatingRecommendRulePO selectByExact(String player, String year, String series, String cardSet);
+
+    /**
+     * L2:系列+卡种+年份命中(三个参与字段任一为空则不查询)
+     */
+    RatingRecommendRulePO selectBySeriesSetYear(String series, String cardSet, String year);
+
+    /**
+     * L3:系列+卡种命中(两个参与字段任一为空则不查询)
+     */
+    RatingRecommendRulePO selectBySeriesSet(String series, String cardSet);
+}

+ 57 - 0
mango-manager/src/main/java/com/mangoo/rating/recommend/manager/impl/RatingRecommendRuleManagerImpl.java

@@ -0,0 +1,57 @@
+package com.mangoo.rating.recommend.manager.impl;
+
+import com.mangoo.rating.recommend.manager.RatingRecommendRuleManager;
+import com.mangoo.rating.recommend.mapper.RatingRecommendRuleMapper;
+import com.mangoo.rating.recommend.po.RatingRecommendRulePO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 评级时效推荐规则 Manager 实现
+ *
+ * @author gengjintao
+ * @date 2026/06/24
+ */
+@Slf4j
+@Component
+public class RatingRecommendRuleManagerImpl implements RatingRecommendRuleManager {
+
+    @Resource
+    private RatingRecommendRuleMapper ratingRecommendRuleMapper;
+
+    @Override
+    public RatingRecommendRulePO selectByExact(String player, String year, String series, String cardSet) {
+        // L1 参与字段全部不为空才查询(避免无意义 SQL)
+        if (isBlank(player) || isBlank(year) || isBlank(series) || isBlank(cardSet)) {
+            return null;
+        }
+        return ratingRecommendRuleMapper.selectByExact(player, year, series, cardSet);
+    }
+
+    @Override
+    public RatingRecommendRulePO selectBySeriesSetYear(String series, String cardSet, String year) {
+        // L2 三个参与字段不能为空
+        if (isBlank(series) || isBlank(cardSet) || isBlank(year)) {
+            return null;
+        }
+        return ratingRecommendRuleMapper.selectBySeriesSetYear(series, cardSet, year);
+    }
+
+    @Override
+    public RatingRecommendRulePO selectBySeriesSet(String series, String cardSet) {
+        // L3 两个参与字段不能为空
+        if (isBlank(series) || isBlank(cardSet)) {
+            return null;
+        }
+        return ratingRecommendRuleMapper.selectBySeriesSet(series, cardSet);
+    }
+
+    /**
+     * 简单空白判断(避免引入 commons-lang 仅用一次)
+     */
+    private boolean isBlank(String s) {
+        return s == null || s.trim().isEmpty();
+    }
+}