|
@@ -0,0 +1,112 @@
|
|
|
|
+package com.cclotus.journal.service.impl
|
|
|
|
+
|
|
|
|
+import com.baomidou.mybatisplus.extension.kotlin.KtQueryWrapper
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
|
|
|
|
+import com.cclotus.journal.domain.JournalCatalog
|
|
|
|
+import com.cclotus.journal.mapper.JournalCatalogMapper
|
|
|
|
+import com.cclotus.journal.service.IJournalCatalogService
|
|
|
|
+import com.ruoyi.common.reqParam.PageParam
|
|
|
|
+import com.ruoyi.common.utils.PageUtils
|
|
|
|
+import com.ruoyi.common.utils.bean.BeanUtils
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired
|
|
|
|
+import org.springframework.stereotype.Service
|
|
|
|
+import org.springframework.transaction.annotation.Transactional
|
|
|
|
+import org.springframework.util.Assert.hasText
|
|
|
|
+import org.springframework.util.Assert.notNull
|
|
|
|
+
|
|
|
|
+@Service
|
|
|
|
+class JournalCatalogServiceImpl : ServiceImpl<JournalCatalogMapper, JournalCatalog>(), IJournalCatalogService {
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ lateinit var journalCatalogMapper: JournalCatalogMapper
|
|
|
|
+
|
|
|
|
+ override fun list(journalCatalog: JournalCatalog, pageParam: PageParam?): List<JournalCatalog> {
|
|
|
|
+ val queryWrapper = KtQueryWrapper(JournalCatalog())
|
|
|
|
+ queryWrapper.like(!journalCatalog.title.isNullOrBlank(), JournalCatalog::title, journalCatalog.title)
|
|
|
|
+ .like(!journalCatalog.author.isNullOrBlank(), JournalCatalog::author, journalCatalog.author)
|
|
|
|
+ .eq(journalCatalog.termId != null, JournalCatalog::termId, journalCatalog.termId)
|
|
|
|
+ .eq(journalCatalog.parentId != null, JournalCatalog::parentId, journalCatalog.parentId)
|
|
|
|
+ .eq(journalCatalog.leaf != null, journalCatalog::leaf, journalCatalog.leaf)
|
|
|
|
+ .orderByAsc(JournalCatalog::sort)
|
|
|
|
+
|
|
|
|
+ // 查询post主表,并处理分页
|
|
|
|
+ pageParam?.let {
|
|
|
|
+ it.orderByColumn = null
|
|
|
|
+ PageUtils.startPage(it)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return journalCatalogMapper.selectList(queryWrapper)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @Transactional
|
|
|
|
+ override fun create(journalCatalog: JournalCatalog): Int {
|
|
|
|
+ hasText(journalCatalog.title, "期刊目录标题不可为空")
|
|
|
|
+ notNull(journalCatalog.termId, "所属期刊不可为空")
|
|
|
|
+ // 新增初始化节点默认为子节点
|
|
|
|
+ journalCatalog.leaf = 1
|
|
|
|
+ if (journalCatalog.parentId == null || journalCatalog.parentId == 0) {
|
|
|
|
+ journalCatalog.parentId = 0
|
|
|
|
+ journalCatalog.ancestors = "0"
|
|
|
|
+ } else { // 如果上级ID不为空,检查父级节点是否存在,并设置ancestors字段, 将父级节点的leaf更改为0
|
|
|
|
+ val parentNode = this.getById(journalCatalog.parentId)
|
|
|
|
+ notNull(parentNode, "指定的上级期刊目录节点不存在")
|
|
|
|
+ journalCatalog.ancestors = "${parentNode.ancestors},${parentNode.id.toString()}"
|
|
|
|
+ // 修改父级节点leaf字段
|
|
|
|
+ parentNode.leaf = 0
|
|
|
|
+ journalCatalogMapper.updateById(parentNode)
|
|
|
|
+ }
|
|
|
|
+ if (journalCatalog.sort == null) { // 如果排序字段为空,自动设置为最大排序字段
|
|
|
|
+ PageUtils.startPage(PageParam().apply {
|
|
|
|
+ this.pageNum = 1
|
|
|
|
+ this.pageSize = 1
|
|
|
|
+ })
|
|
|
|
+ val lastOne = this.list(KtQueryWrapper(JournalCatalog()).orderByDesc(JournalCatalog::sort)).firstOrNull()
|
|
|
|
+ journalCatalog.sort = if (lastOne != null) (lastOne.sort!! + 1) else 0f
|
|
|
|
+ }
|
|
|
|
+ return journalCatalogMapper.insert(journalCatalog)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ override fun update(journalCatalog: JournalCatalog): Int {
|
|
|
|
+ hasText(journalCatalog.title, "期刊目录标题不可为空")
|
|
|
|
+ notNull(journalCatalog.termId, "所属期刊不可为空")
|
|
|
|
+ // 修改不变更是否是叶子节点属性
|
|
|
|
+ journalCatalog.leaf = null
|
|
|
|
+ val entity = this.getById(journalCatalog.id!!)
|
|
|
|
+ notNull(entity, "待修改的期刊目录不存在")
|
|
|
|
+ BeanUtils.copyProperties(journalCatalog, entity, "parentId")
|
|
|
|
+ if (journalCatalog.parentId != null) {
|
|
|
|
+ if (journalCatalog.parentId == 0) {
|
|
|
|
+ entity.ancestors = "0"
|
|
|
|
+ } else if (journalCatalog.parentId != entity.parentId) {
|
|
|
|
+ journalCatalog.parentId.let { // 如果上级ID不为空,检查父级节点是否存在,并设置ancestors字段
|
|
|
|
+ val parentNode = this.getById(it)
|
|
|
|
+ notNull(parentNode, "指定的上级期刊目录节点不存在")
|
|
|
|
+ entity.parentId = parentNode.parentId
|
|
|
|
+ entity.ancestors = "${parentNode.ancestors},${parentNode.id.toString()}"
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return journalCatalogMapper.updateById(journalCatalog)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Transactional
|
|
|
|
+ override fun delete(ids: Array<Int>): Boolean {
|
|
|
|
+ ids.forEach {
|
|
|
|
+ val entity = this.getById(it)
|
|
|
|
+ val parentId = entity.parentId
|
|
|
|
+ this.removeById(it)
|
|
|
|
+ // 查询其父节点是否还存在子节点
|
|
|
|
+ val nodes = this.list(KtQueryWrapper(JournalCatalog()).eq(JournalCatalog::parentId, parentId))
|
|
|
|
+ if (nodes.isEmpty()) { // 如果父节点不存在子节点,修改父节点是否为叶子节点状态
|
|
|
|
+ val parentNode = this.getById(parentId)
|
|
|
|
+ parentNode.leaf = 0
|
|
|
|
+ this.update(parentNode)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+}
|