From 687eb61846724a435c5a84b9d1cc15899f5fccb0 Mon Sep 17 00:00:00 2001
From: xiongxiaoyang <1179705413@qq.com>
Date: Fri, 14 Apr 2023 21:09:37 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=90=8E=E5=8F=B0=E5=B0=8F=E8=AF=B4?=
=?UTF-8?q?=E5=88=A0=E9=99=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
doc/sql/20230413.sql | 7 +-
doc/sql/novel_plus.sql | 7 +-
novel-admin/pom.xml | 47 +-
.../com/java2nb/common/domain/DictDO.java | 459 ++++++++++--------
.../common/service/impl/DictServiceImpl.java | 11 +-
.../controller/BookContentController.java | 135 ++++++
.../novel/controller/BookIndexController.java | 135 ++++++
.../com/java2nb/novel/dao/BookContentDao.java | 34 ++
.../com/java2nb/novel/dao/BookIndexDao.java | 34 ++
.../java2nb/novel/domain/BookContentDO.java | 77 +++
.../com/java2nb/novel/domain/BookIndexDO.java | 177 +++++++
.../novel/service/BookContentService.java | 30 ++
.../novel/service/BookIndexService.java | 30 ++
.../service/impl/BookContentServiceImpl.java | 55 +++
.../service/impl/BookIndexServiceImpl.java | 55 +++
.../novel/service/impl/BookServiceImpl.java | 108 +++--
.../src/main/resources/application-dev.yml | 41 +-
.../src/main/resources/application-prod.yml | 40 +-
.../src/main/resources/application.yml | 8 +-
.../resources/mybatis/common/DictMapper.xml | 246 +++++-----
.../mybatis/novel/BookContentMapper.xml | 94 ++++
.../mybatis/novel/BookIndexMapper.xml | 153 ++++++
.../mybatis/system/DataPermMapper.xml | 274 ++++++-----
.../resources/mybatis/system/DeptMapper.xml | 172 +++----
.../resources/mybatis/system/MenuMapper.xml | 258 +++++-----
.../resources/mybatis/system/UserMapper.xml | 122 +++--
.../static/js/appjs/novel/book/book.js | 12 +
.../static/js/appjs/novel/bookContent/add.js | 107 ++++
.../js/appjs/novel/bookContent/bookContent.js | 189 ++++++++
.../static/js/appjs/novel/bookContent/edit.js | 103 ++++
.../static/js/appjs/novel/bookIndex/add.js | 107 ++++
.../js/appjs/novel/bookIndex/bookIndex.js | 231 +++++++++
.../static/js/appjs/novel/bookIndex/edit.js | 103 ++++
.../static/sql/novel/bookContent/menu.js | 18 +
.../static/sql/novel/bookIndex/menu.js | 18 +
.../templates/novel/bookContent/add.html | 46 ++
.../novel/bookContent/bookContent.html | 66 +++
.../templates/novel/bookContent/detail.html | 42 ++
.../templates/novel/bookContent/edit.html | 48 ++
.../templates/novel/bookIndex/add.html | 113 +++++
.../templates/novel/bookIndex/bookIndex.html | 66 +++
.../templates/novel/bookIndex/detail.html | 110 +++++
.../templates/novel/bookIndex/edit.html | 115 +++++
44 files changed, 3523 insertions(+), 782 deletions(-)
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/controller/BookContentController.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/controller/BookIndexController.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/dao/BookContentDao.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/dao/BookIndexDao.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/domain/BookContentDO.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/domain/BookIndexDO.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/service/BookContentService.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/service/BookIndexService.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/service/impl/BookContentServiceImpl.java
create mode 100644 novel-admin/src/main/java/com/java2nb/novel/service/impl/BookIndexServiceImpl.java
create mode 100644 novel-admin/src/main/resources/mybatis/novel/BookContentMapper.xml
create mode 100644 novel-admin/src/main/resources/mybatis/novel/BookIndexMapper.xml
create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/bookContent/add.js
create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/bookContent/bookContent.js
create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/bookContent/edit.js
create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/bookIndex/add.js
create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/bookIndex/bookIndex.js
create mode 100644 novel-admin/src/main/resources/static/js/appjs/novel/bookIndex/edit.js
create mode 100644 novel-admin/src/main/resources/static/sql/novel/bookContent/menu.js
create mode 100644 novel-admin/src/main/resources/static/sql/novel/bookIndex/menu.js
create mode 100644 novel-admin/src/main/resources/templates/novel/bookContent/add.html
create mode 100644 novel-admin/src/main/resources/templates/novel/bookContent/bookContent.html
create mode 100644 novel-admin/src/main/resources/templates/novel/bookContent/detail.html
create mode 100644 novel-admin/src/main/resources/templates/novel/bookContent/edit.html
create mode 100644 novel-admin/src/main/resources/templates/novel/bookIndex/add.html
create mode 100644 novel-admin/src/main/resources/templates/novel/bookIndex/bookIndex.html
create mode 100644 novel-admin/src/main/resources/templates/novel/bookIndex/detail.html
create mode 100644 novel-admin/src/main/resources/templates/novel/bookIndex/edit.html
diff --git a/README.md b/README.md
index e8db25b..2690404 100644
--- a/README.md
+++ b/README.md
@@ -136,7 +136,7 @@ novel-plus -- 父工程

