From a55a04541ff13dcd5ef3b3a1e3fd488bdfb198dd Mon Sep 17 00:00:00 2001 From: zwzw1219 Date: Mon, 2 Oct 2017 20:03:52 +0800 Subject: [PATCH] =?UTF-8?q?!4=20=E5=85=AC=E5=91=8A=20Merge=20pull=20reques?= =?UTF-8?q?t=20!4=20from=20zwzw1219/notice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/db/boot_backend.sql | 109 ++++++---- ...sController.java => NoticeController.java} | 118 ++++++++--- .../dao/{ArticlesDao.java => NoticeDao.java} | 35 +++- .../com/zw/admin/server/dto/NoticeReadVO.java | 19 ++ .../com/zw/admin/server/dto/NoticeVO.java | 21 ++ .../model/{Articles.java => Notice.java} | 2 +- .../mybatis-mappers/ArticlesMapper.xml | 36 ---- .../mybatis-mappers/NoticeMapper.xml | 86 ++++++++ src/main/resources/public/index.html | 3 + .../resources/public/pages/dashboard.html | 2 +- .../addArticle.html => notice/addNotice.html} | 6 +- .../resources/public/pages/notice/detail.html | 87 ++++++++ .../noticeList.html} | 30 ++- .../public/pages/notice/noticePubList.html | 197 ++++++++++++++++++ .../updateNotice.html} | 8 +- src/main/resources/static/js/main.js | 18 +- 16 files changed, 636 insertions(+), 141 deletions(-) rename src/main/java/com/zw/admin/server/controller/{ArticlesController.java => NoticeController.java} (31%) rename src/main/java/com/zw/admin/server/dao/{ArticlesDao.java => NoticeDao.java} (38%) create mode 100644 src/main/java/com/zw/admin/server/dto/NoticeReadVO.java create mode 100644 src/main/java/com/zw/admin/server/dto/NoticeVO.java rename src/main/java/com/zw/admin/server/model/{Articles.java => Notice.java} (86%) delete mode 100644 src/main/resources/mybatis-mappers/ArticlesMapper.xml create mode 100644 src/main/resources/mybatis-mappers/NoticeMapper.xml rename src/main/resources/public/pages/{article/addArticle.html => notice/addNotice.html} (96%) create mode 100644 src/main/resources/public/pages/notice/detail.html rename src/main/resources/public/pages/{article/articleList.html => notice/noticeList.html} (84%) create mode 100644 src/main/resources/public/pages/notice/noticePubList.html rename src/main/resources/public/pages/{article/updateArticle.html => notice/updateNotice.html} (95%) diff --git a/doc/db/boot_backend.sql b/doc/db/boot_backend.sql index d97966c..b1d1964 100644 --- a/doc/db/boot_backend.sql +++ b/doc/db/boot_backend.sql @@ -1,38 +1,20 @@ /* Navicat MySQL Data Transfer -Source Server : localhost -Source Server Version : 50717 +Source Server : zhangw +Source Server Version : 50624 Source Host : localhost:3306 Source Database : boot_backend Target Server Type : MYSQL -Target Server Version : 50717 +Target Server Version : 50624 File Encoding : 65001 -Date: 2017-09-27 17:40:56 +Date: 2017-10-02 19:26:05 */ SET FOREIGN_KEY_CHECKS=0; --- ---------------------------- --- Table structure for articles --- ---------------------------- -DROP TABLE IF EXISTS `articles`; -CREATE TABLE `articles` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `title` varchar(128) NOT NULL, - `content` text NOT NULL, - `status` tinyint(1) NOT NULL DEFAULT '1', - `createTime` datetime NOT NULL, - `updateTime` datetime NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - --- ---------------------------- --- Records of articles --- ---------------------------- - -- ---------------------------- -- Table structure for file_info -- ---------------------------- @@ -299,7 +281,7 @@ CREATE TABLE `sys_permission` ( `permission` varchar(50) DEFAULT NULL, `sort` int(11) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8mb4; -- ---------------------------- -- Records of sys_permission @@ -324,10 +306,10 @@ INSERT INTO `sys_permission` VALUES ('18', '16', '删除', '', '', '2', 'sys:fil INSERT INTO `sys_permission` VALUES ('19', '0', '数据源监控', 'fa-eye', 'druid/index.html', '1', '', '9'); INSERT INTO `sys_permission` VALUES ('20', '0', '接口swagger', 'fa-file-pdf-o', 'swagger-ui.html', '1', '', '10'); INSERT INTO `sys_permission` VALUES ('21', '0', '代码生成', 'fa-wrench', 'pages/generate/edit.html', '1', 'generate:edit', '11'); -INSERT INTO `sys_permission` VALUES ('22', '0', '公告管理', 'fa-book', 'pages/article/articleList.html', '1', '', '12'); -INSERT INTO `sys_permission` VALUES ('23', '22', '查询', '', '', '2', 'articles:query', '100'); -INSERT INTO `sys_permission` VALUES ('24', '22', '添加', '', '', '2', 'articles:add', '100'); -INSERT INTO `sys_permission` VALUES ('25', '22', '删除', '', '', '2', 'articles:del', '100'); +INSERT INTO `sys_permission` VALUES ('22', '0', '公告管理', 'fa-book', 'pages/notice/noticeList.html', '1', '', '12'); +INSERT INTO `sys_permission` VALUES ('23', '22', '查询', '', '', '2', 'notice:query', '100'); +INSERT INTO `sys_permission` VALUES ('24', '22', '添加', '', '', '2', 'notice:add', '100'); +INSERT INTO `sys_permission` VALUES ('25', '22', '删除', '', '', '2', 'notice:del', '100'); INSERT INTO `sys_permission` VALUES ('26', '0', '日志查询', 'fa-reorder', 'pages/log/logList.html', '1', 'sys:log:query', '13'); INSERT INTO `sys_permission` VALUES ('27', '0', '邮件管理', 'fa-envelope', 'pages/mail/mailList.html', '1', '', '14'); INSERT INTO `sys_permission` VALUES ('28', '27', '发送邮件', '', '', '2', 'mail:send', '100'); @@ -474,24 +456,6 @@ CREATE TABLE `sys_user` ( INSERT INTO `sys_user` VALUES ('1', 'admin', '1015ed3b5f1345911198c995f9ad097e', '87e03afa1f0122531f729c9a7453f475', '管理员', null, '', '', '', '1998-07-01', '0', '1', '2017-04-10 15:21:38', '2017-07-06 09:20:19'); INSERT INTO `sys_user` VALUES ('2', 'user', '72c2e62dba72e5f178542313803f33d1', '143292269df8c63e2da1a9ba2aeff43c', '用户', null, '', '', '', null, '1', '1', '2017-08-01 21:47:18', '2017-08-01 21:47:18'); --- ---------------------------- --- Table structure for t_mail --- ---------------------------- -DROP TABLE IF EXISTS `t_mail`; -CREATE TABLE `t_mail` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `userId` int(11) NOT NULL COMMENT '发送人', - `subject` varchar(255) NOT NULL COMMENT '标题', - `content` longtext NOT NULL COMMENT '正文', - `createTime` datetime NOT NULL, - `updateTime` datetime NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4; - --- ---------------------------- --- Records of t_mail --- ---------------------------- - -- ---------------------------- -- Table structure for t_job -- ---------------------------- @@ -511,6 +475,28 @@ CREATE TABLE `t_job` ( UNIQUE KEY `jobName` (`jobName`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; +-- ---------------------------- +-- Records of t_job +-- ---------------------------- + +-- ---------------------------- +-- Table structure for t_mail +-- ---------------------------- +DROP TABLE IF EXISTS `t_mail`; +CREATE TABLE `t_mail` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `userId` int(11) NOT NULL COMMENT '发送人', + `subject` varchar(255) NOT NULL COMMENT '标题', + `content` longtext NOT NULL COMMENT '正文', + `createTime` datetime NOT NULL, + `updateTime` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Records of t_mail +-- ---------------------------- + -- ---------------------------- -- Table structure for t_mail_to -- ---------------------------- @@ -526,3 +512,36 @@ CREATE TABLE `t_mail_to` ( -- ---------------------------- -- Records of t_mail_to -- ---------------------------- + +-- ---------------------------- +-- Table structure for t_notice +-- ---------------------------- +DROP TABLE IF EXISTS `t_notice`; +CREATE TABLE `t_notice` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `title` varchar(128) NOT NULL, + `content` text NOT NULL, + `status` tinyint(1) NOT NULL DEFAULT '1', + `createTime` datetime NOT NULL, + `updateTime` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Records of t_notice +-- ---------------------------- + +-- ---------------------------- +-- Table structure for t_notice_read +-- ---------------------------- +DROP TABLE IF EXISTS `t_notice_read`; +CREATE TABLE `t_notice_read` ( + `noticeId` int(11) NOT NULL, + `userId` int(11) NOT NULL, + `createTime` datetime NOT NULL, + PRIMARY KEY (`noticeId`,`userId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Records of t_notice_read +-- ---------------------------- diff --git a/src/main/java/com/zw/admin/server/controller/ArticlesController.java b/src/main/java/com/zw/admin/server/controller/NoticeController.java similarity index 31% rename from src/main/java/com/zw/admin/server/controller/ArticlesController.java rename to src/main/java/com/zw/admin/server/controller/NoticeController.java index 2b9128f..12e511d 100644 --- a/src/main/java/com/zw/admin/server/controller/ArticlesController.java +++ b/src/main/java/com/zw/admin/server/controller/NoticeController.java @@ -14,74 +14,128 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.zw.admin.server.annotation.LogAnnotation; -import com.zw.admin.server.dao.ArticlesDao; -import com.zw.admin.server.model.Articles; -import com.zw.admin.server.page.table.PageTableRequest; +import com.zw.admin.server.dao.NoticeDao; +import com.zw.admin.server.dto.NoticeReadVO; +import com.zw.admin.server.dto.NoticeVO; +import com.zw.admin.server.model.Notice; +import com.zw.admin.server.model.Notice.Status; +import com.zw.admin.server.model.User; import com.zw.admin.server.page.table.PageTableHandler; -import com.zw.admin.server.page.table.PageTableResponse; import com.zw.admin.server.page.table.PageTableHandler.CountHandler; import com.zw.admin.server.page.table.PageTableHandler.ListHandler; +import com.zw.admin.server.page.table.PageTableRequest; +import com.zw.admin.server.page.table.PageTableResponse; +import com.zw.admin.server.utils.UserUtil; import io.swagger.annotations.ApiOperation; @RestController -@RequestMapping("/articles") -public class ArticlesController { +@RequestMapping("/notices") +public class NoticeController { @Autowired - private ArticlesDao articlesDao; + private NoticeDao noticeDao; @LogAnnotation @PostMapping - @ApiOperation(value = "保存文章") - @RequiresPermissions("articles:add") - public Articles saveArticles(@RequestBody Articles articles) { - articlesDao.save(articles); + @ApiOperation(value = "保存公告") + @RequiresPermissions("notice:add") + public Notice saveNotice(@RequestBody Notice notice) { + noticeDao.save(notice); - return articles; + return notice; } @GetMapping("/{id}") - @ApiOperation(value = "根据id获取文章") - @RequiresPermissions("articles:query") - public Articles get(@PathVariable Long id) { - return articlesDao.getById(id); + @ApiOperation(value = "根据id获取公告") + @RequiresPermissions("notice:query") + public Notice get(@PathVariable Long id) { + return noticeDao.getById(id); + } + + @GetMapping(params = "id") + public NoticeVO readNotice(Long id) { + NoticeVO vo = new NoticeVO(); + + Notice notice = noticeDao.getById(id); + if (notice == null || notice.getStatus() == Status.DRAFT) { + return vo; + } + vo.setNotice(notice); + + noticeDao.saveReadRecord(notice.getId(), UserUtil.getCurrentUser().getId()); + + List users = noticeDao.listReadUsers(id); + vo.setUsers(users); + + return vo; } @LogAnnotation @PutMapping - @ApiOperation(value = "修改文章") - @RequiresPermissions("articles:add") - public Articles updateArticles(@RequestBody Articles articles) { - articlesDao.update(articles); + @ApiOperation(value = "修改公告") + @RequiresPermissions("notice:add") + public Notice updateNotice(@RequestBody Notice notice) { + Notice no = noticeDao.getById(notice.getId()); + if (no.getStatus() == Status.PUBLISH) { + throw new IllegalArgumentException("发布状态的不能修改"); + } + noticeDao.update(notice); - return articles; + return notice; } @GetMapping - @ApiOperation(value = "文章列表") - @RequiresPermissions("articles:query") - public PageTableResponse listArticles(PageTableRequest request) { - return PageTableHandler. builder().countHandler(new CountHandler() { + @ApiOperation(value = "公告管理列表") + @RequiresPermissions("notice:query") + public PageTableResponse listNotice(PageTableRequest request) { + return PageTableHandler. builder().countHandler(new CountHandler() { @Override public int count(PageTableRequest request) { - return articlesDao.count(request.getParams()); + return noticeDao.count(request.getParams()); } - }).listHandler(new ListHandler() { + }).listHandler(new ListHandler() { @Override - public List list(PageTableRequest request) { - return articlesDao.list(request.getParams(), request.getOffset(), request.getLimit()); + public List list(PageTableRequest request) { + return noticeDao.list(request.getParams(), request.getOffset(), request.getLimit()); } }).build().handle(request); } @LogAnnotation @DeleteMapping("/{id}") - @ApiOperation(value = "删除文章") - @RequiresPermissions(value = { "articles:del" }) + @ApiOperation(value = "删除公告") + @RequiresPermissions(value = { "notice:del" }) public void delete(@PathVariable Long id) { - articlesDao.delete(id); + noticeDao.delete(id); + } + + @ApiOperation(value = "未读公告数") + @GetMapping("/count-unread") + public Integer countUnread() { + User user = UserUtil.getCurrentUser(); + return noticeDao.countUnread(user.getId()); + } + + @GetMapping("/published") + @ApiOperation(value = "公告列表") + public PageTableResponse listNoticeReadVO(PageTableRequest request) { + request.getParams().put("userId", UserUtil.getCurrentUser().getId()); + + return PageTableHandler. builder().countHandler(new CountHandler() { + + @Override + public int count(PageTableRequest request) { + return noticeDao.countNotice(request.getParams()); + } + }).listHandler(new ListHandler() { + + @Override + public List list(PageTableRequest request) { + return noticeDao.listNotice(request.getParams(), request.getOffset(), request.getLimit()); + } + }).build().handle(request); } } diff --git a/src/main/java/com/zw/admin/server/dao/ArticlesDao.java b/src/main/java/com/zw/admin/server/dao/NoticeDao.java similarity index 38% rename from src/main/java/com/zw/admin/server/dao/ArticlesDao.java rename to src/main/java/com/zw/admin/server/dao/NoticeDao.java index c84c26f..3f88eb1 100644 --- a/src/main/java/com/zw/admin/server/dao/ArticlesDao.java +++ b/src/main/java/com/zw/admin/server/dao/NoticeDao.java @@ -11,26 +11,41 @@ import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; -import com.zw.admin.server.model.Articles; +import com.zw.admin.server.dto.NoticeReadVO; +import com.zw.admin.server.model.Notice; +import com.zw.admin.server.model.User; @Mapper -public interface ArticlesDao { +public interface NoticeDao { - @Select("select * from articles t where t.id = #{id}") - Articles getById(Long id); + @Select("select * from t_notice t where t.id = #{id}") + Notice getById(Long id); - @Delete("delete from articles where id = #{id}") + @Delete("delete from t_notice where id = #{id}") int delete(Long id); - @Update("update articles t set title = #{title}, content = #{content}, status = #{status}, updateTime = #{updateTime} where t.id = #{id}") - int update(Articles articles); + @Update("update t_notice t set title = #{title}, content = #{content}, status = #{status}, updateTime = #{updateTime} where t.id = #{id}") + int update(Notice notice); @Options(useGeneratedKeys = true, keyProperty = "id") - @Insert("insert into articles(title, content, status, createTime, updateTime) values(#{title}, #{content}, #{status}, #{createTime}, #{updateTime})") - int save(Articles articles); + @Insert("insert into t_notice(title, content, status, createTime, updateTime) values(#{title}, #{content}, #{status}, #{createTime}, #{updateTime})") + int save(Notice notice); int count(@Param("params") Map params); - List list(@Param("params") Map params, @Param("offset") Integer offset, + List list(@Param("params") Map params, @Param("offset") Integer offset, + @Param("limit") Integer limit); + + @Insert("insert ignore into t_notice_read(noticeId, userId, createTime) values(#{noticeId}, #{userId}, now())") + int saveReadRecord(@Param("noticeId") Long noticeId, @Param("userId") Long userId); + + List listReadUsers(Long noticeId); + + @Select("select count(1) from t_notice t left join t_notice_read r on r.noticeId = t.id and r.userId = #{userId} where t.status = 1 and r.userId is null") + int countUnread(Long userId); + + int countNotice(@Param("params") Map params); + + List listNotice(@Param("params") Map params, @Param("offset") Integer offset, @Param("limit") Integer limit); } diff --git a/src/main/java/com/zw/admin/server/dto/NoticeReadVO.java b/src/main/java/com/zw/admin/server/dto/NoticeReadVO.java new file mode 100644 index 0000000..ffae09f --- /dev/null +++ b/src/main/java/com/zw/admin/server/dto/NoticeReadVO.java @@ -0,0 +1,19 @@ +package com.zw.admin.server.dto; + +import java.util.Date; + +import com.zw.admin.server.model.Notice; + +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter +public class NoticeReadVO extends Notice { + + private static final long serialVersionUID = -3842182350180882396L; + + private Long userId; + private Date readTime; + private Boolean isRead; +} diff --git a/src/main/java/com/zw/admin/server/dto/NoticeVO.java b/src/main/java/com/zw/admin/server/dto/NoticeVO.java new file mode 100644 index 0000000..806f446 --- /dev/null +++ b/src/main/java/com/zw/admin/server/dto/NoticeVO.java @@ -0,0 +1,21 @@ +package com.zw.admin.server.dto; + +import java.io.Serializable; +import java.util.List; + +import com.zw.admin.server.model.Notice; +import com.zw.admin.server.model.User; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class NoticeVO implements Serializable { + + private static final long serialVersionUID = 7363353918096951799L; + + private Notice notice; + + private List users; +} diff --git a/src/main/java/com/zw/admin/server/model/Articles.java b/src/main/java/com/zw/admin/server/model/Notice.java similarity index 86% rename from src/main/java/com/zw/admin/server/model/Articles.java rename to src/main/java/com/zw/admin/server/model/Notice.java index bdeded5..d33e397 100644 --- a/src/main/java/com/zw/admin/server/model/Articles.java +++ b/src/main/java/com/zw/admin/server/model/Notice.java @@ -5,7 +5,7 @@ import lombok.Setter; @Getter @Setter -public class Articles extends BaseEntity { +public class Notice extends BaseEntity { private static final long serialVersionUID = -4401913568806243090L; diff --git a/src/main/resources/mybatis-mappers/ArticlesMapper.xml b/src/main/resources/mybatis-mappers/ArticlesMapper.xml deleted file mode 100644 index db0824b..0000000 --- a/src/main/resources/mybatis-mappers/ArticlesMapper.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - and t.title like concat('%', #{params.title}, '%') - - - and t.status = #{params.status} - - - and t.updateTime >= #{params.beginTime} - - - - and DATE(t.updateTime) <= #{params.endTime} - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/mybatis-mappers/NoticeMapper.xml b/src/main/resources/mybatis-mappers/NoticeMapper.xml new file mode 100644 index 0000000..4d1efb4 --- /dev/null +++ b/src/main/resources/mybatis-mappers/NoticeMapper.xml @@ -0,0 +1,86 @@ + + + + + + + + and t.title like concat('%', #{params.title}, '%') + + + and t.status = #{params.status} + + + and t.updateTime >= #{params.beginTime} + + + + and DATE(t.updateTime) <= #{params.endTime} + + + + + + + + + + + + + t.status = 1 + + and t.title like concat('%', #{params.title}, '%') + + + + and t.updateTime >= #{params.beginTime} + + + + and DATE(t.updateTime) <= #{params.endTime} + + + + and r.createTime is null + + + and r.createTime is not null + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/public/index.html b/src/main/resources/public/index.html index 7492e00..78f858e 100644 --- a/src/main/resources/public/index.html +++ b/src/main/resources/public/index.html @@ -30,6 +30,9 @@