浏览代码

feat(recommend): 添加用户浏览记录查询和更新功能

- 在RecommendMapper中添加selectUserLook方法用于查询用户浏览记录
- 在RecommendMapper中添加updateUserLookTime方法用于更新浏览记录时间
- 优化insertUserLook的SQL逻辑,使用ON DUPLICATE KEY UPDATE替代先更新后插入的方案
- 在RecommendServiceImpl中实现浏览记录的条件处理逻辑
- 添加对已存在浏览记录的更新操作支持
- 保持新记录插入功能的完整性
李思佳 3 天之前
父节点
当前提交
9bfaa395b9

+ 6 - 0
service/Recommend/src/main/java/com/zhentao/mapper/RecommendMapper.java

@@ -55,9 +55,15 @@ public interface RecommendMapper {
     // 统计喜欢当前用户的用户数量
     Integer countUsersWhoLikedMe(@Param("userId") Integer userId);
     
+    // 查询用户浏览记录
+    com.zhentao.pojo.UserLook selectUserLook(@Param("userId") Integer userId, @Param("lookUserId") Integer lookUserId);
+    
     // 插入用户浏览记录
     int insertUserLook(@Param("userId") Integer userId, @Param("lookUserId") Integer lookUserId);
     
+    // 更新用户浏览记录的update_time
+    int updateUserLookTime(@Param("userId") Integer userId, @Param("lookUserId") Integer lookUserId);
+    
     // 查询用户浏览的列表
     List<RecommendUserVO> selectLookedUsers(@Param("userId") Integer userId, @Param("offset") Integer offset, @Param("limit") Integer limit);
     

+ 11 - 2
service/Recommend/src/main/java/com/zhentao/service/impl/RecommendServiceImpl.java

@@ -534,8 +534,17 @@ public class RecommendServiceImpl implements RecommendService {
             throw new IllegalArgumentException("userId and lookUserId cannot be null");
         }
         try {
-            int result = recommendMapper.insertUserLook(userId, lookUserId);
-            return result > 0;
+            // 查询是否已经浏览过此用户
+            com.zhentao.pojo.UserLook existing = recommendMapper.selectUserLook(userId, lookUserId);
+            if (existing != null) {
+                // 如果存在,更新update_time字段
+                int result = recommendMapper.updateUserLookTime(userId, lookUserId);
+                return result > 0;
+            } else {
+                // 如果不存在,插入新记录
+                int result = recommendMapper.insertUserLook(userId, lookUserId);
+                return result > 0;
+            }
         } catch (Exception ex) {
             log.error("saveUserLook failed", ex);
             return false;

+ 20 - 8
service/Recommend/src/main/resources/mapper/RecommendMapper.xml

@@ -669,15 +669,9 @@
     <!-- 插入用户浏览记录 -->
     <insert id="insertUserLook">
         <![CDATA[
-        -- 先尝试更新,如果存在记录则更新时间
-        UPDATE user_look 
-        SET update_time = NOW() 
-        WHERE user_id = #{userId} AND look_user_id = #{lookUserId};
-        
-        -- 如果没有更新任何记录,则插入新记录
         INSERT INTO user_look (user_id, look_user_id, create_time, update_time)
-        SELECT #{userId}, #{lookUserId}, NOW(), NOW()
-        WHERE ROW_COUNT() = 0;
+        VALUES (#{userId}, #{lookUserId}, NOW(), NOW())
+        ON DUPLICATE KEY UPDATE update_time = NOW()
         ]]>
     </insert>
     
@@ -736,6 +730,24 @@
           AND u.status = 1
         ]]>
     </select>
+    
+    <!-- 查询用户浏览记录 -->
+    <select id="selectUserLook" resultType="com.zhentao.pojo.UserLook">
+        <![CDATA[
+        SELECT user_id, look_user_id, create_time, update_time 
+        FROM user_look 
+        WHERE user_id = #{userId} AND look_user_id = #{lookUserId}
+        ]]>
+    </select>
+    
+    <!-- 更新用户浏览记录的update_time -->
+    <update id="updateUserLookTime">
+        <![CDATA[
+        UPDATE user_look 
+        SET update_time = NOW() 
+        WHERE user_id = #{userId} AND look_user_id = #{lookUserId}
+        ]]>
+    </update>
 </mapper>