瀏覽代碼

1.栏目类型支持修改,2.文章表增加发布时间字段,3.文章表增加子标题,4.文章表增加来源字段,5.文章增加附件功能

liyan 1 天之前
父節點
當前提交
c411c7e936

+ 3 - 3
ruoyi-cms/src/main/kotlin/com/cclotus/cms/controller/admin/CmsPostController.kt

@@ -37,11 +37,11 @@ class CmsPostController : BaseController() {
     fun list(
         @PathVariable("contentType") contentType: String,
         @PathVariable(name = "termAlias", required = false) termAlias: String?,
-        paging: Boolean?,
-        deep: Boolean?,
+        @RequestParam(required = false) paging: Boolean?,
+        @RequestParam(required = false) deep: Boolean?,
         post: CmsPost,
         pageParam: PageParam?,
-        content: Boolean?,
+        @RequestParam(required = false) content: Boolean?,
         @RequestParam(required = false) query: Map<String, String>?,
     ): TableDataInfo {
         val pageParam = if (paging != null && !paging) null else pageParam

+ 27 - 1
ruoyi-cms/src/main/kotlin/com/cclotus/cms/domain/CmsConfig.kt

@@ -1,17 +1,43 @@
 package com.cclotus.cms.domain
 
+import com.baomidou.mybatisplus.annotation.IdType
+import com.baomidou.mybatisplus.annotation.TableField
+import com.baomidou.mybatisplus.annotation.TableId
+import com.baomidou.mybatisplus.annotation.TableName
+
 /**
  * 网站配置
  */
-class CmsConfig {
+@TableName("cms_config")
+class CmsConfig : CMSBaseEntity() {
 
+    /**
+     * 配置ID
+     */
+    @TableId(value = "config_id", type = IdType.AUTO)
     var configId: Int? = null
 
+    /**
+     * 说明标签
+     */
+    @TableField("label")
     var label: String? = null
 
+    /**
+     * 配置Key
+     */
+    @TableField("config_key")
     var configKey: String? = null
 
+    /**
+     * 配置Value
+     */
+    @TableField("config_value")
     var configValue: String? = null
 
+    /**
+     * 配置Value数据类型
+     */
+    @TableField("data_type")
     var dataType: String? = null
 }

+ 21 - 0
ruoyi-cms/src/main/kotlin/com/cclotus/cms/domain/CmsPost.kt

@@ -1,6 +1,8 @@
 package com.cclotus.cms.domain
 
 import com.baomidou.mybatisplus.annotation.*
+import com.fasterxml.jackson.annotation.JsonFormat
+import java.time.LocalDateTime
 
 /**
  * 内容数据
@@ -20,6 +22,12 @@ class CmsPost : CMSBaseEntity() {
     @TableField("title")
     var title: String? = null
 
+    /**
+     * 子标题
+     */
+    @TableField("sub_title")
+    var subTitle: String? = null
+
     /**
      * 内容首图
      */
@@ -86,6 +94,13 @@ class CmsPost : CMSBaseEntity() {
     @TableField("origin")
     var origin: String? = null
 
+    /**
+     * 发布时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "publish_time")
+    var publishTime: LocalDateTime? = null
+
     /**
      * 文章所属分类
      */
@@ -97,4 +112,10 @@ class CmsPost : CMSBaseEntity() {
      */
     @TableField(exist = false)
     var meta: List<CmsPostMeta> = mutableListOf()
+
+    /**
+     * 文章附件列表
+     */
+    @TableField(exist = false)
+    var attachments: List<CmsPostAttachment> = mutableListOf()
 }

+ 26 - 0
ruoyi-cms/src/main/kotlin/com/cclotus/cms/domain/CmsPostAttachment.kt

@@ -0,0 +1,26 @@
+package com.cclotus.cms.domain
+
+import com.baomidou.mybatisplus.annotation.TableField
+import com.baomidou.mybatisplus.annotation.TableName
+
+@TableName("cms_post_attachment")
+class CmsPostAttachment {
+
+    /**
+     * 附件ID
+     */
+    @TableField("attachment_id")
+    var attachmentId: Int? = null
+
+    /**
+     * 内容ID
+     */
+    @TableField("post_id")
+    var postId: Int? = null
+
+    /**
+     * 文件路径
+     */
+    @TableField("url")
+    var url: String? = null
+}

+ 7 - 0
ruoyi-cms/src/main/kotlin/com/cclotus/cms/mapper/CmsPostAttachmentMapper.kt

@@ -0,0 +1,7 @@
+package com.cclotus.cms.mapper
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper
+import com.cclotus.cms.domain.CmsPostAttachment
+
+interface CmsPostAttachmentMapper : BaseMapper<CmsPostAttachment> {
+}

+ 67 - 8
ruoyi-cms/src/main/kotlin/com/cclotus/cms/service/CmsPostService.kt

@@ -1,10 +1,9 @@
 package com.cclotus.cms.service
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
-import com.cclotus.cms.domain.CmsPost
-import com.cclotus.cms.domain.CmsPostMeta
-import com.cclotus.cms.domain.CmsReviewForm
-import com.cclotus.cms.domain.CmsTermRelationships
+import com.baomidou.mybatisplus.extension.kotlin.KtQueryWrapper
+import com.cclotus.cms.domain.*
+import com.cclotus.cms.mapper.CmsPostAttachmentMapper
 import com.cclotus.cms.mapper.CmsPostMapper
 import com.cclotus.cms.mapper.CmsPostMetaMapper
 import com.cclotus.cms.mapper.CmsTermRelationshipsMapper
@@ -42,6 +41,9 @@ class CmsPostService {
     @Autowired
     lateinit var cmsTermMetaService: CmsTermMetaService
 
+    @Autowired
+    lateinit var cmsPostAttachmentMapper: CmsPostAttachmentMapper
+
     /**
      * 查询内容列表
      * @param termAlias 分类别名
@@ -112,8 +114,7 @@ class CmsPostService {
             .eq(!post.status.isNullOrBlank(), "status", post.status)
             .eq(post.topStatus != null, "top_status", post.topStatus)
             .eq(!post.visible.isNullOrBlank(), "visible", post.visible)
-            .eq(!post.createBy.isNullOrBlank(), "create_by", post.createBy)
-            .orderByDesc("top_status", "create_time")
+            .eq(!post.createBy.isNullOrBlank(), "create_by", post.createBy).orderByDesc("top_status", "create_time")
 
         // 查询post主表,并处理分页
         pageParam?.let {
@@ -227,6 +228,18 @@ class CmsPostService {
             }
         }
 
+        // 插入内容附件信息
+        post.urls?.split(",")?.forEach { url ->
+            CmsPostAttachment().apply {
+                this.url = url
+                this.postId = cmsPost.postId
+            }.also {
+                if (cmsPostAttachmentMapper.insert(it) != 1) {
+                    throw ServiceException("插入内容附件失败", 500)
+                }
+            }
+        }
+
         return 1
     }
 
@@ -277,6 +290,11 @@ class CmsPostService {
             updatePostMetas(postId, it)
         }
 
+        // 更新内容附件列表
+        post.urls?.split(",")?.let {
+            updataPostAttachments(postId, it)
+        }
+
         // 更新发布内容
         entity.apply {
             BeanUtils.copyProperties(post, this, "origin")
@@ -294,10 +312,12 @@ class CmsPostService {
     @Transactional
     fun deleteByIds(postIds: Array<Int>): Int {
         if (postIds.isEmpty()) return 0
-
+        // 删除指定内容的配置信息
         cmsPostMetaMapper.delete(QueryWrapper<CmsPostMeta>().`in`("post_id", postIds.toList()))
-
+        // 删除内容与栏目的关联
         cmsTermRelationshipsMapper.deleteObjectIds(postIds.toList())
+        // 删除内容的附件信息
+        cmsPostAttachmentMapper.delete(QueryWrapper<CmsPostAttachment>().`in`("post_id", postIds.toList()))
 
         return cmsPostMapper.deleteBatchIds(postIds.toList())
     }
@@ -392,4 +412,43 @@ class CmsPostService {
             }
         }
     }
+
+    // 更新内容附件列表
+    private fun updataPostAttachments(postId: Int, urls: List<String>) {
+        // 获取内容附件列表
+        val attachments = cmsPostAttachmentMapper.selectList(
+            KtQueryWrapper(CmsPostAttachment()).eq(
+                CmsPostAttachment::postId, postId
+            )
+        )
+        val attachmentsUrls = attachments.map { it.url }.toList()
+
+        // 计算待删除栏目类别列表,和待插入栏目类别列表
+        val deleteList = mutableListOf<CmsPostAttachment>()
+        val addList = mutableListOf<CmsPostAttachment>()
+        attachments.forEach {
+            if (!urls.contains(it.url)) {
+                deleteList.add(it)
+            }
+        }
+        urls.forEach {
+            if (!attachmentsUrls.contains(it)) {
+                addList.add(CmsPostAttachment().apply {
+                    this.postId = postId
+                    this.url = it
+                })
+            }
+        }
+
+        addList.forEach {
+            cmsPostAttachmentMapper.insert(it)
+        }
+
+        deleteList.map { it.attachmentId }.run {
+            cmsPostAttachmentMapper.deleteBatchIds(this)
+        }
+
+
+    }
+
 }

+ 15 - 2
ruoyi-cms/src/main/kotlin/com/cclotus/cms/service/CmsTermService.kt

@@ -1,6 +1,7 @@
 package com.cclotus.cms.service
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
+import com.baomidou.mybatisplus.extension.kotlin.KtQueryWrapper
 import com.cclotus.cms.domain.CmsTerm
 import com.cclotus.cms.domain.CmsTermMeta
 import com.cclotus.cms.domain.CmsTermRelationships
@@ -173,6 +174,19 @@ class CmsTermService {
             updateMetas(termId, it)
         }
 
+        // 如果栏目下不存在绑定的内容且没有子栏目,支持对栏目类型的修改
+        if (!term.type.isNullOrBlank() && !term.type.equals(entity.type)) {
+            val relas = cmsTermRelationshipsMapper.selectList(
+                KtQueryWrapper(CmsTermRelationships()).eq(
+                    CmsTermRelationships::termId,
+                    termId
+                )
+            )
+            if (relas.isNotEmpty()) throw ServiceException("该栏目下存在绑定的文章,不可修改类型")
+            val subList = cmsTermMapper.selectList(KtQueryWrapper(CmsTerm()).like(CmsTerm::ancestors, termId))
+            if (subList.isNotEmpty()) throw ServiceException("该栏目下存在子栏目,不可修改类型")
+            entity.type = term.type
+        }
         /**
          *   支持修改分类名称、别名、图标、描述、排序
          *   不支持修改分类系统、父级分类、分类的数据类型
@@ -184,8 +198,7 @@ class CmsTermService {
                 "term_id",
                 "parent_id",
                 "ancestors",
-                "taxonomy",
-                "type"
+                "taxonomy"
             )
         }.let {
             cmsTermMapper.updateById(it)

+ 3 - 0
ruoyi-cms/src/main/kotlin/com/cclotus/cms/vo/CmsPostFormReq.kt

@@ -8,4 +8,7 @@ class CmsPostFormReq : CmsPostFormBase() {
     var catalogIds: MutableList<Int>? = null
 
     var meta: Map<String, String>? = null
+
+    // 内容附件列表
+    var urls: String? = null
 }

+ 3 - 0
ruoyi-cms/src/main/kotlin/com/cclotus/cms/vo/CmsPostFormRes.kt

@@ -1,5 +1,6 @@
 package com.cclotus.cms.vo
 
+import com.cclotus.cms.domain.CmsPostAttachment
 import com.cclotus.cms.domain.CmsTerm
 import com.fasterxml.jackson.annotation.JsonFormat
 import java.time.LocalDateTime
@@ -24,4 +25,6 @@ class CmsPostFormRes : CmsPostFormBase() {
     var catalogs: List<CmsTerm> = mutableListOf()
 
     var meta: MutableMap<String, String?> = mutableMapOf()
+
+    var attachments: List<CmsPostAttachment> = mutableListOf()
 }

+ 20 - 3
ruoyi-cms/src/main/resources/mapper/cms/CmsPostMapper.xml

@@ -7,6 +7,7 @@
     <resultMap type="com.cclotus.cms.domain.CmsPost" id="CmsPost">
         <result property="postId" column="post_id"/>
         <result property="title" column="title"/>
+        <result property="subTitle" column="sub_title"/>
         <result property="image" column="image"/>
         <result property="summary" column="summary"/>
         <result property="contentType" column="content_type"/>
@@ -23,8 +24,10 @@
         <result property="review" column="review"/>
         <result property="comment" column="comment"/>
         <result property="origin" column="origin"/>
+        <result property="publishTime" column="publish_time"/>
         <collection property="catalogs" javaType="java.util.List" resultMap="CmsTerm"/>
         <collection property="meta" javaType="java.util.List" resultMap="CmsPostMeta"/>
+        <collection property="attachments" javaType="java.util.List" resultMap="CmsPostAttachment"/>
     </resultMap>
 
     <resultMap id="CmsTerm" type="com.cclotus.cms.domain.CmsTerm">
@@ -45,6 +48,11 @@
         <result property="metaValue" column="meta_value"/>
     </resultMap>
 
+    <resultMap id="CmsPostAttachment" type="com.cclotus.cms.domain.CmsPostAttachment">
+        <result property="attachmentId" column="attachment_id"/>
+        <result property="url" column="url"/>
+    </resultMap>
+
     <select id="selectPostByPostId" resultMap="CmsPost">
         select p.*,
                t.term_id    as t_term_id,
@@ -57,11 +65,14 @@
                t.type       as t_type,
                t.number     as t_number,
                e.meta_key,
-               e.meta_value
+               e.meta_value,
+               a.attachment_id,
+               a.url
         FROM cms_post p
                 LEFT JOIN cms_term_relationships r ON p.post_id = r.object_id
                 LEFT JOIN cms_term t on r.term_id = t.term_id
                 LEFT JOIN cms_post_meta e on p.post_id = e.post_id
+                LEFT JOIN cms_post_attachment a ON p.post_id = a.post_id
         where p.post_id = #{postId} and p.content_type = #{contentType}
     </select>
 
@@ -77,11 +88,14 @@
                t.type       as t_type,
                t.number     as t_number,
                e.meta_key,
-               e.meta_value
+               e.meta_value,
+               a.attachment_id,
+               a.url
         FROM cms_post p
                 LEFT JOIN cms_term_relationships r ON p.post_id = r.object_id
                 LEFT JOIN cms_term t on r.term_id = t.term_id
                 LEFT JOIN cms_post_meta e on p.post_id = e.post_id
+                LEFT JOIN cms_post_attachment a ON p.post_id = a.post_id
         where p.alias = #{alias} and p.content_type = #{contentType}
     </select>
 
@@ -97,11 +111,14 @@
             t.type       as t_type,
             t.number     as t_number,
             e.meta_key,
-            e.meta_value
+            e.meta_value,
+            a.attachment_id,
+            a.url
         FROM cms_post p
             LEFT JOIN cms_term_relationships r ON p.post_id = r.object_id
             LEFT JOIN cms_term t on r.term_id = t.term_id
             LEFT JOIN cms_post_meta e on p.post_id = e.post_id
+            LEFT JOIN cms_post_attachment a ON p.post_id = a.post_id
         <where>
             <if test="catalogAlias != null and catalogAlias != ''">
                 AND t.alias = #{catalogAlias}