add:新增知识库功能

This commit is contained in:
zhangzq
2026-01-28 15:19:33 +08:00
parent d75da90e63
commit 42dd6d29f0
28 changed files with 4513 additions and 161 deletions

View File

@@ -0,0 +1,63 @@
<?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.boge.modules.knowledge.service.dao.CommentMapper">
<!-- 评论VO结果映射 -->
<resultMap id="commentVOMap" type="com.boge.modules.knowledge.service.dto.CommentVO">
<id column="id" property="id"/>
<result column="knowledge_id" property="knowledgeId"/>
<result column="user_id" property="userId"/>
<result column="username" property="username"/>
<result column="nickname" property="nickname"/>
<result column="user_avatar" property="userAvatar"/>
<result column="parent_id" property="parentId"/>
<result column="content" property="content"/>
<result column="like_count" property="likeCount"/>
<result column="status" property="status"/>
<result column="create_time" property="createTime"/>
</resultMap>
<!-- 分页查询评论列表 -->
<select id="queryPage" resultMap="commentVOMap">
SELECT
c.id,
c.knowledge_id,
c.user_id,
u.username,
u.nickname,
u.img AS user_avatar,
c.parent_id,
c.content,
c.like_count,
c.status,
c.create_time
FROM comment c
LEFT JOIN sys_user u ON c.user_id = u.user_id
<where>
c.status = 1
<if test="knowledgeId != null">
AND c.knowledge_id = #{knowledgeId}
</if>
<if test="parentId != null">
AND c.parent_id = #{parentId}
</if>
</where>
ORDER BY c.create_time DESC
</select>
<!-- 增加评论点赞数 -->
<update id="increaseLikeCount">
UPDATE comment
SET like_count = like_count + 1
WHERE id = #{id}
</update>
<!-- 减少评论点赞数 -->
<update id="decreaseLikeCount">
UPDATE comment
SET like_count = CASE WHEN like_count > 0 THEN like_count - 1 ELSE 0 END
WHERE id = #{id}
</update>
</mapper>

View File

@@ -0,0 +1,149 @@
<?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.boge.modules.knowledge.service.dao.KnowledgeMapper">
<!-- 知识文档VO结果映射 -->
<resultMap id="knowledgeVOMap" type="com.boge.modules.knowledge.service.dto.KnowledgeVO">
<id column="id" property="id"/>
<result column="title" property="title"/>
<result column="subtitle" property="subtitle"/>
<result column="content" property="content"/>
<result column="summary" property="summary"/>
<result column="category_id" property="categoryId"/>
<result column="author_id" property="authorId"/>
<result column="author_name" property="authorName"/>
<result column="cover_image" property="coverImage"/>
<result column="view_count" property="viewCount"/>
<result column="like_count" property="likeCount"/>
<result column="collect_count" property="collectCount"/>
<result column="version" property="version"/>
<result column="status" property="status"/>
<result column="publish_time" property="publishTime"/>
<result column="expire_time" property="expireTime"/>
<result column="is_top" property="isTop"/>
<result column="tags" property="tags"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
</resultMap>
<!-- 分页查询知识文档列表 -->
<select id="queryPage" resultMap="knowledgeVOMap">
SELECT
k.id,
k.title,
k.subtitle,
k.summary,
k.category_id,
k.author_id,
u.username AS author_name,
k.cover_image,
k.view_count,
k.like_count,
k.collect_count,
k.version,
k.status,
k.publish_time,
k.expire_time,
k.is_top,
k.tags,
k.create_time,
k.update_time
FROM knowledge k
LEFT JOIN sys_user u ON k.author_id = u.user_id
<where>
<if test="query.title != null and query.title != ''">
AND k.title LIKE CONCAT('%', #{query.title}, '%')
</if>
<if test="query.categoryId != null">
AND k.category_id = #{query.categoryId}
</if>
<if test="query.authorId != null">
AND k.author_id = #{query.authorId}
</if>
<if test="query.status != null and query.status != ''">
AND k.status = #{query.status}
</if>
<if test="query.tag != null and query.tag != ''">
AND FIND_IN_SET(#{query.tag}, k.tags)
</if>
<if test="query.isTop != null">
AND k.is_top = #{query.isTop}
</if>
</where>
ORDER BY
<choose>
<when test="query.orderBy == 'view_count'">
k.view_count
</when>
<when test="query.orderBy == 'like_count'">
k.like_count
</when>
<when test="query.orderBy == 'publish_time'">
k.publish_time
</when>
<otherwise>
k.create_time
</otherwise>
</choose>
<choose>
<when test="query.order == 'asc'">
ASC
</when>
<otherwise>
DESC
</otherwise>
</choose>
</select>
<!-- 根据ID查询知识文档详情 -->
<select id="getKnowledgeDetail" resultMap="knowledgeVOMap">
SELECT
k.id,
k.title,
k.subtitle,
k.content,
k.plain_content,
k.summary,
k.category_id,
k.author_id,
u.username AS author_name,
k.cover_image,
k.view_count,
k.like_count,
k.collect_count,
k.version,
k.status,
k.publish_time,
k.expire_time,
k.is_top,
k.tags,
k.create_time,
k.update_time
FROM knowledge k
LEFT JOIN sys_user u ON k.author_id = u.user_id
WHERE k.id = #{id}
</select>
<!-- 增加浏览量 -->
<update id="increaseViewCount">
UPDATE knowledge
SET view_count = view_count + 1
WHERE id = #{id}
</update>
<!-- 增加点赞数 -->
<update id="increaseLikeCount">
UPDATE knowledge
SET like_count = like_count + 1
WHERE id = #{id}
</update>
<!-- 减少点赞数 -->
<update id="decreaseLikeCount">
UPDATE knowledge
SET like_count = CASE WHEN like_count > 0 THEN like_count - 1 ELSE 0 END
WHERE id = #{id}
</update>
</mapper>