-
+

diff --git a/doc/sql/20230413.sql b/doc/sql/20230413.sql
index b192788..c139cb4 100644
--- a/doc/sql/20230413.sql
+++ b/doc/sql/20230413.sql
@@ -102,4 +102,9 @@ VALUES (601, 600, '小说列表', 'novel/book', 'novel:book:book', '1', 'fa', '6
INSERT INTO sys_role_menu (role_id, menu_id)
VALUES (1, 600);
INSERT INTO sys_role_menu (role_id, menu_id)
-VALUES (1, 601);
\ No newline at end of file
+VALUES (1, 601);
+
+INSERT INTO `sys_menu` (menu_id, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
+VALUES (602, 601, '删除', null, 'novel:book:remove', '2', null, '6');
+INSERT INTO sys_role_menu (role_id, menu_id)
+VALUES (1, 602);
\ No newline at end of file
diff --git a/doc/sql/novel_plus.sql b/doc/sql/novel_plus.sql
index 24d0112..16ba03e 100644
--- a/doc/sql/novel_plus.sql
+++ b/doc/sql/novel_plus.sql
@@ -2931,4 +2931,9 @@ VALUES (601, 600, '小说列表', 'novel/book', 'novel:book:book', '1', 'fa', '6
INSERT INTO sys_role_menu (role_id, menu_id)
VALUES (1, 600);
INSERT INTO sys_role_menu (role_id, menu_id)
-VALUES (1, 601);
\ No newline at end of file
+VALUES (1, 601);
+
+INSERT INTO `sys_menu` (menu_id, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`)
+VALUES (602, 601, '删除', null, 'novel:book:remove', '2', null, '6');
+INSERT INTO sys_role_menu (role_id, menu_id)
+VALUES (1, 602);
\ No newline at end of file
diff --git a/novel-admin/pom.xml b/novel-admin/pom.xml
index 5a7bcaf..d480df9 100644
--- a/novel-admin/pom.xml
+++ b/novel-admin/pom.xml
@@ -14,7 +14,7 @@
org.springframework.boot
spring-boot-starter-parent
- 2.0.1.RELEASE
+ 2.1.8.RELEASE
@@ -24,6 +24,7 @@
1.8
1.7
5.22.0
+ 3.0.0
@@ -195,10 +196,16 @@
1.4
-
- org.springframework.boot
- spring-boot-starter-cache
+ io.shardingsphere
+ sharding-jdbc-spring-boot-starter
+ ${sharding.jdbc.version}
+
+
+
+ io.shardingsphere
+ sharding-jdbc-spring-namespace
+ ${sharding.jdbc.version}
@@ -289,16 +296,28 @@
-
+
+
+
+ ali-plugin
+ https://maven.aliyun.com/repository/public
+
+ true
+
+
+ false
+
+
+
diff --git a/novel-admin/src/main/java/com/java2nb/common/domain/DictDO.java b/novel-admin/src/main/java/com/java2nb/common/domain/DictDO.java
index 547bd23..805adaa 100644
--- a/novel-admin/src/main/java/com/java2nb/common/domain/DictDO.java
+++ b/novel-admin/src/main/java/com/java2nb/common/domain/DictDO.java
@@ -3,219 +3,270 @@ package com.java2nb.common.domain;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
-
+import java.util.Objects;
/**
* 字典表
- *
+ *
* @author xiongxy
* @email 1179705413@qq.com
* @date 2019-09-29 18:28:07
*/
public class DictDO implements Serializable {
- private static final long serialVersionUID = 1L;
-
- //编号
- private Long id;
- //标签名
- private String name;
- //数据值
- private String value;
- //类型
- private String type;
- //描述
- private String description;
- //排序(升序)
- private BigDecimal sort;
- //父级编号
- private Long parentId;
- //创建者
- private Integer createBy;
- //创建时间
- private Date createDate;
- //更新者
- private Long updateBy;
- //更新时间
- private Date updateDate;
- //备注信息
- private String remarks;
- //删除标记
- private String delFlag;
- /**
- * 设置:编号
- */
- public void setId(Long id) {
- this.id = id;
- }
- /**
- * 获取:编号
- */
- public Long getId() {
- return id;
- }
- /**
- * 设置:标签名
- */
- public void setName(String name) {
- this.name = name;
- }
- /**
- * 获取:标签名
- */
- public String getName() {
- return name;
- }
- /**
- * 设置:数据值
- */
- public void setValue(String value) {
- this.value = value;
- }
- /**
- * 获取:数据值
- */
- public String getValue() {
- return value;
- }
- /**
- * 设置:类型
- */
- public void setType(String type) {
- this.type = type;
- }
- /**
- * 获取:类型
- */
- public String getType() {
- return type;
- }
- /**
- * 设置:描述
- */
- public void setDescription(String description) {
- this.description = description;
- }
- /**
- * 获取:描述
- */
- public String getDescription() {
- return description;
- }
- /**
- * 设置:排序(升序)
- */
- public void setSort(BigDecimal sort) {
- this.sort = sort;
- }
- /**
- * 获取:排序(升序)
- */
- public BigDecimal getSort() {
- return sort;
- }
- /**
- * 设置:父级编号
- */
- public void setParentId(Long parentId) {
- this.parentId = parentId;
- }
- /**
- * 获取:父级编号
- */
- public Long getParentId() {
- return parentId;
- }
- /**
- * 设置:创建者
- */
- public void setCreateBy(Integer createBy) {
- this.createBy = createBy;
- }
- /**
- * 获取:创建者
- */
- public Integer getCreateBy() {
- return createBy;
- }
- /**
- * 设置:创建时间
- */
- public void setCreateDate(Date createDate) {
- this.createDate = createDate;
- }
- /**
- * 获取:创建时间
- */
- public Date getCreateDate() {
- return createDate;
- }
- /**
- * 设置:更新者
- */
- public void setUpdateBy(Long updateBy) {
- this.updateBy = updateBy;
- }
- /**
- * 获取:更新者
- */
- public Long getUpdateBy() {
- return updateBy;
- }
- /**
- * 设置:更新时间
- */
- public void setUpdateDate(Date updateDate) {
- this.updateDate = updateDate;
- }
- /**
- * 获取:更新时间
- */
- public Date getUpdateDate() {
- return updateDate;
- }
- /**
- * 设置:备注信息
- */
- public void setRemarks(String remarks) {
- this.remarks = remarks;
- }
- /**
- * 获取:备注信息
- */
- public String getRemarks() {
- return remarks;
- }
- /**
- * 设置:删除标记
- */
- public void setDelFlag(String delFlag) {
- this.delFlag = delFlag;
- }
- /**
- * 获取:删除标记
- */
- public String getDelFlag() {
- return delFlag;
- }
+ private static final long serialVersionUID = 1L;
- @Override
- public String toString() {
- return "DictDO{" +
- "id=" + id +
- ", name='" + name + '\'' +
- ", value='" + value + '\'' +
- ", type='" + type + '\'' +
- ", description='" + description + '\'' +
- ", sort=" + sort +
- ", parentId=" + parentId +
- ", createBy=" + createBy +
- ", createDate=" + createDate +
- ", updateBy=" + updateBy +
- ", updateDate=" + updateDate +
- ", remarks='" + remarks + '\'' +
- ", delFlag='" + delFlag + '\'' +
- '}';
- }
+ //编号
+ private Long id;
+ //标签名
+ private String name;
+ //数据值
+ private String value;
+ //类型
+ private String type;
+ //描述
+ private String description;
+ //排序(升序)
+ private BigDecimal sort;
+ //父级编号
+ private Long parentId;
+ //创建者
+ private Integer createBy;
+ //创建时间
+ private Date createDate;
+ //更新者
+ private Long updateBy;
+ //更新时间
+ private Date updateDate;
+ //备注信息
+ private String remarks;
+ //删除标记
+ private String delFlag;
+
+ /**
+ * 设置:编号
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * 获取:编号
+ */
+ public Long getId() {
+ return id;
+ }
+
+ /**
+ * 设置:标签名
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * 获取:标签名
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * 设置:数据值
+ */
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ /**
+ * 获取:数据值
+ */
+ public String getValue() {
+ return value;
+ }
+
+ /**
+ * 设置:类型
+ */
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ /**
+ * 获取:类型
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * 设置:描述
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * 获取:描述
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * 设置:排序(升序)
+ */
+ public void setSort(BigDecimal sort) {
+ this.sort = sort;
+ }
+
+ /**
+ * 获取:排序(升序)
+ */
+ public BigDecimal getSort() {
+ return sort;
+ }
+
+ /**
+ * 设置:父级编号
+ */
+ public void setParentId(Long parentId) {
+ this.parentId = parentId;
+ }
+
+ /**
+ * 获取:父级编号
+ */
+ public Long getParentId() {
+ return parentId;
+ }
+
+ /**
+ * 设置:创建者
+ */
+ public void setCreateBy(Integer createBy) {
+ this.createBy = createBy;
+ }
+
+ /**
+ * 获取:创建者
+ */
+ public Integer getCreateBy() {
+ return createBy;
+ }
+
+ /**
+ * 设置:创建时间
+ */
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ /**
+ * 获取:创建时间
+ */
+ public Date getCreateDate() {
+ return createDate;
+ }
+
+ /**
+ * 设置:更新者
+ */
+ public void setUpdateBy(Long updateBy) {
+ this.updateBy = updateBy;
+ }
+
+ /**
+ * 获取:更新者
+ */
+ public Long getUpdateBy() {
+ return updateBy;
+ }
+
+ /**
+ * 设置:更新时间
+ */
+ public void setUpdateDate(Date updateDate) {
+ this.updateDate = updateDate;
+ }
+
+ /**
+ * 获取:更新时间
+ */
+ public Date getUpdateDate() {
+ return updateDate;
+ }
+
+ /**
+ * 设置:备注信息
+ */
+ public void setRemarks(String remarks) {
+ this.remarks = remarks;
+ }
+
+ /**
+ * 获取:备注信息
+ */
+ public String getRemarks() {
+ return remarks;
+ }
+
+ /**
+ * 设置:删除标记
+ */
+ public void setDelFlag(String delFlag) {
+ this.delFlag = delFlag;
+ }
+
+ /**
+ * 获取:删除标记
+ */
+ public String getDelFlag() {
+ return delFlag;
+ }
+
+ @Override
+ public String toString() {
+ return "DictDO{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", value='" + value + '\'' +
+ ", type='" + type + '\'' +
+ ", description='" + description + '\'' +
+ ", sort=" + sort +
+ ", parentId=" + parentId +
+ ", createBy=" + createBy +
+ ", createDate=" + createDate +
+ ", updateBy=" + updateBy +
+ ", updateDate=" + updateDate +
+ ", remarks='" + remarks + '\'' +
+ ", delFlag='" + delFlag + '\'' +
+ '}';
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ DictDO dictDO = (DictDO) o;
+ return Objects.equals(id, dictDO.id) && Objects.equals(name, dictDO.name)
+ && Objects.equals(value, dictDO.value) && Objects.equals(type, dictDO.type)
+ && Objects.equals(description, dictDO.description) && Objects.equals(sort, dictDO.sort)
+ && Objects.equals(parentId, dictDO.parentId) && Objects.equals(createBy, dictDO.createBy)
+ && Objects.equals(createDate, dictDO.createDate) && Objects.equals(updateBy,
+ dictDO.updateBy) && Objects.equals(updateDate, dictDO.updateDate) && Objects.equals(remarks,
+ dictDO.remarks) && Objects.equals(delFlag, dictDO.delFlag);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, name, value, type, description, sort, parentId, createBy, createDate, updateBy,
+ updateDate,
+ remarks, delFlag);
+ }
}
diff --git a/novel-admin/src/main/java/com/java2nb/common/service/impl/DictServiceImpl.java b/novel-admin/src/main/java/com/java2nb/common/service/impl/DictServiceImpl.java
index 79b55b1..10a9479 100644
--- a/novel-admin/src/main/java/com/java2nb/common/service/impl/DictServiceImpl.java
+++ b/novel-admin/src/main/java/com/java2nb/common/service/impl/DictServiceImpl.java
@@ -1,5 +1,8 @@
package com.java2nb.common.service.impl;
+import com.java2nb.common.dao.DictDao;
+import com.java2nb.common.domain.DictDO;
+import com.java2nb.common.service.DictService;
import com.java2nb.common.utils.StringUtils;
import com.java2nb.system.domain.UserDO;
import org.springframework.beans.factory.annotation.Autowired;
@@ -9,14 +12,12 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-
-import com.java2nb.common.dao.DictDao;
-import com.java2nb.common.domain.DictDO;
-import com.java2nb.common.service.DictService;
+import java.util.stream.Collectors;
@Service
public class DictServiceImpl implements DictService {
+
@Autowired
private DictDao dictDao;
@@ -58,7 +59,7 @@ public class DictServiceImpl implements DictService {
@Override
public List listType() {
- return dictDao.listType();
+ return dictDao.listType().stream().distinct().collect(Collectors.toList());
}
@Override
diff --git a/novel-admin/src/main/java/com/java2nb/novel/controller/BookContentController.java b/novel-admin/src/main/java/com/java2nb/novel/controller/BookContentController.java
new file mode 100644
index 0000000..beb50af
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/controller/BookContentController.java
@@ -0,0 +1,135 @@
+package com.java2nb.novel.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import io.swagger.annotations.ApiOperation;
+
+
+import com.java2nb.novel.domain.BookContentDO;
+import com.java2nb.novel.service.BookContentService;
+import com.java2nb.common.utils.PageBean;
+import com.java2nb.common.utils.Query;
+import com.java2nb.common.utils.R;
+
+/**
+ * 小说内容表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 19:52:06
+ */
+
+@Controller
+@RequestMapping("/novel/bookContent")
+public class BookContentController {
+ @Autowired
+ private BookContentService bookContentService;
+
+ @GetMapping()
+ @RequiresPermissions("novel:bookContent:bookContent")
+ String BookContent() {
+ return "novel/bookContent/bookContent";
+ }
+
+ @ApiOperation(value = "获取小说内容表列表", notes = "获取小说内容表列表")
+ @ResponseBody
+ @GetMapping("/list")
+ @RequiresPermissions("novel:bookContent:bookContent")
+ public R list(@RequestParam Map params) {
+ //查询列表数据
+ Query query = new Query(params);
+ List bookContentList = bookContentService.list(query);
+ int total = bookContentService.count(query);
+ PageBean pageBean = new PageBean(bookContentList, total);
+ return R.ok().put("data", pageBean);
+ }
+
+ @ApiOperation(value = "新增小说内容表页面", notes = "新增小说内容表页面")
+ @GetMapping("/add")
+ @RequiresPermissions("novel:bookContent:add")
+ String add() {
+ return "novel/bookContent/add";
+ }
+
+ @ApiOperation(value = "修改小说内容表页面", notes = "修改小说内容表页面")
+ @GetMapping("/edit/{id}")
+ @RequiresPermissions("novel:bookContent:edit")
+ String edit(@PathVariable("id") Long id, Model model) {
+ BookContentDO bookContent = bookContentService.get(id);
+ model.addAttribute("bookContent", bookContent);
+ return "novel/bookContent/edit";
+ }
+
+ @ApiOperation(value = "查看小说内容表页面", notes = "查看小说内容表页面")
+ @GetMapping("/detail/{id}")
+ @RequiresPermissions("novel:bookContent:detail")
+ String detail(@PathVariable("id") Long id, Model model) {
+ BookContentDO bookContent = bookContentService.get(id);
+ model.addAttribute("bookContent", bookContent);
+ return "novel/bookContent/detail";
+ }
+
+ /**
+ * 保存
+ */
+ @ApiOperation(value = "新增小说内容表", notes = "新增小说内容表")
+ @ResponseBody
+ @PostMapping("/save")
+ @RequiresPermissions("novel:bookContent:add")
+ public R save( BookContentDO bookContent) {
+ if (bookContentService.save(bookContent) > 0) {
+ return R.ok();
+ }
+ return R.error();
+ }
+
+ /**
+ * 修改
+ */
+ @ApiOperation(value = "修改小说内容表", notes = "修改小说内容表")
+ @ResponseBody
+ @RequestMapping("/update")
+ @RequiresPermissions("novel:bookContent:edit")
+ public R update( BookContentDO bookContent) {
+ bookContentService.update(bookContent);
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @ApiOperation(value = "删除小说内容表", notes = "删除小说内容表")
+ @PostMapping("/remove")
+ @ResponseBody
+ @RequiresPermissions("novel:bookContent:remove")
+ public R remove( Long id) {
+ if (bookContentService.remove(id) > 0) {
+ return R.ok();
+ }
+ return R.error();
+ }
+
+ /**
+ * 删除
+ */
+ @ApiOperation(value = "批量删除小说内容表", notes = "批量删除小说内容表")
+ @PostMapping("/batchRemove")
+ @ResponseBody
+ @RequiresPermissions("novel:bookContent:batchRemove")
+ public R remove(@RequestParam("ids[]") Long[] ids) {
+ bookContentService.batchRemove(ids);
+ return R.ok();
+ }
+
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/controller/BookIndexController.java b/novel-admin/src/main/java/com/java2nb/novel/controller/BookIndexController.java
new file mode 100644
index 0000000..9851b00
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/controller/BookIndexController.java
@@ -0,0 +1,135 @@
+package com.java2nb.novel.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import io.swagger.annotations.ApiOperation;
+
+
+import com.java2nb.novel.domain.BookIndexDO;
+import com.java2nb.novel.service.BookIndexService;
+import com.java2nb.common.utils.PageBean;
+import com.java2nb.common.utils.Query;
+import com.java2nb.common.utils.R;
+
+/**
+ * 小说目录表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 19:51:54
+ */
+
+@Controller
+@RequestMapping("/novel/bookIndex")
+public class BookIndexController {
+ @Autowired
+ private BookIndexService bookIndexService;
+
+ @GetMapping()
+ @RequiresPermissions("novel:bookIndex:bookIndex")
+ String BookIndex() {
+ return "novel/bookIndex/bookIndex";
+ }
+
+ @ApiOperation(value = "获取小说目录表列表", notes = "获取小说目录表列表")
+ @ResponseBody
+ @GetMapping("/list")
+ @RequiresPermissions("novel:bookIndex:bookIndex")
+ public R list(@RequestParam Map params) {
+ //查询列表数据
+ Query query = new Query(params);
+ List bookIndexList = bookIndexService.list(query);
+ int total = bookIndexService.count(query);
+ PageBean pageBean = new PageBean(bookIndexList, total);
+ return R.ok().put("data", pageBean);
+ }
+
+ @ApiOperation(value = "新增小说目录表页面", notes = "新增小说目录表页面")
+ @GetMapping("/add")
+ @RequiresPermissions("novel:bookIndex:add")
+ String add() {
+ return "novel/bookIndex/add";
+ }
+
+ @ApiOperation(value = "修改小说目录表页面", notes = "修改小说目录表页面")
+ @GetMapping("/edit/{id}")
+ @RequiresPermissions("novel:bookIndex:edit")
+ String edit(@PathVariable("id") Long id, Model model) {
+ BookIndexDO bookIndex = bookIndexService.get(id);
+ model.addAttribute("bookIndex", bookIndex);
+ return "novel/bookIndex/edit";
+ }
+
+ @ApiOperation(value = "查看小说目录表页面", notes = "查看小说目录表页面")
+ @GetMapping("/detail/{id}")
+ @RequiresPermissions("novel:bookIndex:detail")
+ String detail(@PathVariable("id") Long id, Model model) {
+ BookIndexDO bookIndex = bookIndexService.get(id);
+ model.addAttribute("bookIndex", bookIndex);
+ return "novel/bookIndex/detail";
+ }
+
+ /**
+ * 保存
+ */
+ @ApiOperation(value = "新增小说目录表", notes = "新增小说目录表")
+ @ResponseBody
+ @PostMapping("/save")
+ @RequiresPermissions("novel:bookIndex:add")
+ public R save( BookIndexDO bookIndex) {
+ if (bookIndexService.save(bookIndex) > 0) {
+ return R.ok();
+ }
+ return R.error();
+ }
+
+ /**
+ * 修改
+ */
+ @ApiOperation(value = "修改小说目录表", notes = "修改小说目录表")
+ @ResponseBody
+ @RequestMapping("/update")
+ @RequiresPermissions("novel:bookIndex:edit")
+ public R update( BookIndexDO bookIndex) {
+ bookIndexService.update(bookIndex);
+ return R.ok();
+ }
+
+ /**
+ * 删除
+ */
+ @ApiOperation(value = "删除小说目录表", notes = "删除小说目录表")
+ @PostMapping("/remove")
+ @ResponseBody
+ @RequiresPermissions("novel:bookIndex:remove")
+ public R remove( Long id) {
+ if (bookIndexService.remove(id) > 0) {
+ return R.ok();
+ }
+ return R.error();
+ }
+
+ /**
+ * 删除
+ */
+ @ApiOperation(value = "批量删除小说目录表", notes = "批量删除小说目录表")
+ @PostMapping("/batchRemove")
+ @ResponseBody
+ @RequiresPermissions("novel:bookIndex:batchRemove")
+ public R remove(@RequestParam("ids[]") Long[] ids) {
+ bookIndexService.batchRemove(ids);
+ return R.ok();
+ }
+
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/dao/BookContentDao.java b/novel-admin/src/main/java/com/java2nb/novel/dao/BookContentDao.java
new file mode 100644
index 0000000..fcdcdfa
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/dao/BookContentDao.java
@@ -0,0 +1,34 @@
+package com.java2nb.novel.dao;
+
+import com.java2nb.novel.domain.BookContentDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 小说内容表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 19:52:06
+ */
+@Mapper
+public interface BookContentDao {
+
+ BookContentDO get(Long id);
+
+ List list(Map map);
+
+ int count(Map map);
+
+ int save(BookContentDO bookContent);
+
+ int update(BookContentDO bookContent);
+
+ int remove(Long id);
+
+ int batchRemove(Long[] ids);
+
+ int removeByIndexIds(Long[] indexIds);
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/dao/BookIndexDao.java b/novel-admin/src/main/java/com/java2nb/novel/dao/BookIndexDao.java
new file mode 100644
index 0000000..2536d92
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/dao/BookIndexDao.java
@@ -0,0 +1,34 @@
+package com.java2nb.novel.dao;
+
+import com.java2nb.novel.domain.BookIndexDO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 小说目录表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 19:51:54
+ */
+@Mapper
+public interface BookIndexDao {
+
+ BookIndexDO get(Long id);
+
+ List list(Map map);
+
+ int count(Map map);
+
+ int save(BookIndexDO bookIndex);
+
+ int update(BookIndexDO bookIndex);
+
+ int remove(Long id);
+
+ int batchRemove(Long[] ids);
+
+ List getIdsByBookId(Long bookId);
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/domain/BookContentDO.java b/novel-admin/src/main/java/com/java2nb/novel/domain/BookContentDO.java
new file mode 100644
index 0000000..68d71a9
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/domain/BookContentDO.java
@@ -0,0 +1,77 @@
+package com.java2nb.novel.domain;
+
+import java.io.Serializable;
+
+
+import java.math.BigDecimal;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.java2nb.common.jsonserializer.LongToStringSerializer;
+
+
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+
+
+
+/**
+ * 小说内容表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 19:52:06
+ */
+public class BookContentDO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+
+ //主键
+ //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
+ //所以通过序列化成字符串来解决
+ @JsonSerialize(using = LongToStringSerializer.class)
+ private Long id;
+ //目录ID
+ //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
+ //所以通过序列化成字符串来解决
+ @JsonSerialize(using = LongToStringSerializer.class)
+ private Long indexId;
+ //小说章节内容
+ private String content;
+
+ /**
+ * 设置:主键
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+ /**
+ * 获取:主键
+ */
+ public Long getId() {
+ return id;
+ }
+ /**
+ * 设置:目录ID
+ */
+ public void setIndexId(Long indexId) {
+ this.indexId = indexId;
+ }
+ /**
+ * 获取:目录ID
+ */
+ public Long getIndexId() {
+ return indexId;
+ }
+ /**
+ * 设置:小说章节内容
+ */
+ public void setContent(String content) {
+ this.content = content;
+ }
+ /**
+ * 获取:小说章节内容
+ */
+ public String getContent() {
+ return content;
+ }
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/domain/BookIndexDO.java b/novel-admin/src/main/java/com/java2nb/novel/domain/BookIndexDO.java
new file mode 100644
index 0000000..a3bc6a9
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/domain/BookIndexDO.java
@@ -0,0 +1,177 @@
+package com.java2nb.novel.domain;
+
+import java.io.Serializable;
+
+
+import java.math.BigDecimal;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.java2nb.common.jsonserializer.LongToStringSerializer;
+
+
+import org.springframework.format.annotation.DateTimeFormat;
+import java.util.Date;
+
+
+
+/**
+ * 小说目录表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 19:51:54
+ */
+public class BookIndexDO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+
+ //主键
+ //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
+ //所以通过序列化成字符串来解决
+ @JsonSerialize(using = LongToStringSerializer.class)
+ private Long id;
+ //小说ID
+ //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)
+ //所以通过序列化成字符串来解决
+ @JsonSerialize(using = LongToStringSerializer.class)
+ private Long bookId;
+ //目录号
+ private Integer indexNum;
+ //目录名
+ private String indexName;
+ //字数
+ private Integer wordCount;
+ //是否收费,1:收费,0:免费
+ private Integer isVip;
+ //章节费用(屋币)
+ private Integer bookPrice;
+ //存储方式
+ private String storageType;
+ //
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+ //
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /**
+ * 设置:主键
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+ /**
+ * 获取:主键
+ */
+ public Long getId() {
+ return id;
+ }
+ /**
+ * 设置:小说ID
+ */
+ public void setBookId(Long bookId) {
+ this.bookId = bookId;
+ }
+ /**
+ * 获取:小说ID
+ */
+ public Long getBookId() {
+ return bookId;
+ }
+ /**
+ * 设置:目录号
+ */
+ public void setIndexNum(Integer indexNum) {
+ this.indexNum = indexNum;
+ }
+ /**
+ * 获取:目录号
+ */
+ public Integer getIndexNum() {
+ return indexNum;
+ }
+ /**
+ * 设置:目录名
+ */
+ public void setIndexName(String indexName) {
+ this.indexName = indexName;
+ }
+ /**
+ * 获取:目录名
+ */
+ public String getIndexName() {
+ return indexName;
+ }
+ /**
+ * 设置:字数
+ */
+ public void setWordCount(Integer wordCount) {
+ this.wordCount = wordCount;
+ }
+ /**
+ * 获取:字数
+ */
+ public Integer getWordCount() {
+ return wordCount;
+ }
+ /**
+ * 设置:是否收费,1:收费,0:免费
+ */
+ public void setIsVip(Integer isVip) {
+ this.isVip = isVip;
+ }
+ /**
+ * 获取:是否收费,1:收费,0:免费
+ */
+ public Integer getIsVip() {
+ return isVip;
+ }
+ /**
+ * 设置:章节费用(屋币)
+ */
+ public void setBookPrice(Integer bookPrice) {
+ this.bookPrice = bookPrice;
+ }
+ /**
+ * 获取:章节费用(屋币)
+ */
+ public Integer getBookPrice() {
+ return bookPrice;
+ }
+ /**
+ * 设置:存储方式
+ */
+ public void setStorageType(String storageType) {
+ this.storageType = storageType;
+ }
+ /**
+ * 获取:存储方式
+ */
+ public String getStorageType() {
+ return storageType;
+ }
+ /**
+ * 设置:
+ */
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+ /**
+ * 获取:
+ */
+ public Date getCreateTime() {
+ return createTime;
+ }
+ /**
+ * 设置:
+ */
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+ /**
+ * 获取:
+ */
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/BookContentService.java b/novel-admin/src/main/java/com/java2nb/novel/service/BookContentService.java
new file mode 100644
index 0000000..83e7353
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/service/BookContentService.java
@@ -0,0 +1,30 @@
+package com.java2nb.novel.service;
+
+import com.java2nb.novel.domain.BookContentDO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 小说内容表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 19:52:06
+ */
+public interface BookContentService {
+
+ BookContentDO get(Long id);
+
+ List list(Map map);
+
+ int count(Map map);
+
+ int save(BookContentDO bookContent);
+
+ int update(BookContentDO bookContent);
+
+ int remove(Long id);
+
+ int batchRemove(Long[] ids);
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/BookIndexService.java b/novel-admin/src/main/java/com/java2nb/novel/service/BookIndexService.java
new file mode 100644
index 0000000..262a641
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/service/BookIndexService.java
@@ -0,0 +1,30 @@
+package com.java2nb.novel.service;
+
+import com.java2nb.novel.domain.BookIndexDO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 小说目录表
+ *
+ * @author xiongxy
+ * @email 1179705413@qq.com
+ * @date 2023-04-14 19:51:54
+ */
+public interface BookIndexService {
+
+ BookIndexDO get(Long id);
+
+ List list(Map map);
+
+ int count(Map map);
+
+ int save(BookIndexDO bookIndex);
+
+ int update(BookIndexDO bookIndex);
+
+ int remove(Long id);
+
+ int batchRemove(Long[] ids);
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/impl/BookContentServiceImpl.java b/novel-admin/src/main/java/com/java2nb/novel/service/impl/BookContentServiceImpl.java
new file mode 100644
index 0000000..8c6bbd4
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/service/impl/BookContentServiceImpl.java
@@ -0,0 +1,55 @@
+package com.java2nb.novel.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.java2nb.novel.dao.BookContentDao;
+import com.java2nb.novel.domain.BookContentDO;
+import com.java2nb.novel.service.BookContentService;
+
+
+
+@Service
+public class BookContentServiceImpl implements BookContentService {
+ @Autowired
+ private BookContentDao bookContentDao;
+
+ @Override
+ public BookContentDO get(Long id){
+ return bookContentDao.get(id);
+ }
+
+ @Override
+ public List list(Map map){
+ return bookContentDao.list(map);
+ }
+
+ @Override
+ public int count(Map map){
+ return bookContentDao.count(map);
+ }
+
+ @Override
+ public int save(BookContentDO bookContent){
+ return bookContentDao.save(bookContent);
+ }
+
+ @Override
+ public int update(BookContentDO bookContent){
+ return bookContentDao.update(bookContent);
+ }
+
+ @Override
+ public int remove(Long id){
+ return bookContentDao.remove(id);
+ }
+
+ @Override
+ public int batchRemove(Long[] ids){
+ return bookContentDao.batchRemove(ids);
+ }
+
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/impl/BookIndexServiceImpl.java b/novel-admin/src/main/java/com/java2nb/novel/service/impl/BookIndexServiceImpl.java
new file mode 100644
index 0000000..a6b5c1d
--- /dev/null
+++ b/novel-admin/src/main/java/com/java2nb/novel/service/impl/BookIndexServiceImpl.java
@@ -0,0 +1,55 @@
+package com.java2nb.novel.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.java2nb.novel.dao.BookIndexDao;
+import com.java2nb.novel.domain.BookIndexDO;
+import com.java2nb.novel.service.BookIndexService;
+
+
+
+@Service
+public class BookIndexServiceImpl implements BookIndexService {
+ @Autowired
+ private BookIndexDao bookIndexDao;
+
+ @Override
+ public BookIndexDO get(Long id){
+ return bookIndexDao.get(id);
+ }
+
+ @Override
+ public List list(Map map){
+ return bookIndexDao.list(map);
+ }
+
+ @Override
+ public int count(Map map){
+ return bookIndexDao.count(map);
+ }
+
+ @Override
+ public int save(BookIndexDO bookIndex){
+ return bookIndexDao.save(bookIndex);
+ }
+
+ @Override
+ public int update(BookIndexDO bookIndex){
+ return bookIndexDao.update(bookIndex);
+ }
+
+ @Override
+ public int remove(Long id){
+ return bookIndexDao.remove(id);
+ }
+
+ @Override
+ public int batchRemove(Long[] ids){
+ return bookIndexDao.batchRemove(ids);
+ }
+
+}
diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java b/novel-admin/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java
index ae2d028..b0adb68 100644
--- a/novel-admin/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java
+++ b/novel-admin/src/main/java/com/java2nb/novel/service/impl/BookServiceImpl.java
@@ -1,65 +1,79 @@
package com.java2nb.novel.service.impl;
+import com.java2nb.novel.dao.BookContentDao;
+import com.java2nb.novel.dao.BookDao;
+import com.java2nb.novel.dao.BookIndexDao;
+import com.java2nb.novel.domain.BookDO;
+import com.java2nb.novel.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-import com.java2nb.novel.dao.BookDao;
-import com.java2nb.novel.domain.BookDO;
-import com.java2nb.novel.service.BookService;
-
-
@Service
public class BookServiceImpl implements BookService {
- @Autowired
- private BookDao bookDao;
-
- @Override
- public BookDO get(Long id){
- return bookDao.get(id);
- }
-
- @Override
- public List list(Map map){
- return bookDao.list(map);
- }
-
- @Override
- public int count(Map map){
- return bookDao.count(map);
- }
-
- @Override
- public int save(BookDO book){
- return bookDao.save(book);
- }
-
- @Override
- public int update(BookDO book){
- return bookDao.update(book);
- }
-
- @Override
- public int remove(Long id){
- return bookDao.remove(id);
- }
-
- @Override
- public int batchRemove(Long[] ids){
- return bookDao.batchRemove(ids);
- }
- @Override
- public Map