diff --git a/README.md b/README.md index 876a9d0..e8db25b 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,6 @@ novel-plus -- 父工程 | Redis | 缓存方案 | Aliyun OSS | 阿里云对象存储服务(图片存储方式之一,一行配置即可切换) | FastDFS | 开源轻量级分布式文件系统(图片存储方式之一,一行配置即可切换) -| Redisson | 实现分布式锁 | Lombok | 简化对象封装工具 | Docker | 应用容器引擎 | MySQL | 数据库服务 diff --git a/doc/sql/20230413.sql b/doc/sql/20230413.sql new file mode 100644 index 0000000..2369528 --- /dev/null +++ b/doc/sql/20230413.sql @@ -0,0 +1,38 @@ +CREATE TABLE `website_info` +( + id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + name varchar(50) NOT NULL COMMENT '网站名', + domain varchar(50) NOT NULL COMMENT '网站域名', + keyword varchar(50) NOT NULL COMMENT 'SEO关键词', + description varchar(512) NOT NULL COMMENT '网站描述', + qq varchar(20) NOT NULL COMMENT '站长QQ', + logo varchar(200) NOT NULL COMMENT '网站logo图片(默认)', + logo_dark varchar(200) NOT NULL COMMENT '网站logo图片(深色)', + create_time datetime null comment '创建时间', + create_user_id bigint null comment '创建人ID', + update_time datetime null comment '更新时间', + update_user_id bigint null comment '更新人ID', + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='网站信息表'; + +INSERT INTO website_info (id, name, domain, keyword, description, qq, logo, logo_dark, create_time, create_user_id, + update_time, update_user_id) +VALUES (1, '小说精品屋', 'www.xxyopen.com', '小说精品屋,小说,小说CMS,原创文学系统,开源小说系统,免费小说建站程序', + '小说精品屋是一个多端(PC、WAP)阅读、功能完善的原创文学CMS系统,由前台门户系统、作家后台管理系统、平台后台管理系统、爬虫管理系统等多个子系统构成,支持会员充值、订阅模式、新闻发布和实时统计报表等功能,新书自动入库,老书自动更新。', + '1179705413', 'https://youdoc.gitee.io/resource/images/logo/logo.png', + 'https://youdoc.gitee.io/resource/images/logo/logo_white.png', null, null, null, null); + +INSERT INTO novel_plus.sys_menu (menu_id, parent_id, name, url, perms, type, icon, order_num, gmt_create, gmt_modified) +VALUES (300, 0, '网站管理', '', '', 0, 'fa fa-television', 6, null, null); + +INSERT +INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) +VALUES (301, 300, '网站信息', 'novel/websiteInfo', 'novel:websiteInfo:websiteInfo', '1', 'fa', '6'); + + +INSERT INTO sys_role_menu (role_id, menu_id) +VALUES (1, 300); +INSERT INTO sys_role_menu (role_id, menu_id) +VALUES (1, 301); + diff --git a/doc/sql/novel_plus.sql b/doc/sql/novel_plus.sql index a88b702..fe4e2d1 100644 --- a/doc/sql/novel_plus.sql +++ b/doc/sql/novel_plus.sql @@ -2829,8 +2829,41 @@ alter table news alter table book_index add column storage_type varchar(10) NOT NULL DEFAULT 'db' COMMENT '存储方式' after book_price; -INSERT INTO `crawl_source` (`id`, `source_name`, `crawl_rule`, `source_status`, `create_time`, `update_time`) -VALUES (6, '新笔趣阁', - '{\n \"bookListUrl\": \"http://www.xbiquge.la/fenlei/{catId}_{page}.html\",\n \"catIdRule\": {\n \"catId1\": \"1\",\n \"catId2\": \"2\",\n \"catId3\": \"3\",\n \"catId4\": \"4\",\n \"catId5\": \"6\",\n \"catId6\": \"5\"\n },\n \"bookIdPatten\": \"\",\n \"pagePatten\": \"(\\\\d+)/\\\\d+\",\n \"totalPagePatten\": \"\\\\d+/(\\\\d+)\",\n \"bookDetailUrl\": \"http://www.xbiquge.la/{bookId}/\",\n \"bookNamePatten\": \"

([^/]+)

\",\n \"authorNamePatten\": \"者:([^/]+)

\",\n \"picUrlPatten\": \"src=\\\"(http://www.xbiquge.la/files/article/image/\\\\d+/\\\\d+/\\\\d+s\\\\.jpg)\\\"\",\n \"bookStatusRule\": {},\n \"descStart\": \"
\",\n \"descEnd\": \"
\",\n \"upadateTimePatten\": \"

最后更新:(\\\\d+-\\\\d+-\\\\d+\\\\s\\\\d+:\\\\d+:\\\\d+)

\",\n \"upadateTimeFormatPatten\": \"yyyy-MM-dd HH:mm:ss\",\n \"bookIndexUrl\": \"http://www.xbiquge.la/{bookId}/\",\n \"indexIdPatten\": \"[^/]+\",\n \"indexNamePatten\": \"([^/]+)\",\n \"bookContentUrl\": \"http://www.xbiquge.la/{bookId}/{indexId}.html\",\n \"contentStart\": \"
\",\n \"contentEnd\": \"

\"\n}', - 0, '2020-05-23 22:46:58', '2020-05-23 22:46:58'); + +CREATE TABLE `website_info` +( + id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', + name varchar(50) NOT NULL COMMENT '网站名', + domain varchar(50) NOT NULL COMMENT '网站域名', + keyword varchar(50) NOT NULL COMMENT 'SEO关键词', + description varchar(512) NOT NULL COMMENT '网站描述', + qq varchar(20) NOT NULL COMMENT '站长QQ', + logo varchar(200) NOT NULL COMMENT '网站logo图片(默认)', + logo_dark varchar(200) NOT NULL COMMENT '网站logo图片(深色)', + create_time datetime null comment '创建时间', + create_user_id bigint null comment '创建人ID', + update_time datetime null comment '更新时间', + update_user_id bigint null comment '更新人ID', + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 COMMENT ='网站信息表'; + +INSERT INTO website_info (id, name, domain, keyword, description, qq, logo, logo_dark, create_time, create_user_id, + update_time, update_user_id) +VALUES (1, '小说精品屋', 'www.xxyopen.com', '小说精品屋,小说,小说CMS,原创文学系统,开源小说系统,免费小说建站程序', + '小说精品屋是一个多端(PC、WAP)阅读、功能完善的原创文学CMS系统,由前台门户系统、作家后台管理系统、平台后台管理系统、爬虫管理系统等多个子系统构成,支持会员充值、订阅模式、新闻发布和实时统计报表等功能,新书自动入库,老书自动更新。', + '1179705413', 'https://youdoc.gitee.io/resource/images/logo/logo.png', + 'https://youdoc.gitee.io/resource/images/logo/logo_white.png', null, null, null, null); + +INSERT INTO novel_plus.sys_menu (menu_id, parent_id, name, url, perms, type, icon, order_num, gmt_create, gmt_modified) +VALUES (300, 0, '网站管理', '', '', 0, 'fa fa-television', 6, null, null); + +INSERT +INTO `sys_menu`(`menu_id`, `parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) +VALUES (301, 300, '网站信息', 'novel/websiteInfo', 'novel:websiteInfo:websiteInfo', '1', 'fa', '6'); + + +INSERT INTO sys_role_menu (role_id, menu_id) +VALUES (1, 300); +INSERT INTO sys_role_menu (role_id, menu_id) +VALUES (1, 301); \ No newline at end of file diff --git a/novel-admin/src/main/java/com/java2nb/common/config/Constant.java b/novel-admin/src/main/java/com/java2nb/common/config/Constant.java index fe8a3bc..91b8a57 100644 --- a/novel-admin/src/main/java/com/java2nb/common/config/Constant.java +++ b/novel-admin/src/main/java/com/java2nb/common/config/Constant.java @@ -1,6 +1,7 @@ package com.java2nb.common.config; public class Constant { + //演示系统账户 public static String DEMO_ACCOUNT = "test"; //自动去除表前缀 @@ -16,9 +17,11 @@ public class Constant { //部门根节点id public static Long DEPT_ROOT_ID = 0l; //缓存方式 - public static String CACHE_TYPE_REDIS ="redis"; + public static String CACHE_TYPE_REDIS = "redis"; public static String LOG_ERROR = "error"; - + public static final String UPLOAD_FILES_PREFIX = "/files/"; + + } diff --git a/novel-admin/src/main/java/com/java2nb/common/config/ShiroConfig.java b/novel-admin/src/main/java/com/java2nb/common/config/ShiroConfig.java index 39cf48f..28dfe60 100644 --- a/novel-admin/src/main/java/com/java2nb/common/config/ShiroConfig.java +++ b/novel-admin/src/main/java/com/java2nb/common/config/ShiroConfig.java @@ -71,7 +71,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/docs/**", "anon"); filterChainDefinitionMap.put("/layuimini/**", "anon"); filterChainDefinitionMap.put("/upload/**", "anon"); - filterChainDefinitionMap.put("/files/**", "anon"); + filterChainDefinitionMap.put(Constant.UPLOAD_FILES_PREFIX + "**", "anon"); filterChainDefinitionMap.put("/logout", "logout"); filterChainDefinitionMap.put("/blog", "anon"); filterChainDefinitionMap.put("/blog/open/**", "anon"); diff --git a/novel-admin/src/main/java/com/java2nb/common/config/WebConfigurer.java b/novel-admin/src/main/java/com/java2nb/common/config/WebConfigurer.java index 6e65e53..b8b173f 100644 --- a/novel-admin/src/main/java/com/java2nb/common/config/WebConfigurer.java +++ b/novel-admin/src/main/java/com/java2nb/common/config/WebConfigurer.java @@ -7,11 +7,14 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter @Component class WebConfigurer extends WebMvcConfigurerAdapter { - @Autowired + + @Autowired JnConfig jnConfig; - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/files/**").addResourceLocations("file:///"+ jnConfig.getUploadPath()); - } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler(Constant.UPLOAD_FILES_PREFIX + "**") + .addResourceLocations("file:///" + jnConfig.getUploadPath()); + } } \ No newline at end of file diff --git a/novel-admin/src/main/java/com/java2nb/common/controller/FileController.java b/novel-admin/src/main/java/com/java2nb/common/controller/FileController.java index 363dfe7..d62a160 100644 --- a/novel-admin/src/main/java/com/java2nb/common/controller/FileController.java +++ b/novel-admin/src/main/java/com/java2nb/common/controller/FileController.java @@ -1,12 +1,10 @@ package com.java2nb.common.controller; +import com.java2nb.common.config.Constant; import com.java2nb.common.config.JnConfig; import com.java2nb.common.domain.FileDO; import com.java2nb.common.service.FileService; import com.java2nb.common.utils.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -14,7 +12,11 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import java.io.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; import java.net.URLEncoder; import java.util.Date; import java.util.HashMap; @@ -23,7 +25,7 @@ import java.util.Map; /** * 文件上传 - * + * * @author xiongxy * @email 1179705413@qq.com * @date 2019-09-19 16:02:20 @@ -32,165 +34,167 @@ import java.util.Map; @RequestMapping("/common/sysFile") public class FileController extends BaseController { - @Autowired - private FileService sysFileService; + @Autowired + private FileService sysFileService; - @Autowired - private JnConfig jnConfig; + @Autowired + private JnConfig jnConfig; - @GetMapping() - @RequiresPermissions("common:sysFile:sysFile") - String sysFile(Model model) { - Map params = new HashMap<>(16); - return "common/file/file"; - } + @GetMapping() + @RequiresPermissions("common:sysFile:sysFile") + String sysFile(Model model) { + Map params = new HashMap<>(16); + return "common/file/file"; + } - @ResponseBody - @GetMapping("/list") - @RequiresPermissions("common:sysFile:sysFile") - public PageBean list(@RequestParam Map params) { - // 查询列表数据 - Query query = new Query(params); - List sysFileList = sysFileService.list(query); - int total = sysFileService.count(query); - PageBean pageBean = new PageBean(sysFileList, total); - return pageBean; - } + @ResponseBody + @GetMapping("/list") + @RequiresPermissions("common:sysFile:sysFile") + public PageBean list(@RequestParam Map params) { + // 查询列表数据 + Query query = new Query(params); + List sysFileList = sysFileService.list(query); + int total = sysFileService.count(query); + PageBean pageBean = new PageBean(sysFileList, total); + return pageBean; + } - @GetMapping("/add") - // @RequiresPermissions("common:bComments") - String add() { - return "common/sysFile/add"; - } + @GetMapping("/add") + // @RequiresPermissions("common:bComments") + String add() { + return "common/sysFile/add"; + } - @GetMapping("/edit") - // @RequiresPermissions("common:bComments") - String edit(Long id, Model model) { - FileDO sysFile = sysFileService.get(id); - model.addAttribute("sysFile", sysFile); - return "common/sysFile/edit"; - } + @GetMapping("/edit") + // @RequiresPermissions("common:bComments") + String edit(Long id, Model model) { + FileDO sysFile = sysFileService.get(id); + model.addAttribute("sysFile", sysFile); + return "common/sysFile/edit"; + } - /** - * 信息 - */ - @RequestMapping("/info/{id}") - @RequiresPermissions("common:info") - public R info(@PathVariable("id") Long id) { - FileDO sysFile = sysFileService.get(id); - return R.ok().put("sysFile", sysFile); - } + /** + * 信息 + */ + @RequestMapping("/info/{id}") + @RequiresPermissions("common:info") + public R info(@PathVariable("id") Long id) { + FileDO sysFile = sysFileService.get(id); + return R.ok().put("sysFile", sysFile); + } - /** - * 保存 - */ - @ResponseBody - @PostMapping("/save") - @RequiresPermissions("common:save") - public R save(FileDO sysFile) { - if (sysFileService.save(sysFile) > 0) { - return R.ok(); - } - return R.error(); - } + /** + * 保存 + */ + @ResponseBody + @PostMapping("/save") + @RequiresPermissions("common:save") + public R save(FileDO sysFile) { + if (sysFileService.save(sysFile) > 0) { + return R.ok(); + } + return R.error(); + } - /** - * 修改 - */ - @RequestMapping("/update") - @RequiresPermissions("common:update") - public R update(@RequestBody FileDO sysFile) { - sysFileService.update(sysFile); + /** + * 修改 + */ + @RequestMapping("/update") + @RequiresPermissions("common:update") + public R update(@RequestBody FileDO sysFile) { + sysFileService.update(sysFile); - return R.ok(); - } + return R.ok(); + } - /** - * 删除 - */ - @PostMapping("/remove") - @ResponseBody - // @RequiresPermissions("common:remove") - public R remove(Long id, HttpServletRequest request) { - if ("test".equals(getUsername())) { - return R.error(1, "演示系统不允许修改,完整体验请部署程序"); - } - String fileName = jnConfig.getUploadPath() + sysFileService.get(id).getUrl().replace("/files/", ""); - if (sysFileService.remove(id) > 0) { - boolean b = FileUtil.deleteFile(fileName); - if (!b) { - return R.error("数据库记录删除成功,文件删除失败"); - } - return R.ok(); - } else { - return R.error(); - } - } + /** + * 删除 + */ + @PostMapping("/remove") + @ResponseBody + // @RequiresPermissions("common:remove") + public R remove(Long id, HttpServletRequest request) { + if ("test".equals(getUsername())) { + return R.error(1, "演示系统不允许修改,完整体验请部署程序"); + } + String fileName = + jnConfig.getUploadPath() + sysFileService.get(id).getUrl().replace(Constant.UPLOAD_FILES_PREFIX, ""); + if (sysFileService.remove(id) > 0) { + boolean b = FileUtil.deleteFile(fileName); + if (!b) { + return R.error("数据库记录删除成功,文件删除失败"); + } + return R.ok(); + } else { + return R.error(); + } + } - /** - * 删除 - */ - @PostMapping("/batchRemove") - @ResponseBody - @RequiresPermissions("common:remove") - public R remove(@RequestParam("ids[]") Long[] ids) { - if ("test".equals(getUsername())) { - return R.error(1, "演示系统不允许修改,完整体验请部署程序"); - } - sysFileService.batchRemove(ids); - return R.ok(); - } + /** + * 删除 + */ + @PostMapping("/batchRemove") + @ResponseBody + @RequiresPermissions("common:remove") + public R remove(@RequestParam("ids[]") Long[] ids) { + if ("test".equals(getUsername())) { + return R.error(1, "演示系统不允许修改,完整体验请部署程序"); + } + sysFileService.batchRemove(ids); + return R.ok(); + } - @ResponseBody - @PostMapping("/upload") - R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) { - if ("test".equals(getUsername())) { - return R.error(1, "演示系统不允许修改,完整体验请部署程序"); - } - Date date = new Date(); - String year = DateUtils.format(date,DateUtils.YEAR_PATTERN); - String month = DateUtils.format(date,DateUtils.MONTH_PATTERN); - String day = DateUtils.format(date,DateUtils.DAY_PATTERN); + @ResponseBody + @PostMapping("/upload") + R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) { + if ("test".equals(getUsername())) { + return R.error(1, "演示系统不允许修改,完整体验请部署程序"); + } + Date date = new Date(); + String year = DateUtils.format(date, DateUtils.YEAR_PATTERN); + String month = DateUtils.format(date, DateUtils.MONTH_PATTERN); + String day = DateUtils.format(date, DateUtils.DAY_PATTERN); - String fileName = file.getOriginalFilename(); - String fileDir = year+"/"+month+"/"+day + "/"; - fileName = FileUtil.renameToUUID(fileName); - FileDO sysFile = new FileDO(FileType.fileType(fileName), "/files/" + fileDir + fileName, date); - try { - FileUtil.uploadFile(file.getBytes(), jnConfig.getUploadPath()+fileDir, fileName); - } catch (Exception e) { - return R.error(); - } + String fileName = file.getOriginalFilename(); + String fileDir = year + "/" + month + "/" + day + "/"; + fileName = FileUtil.renameToUUID(fileName); + FileDO sysFile = new FileDO(FileType.fileType(fileName), Constant.UPLOAD_FILES_PREFIX + fileDir + fileName, + date); + try { + FileUtil.uploadFile(file.getBytes(), jnConfig.getUploadPath() + fileDir, fileName); + } catch (Exception e) { + return R.error(); + } - if (sysFileService.save(sysFile) > 0) { - return R.ok().put("fileName",sysFile.getUrl()); - } - return R.error(); - } + if (sysFileService.save(sysFile) > 0) { + return R.ok().put("fileName", sysFile.getUrl()); + } + return R.error(); + } - /** - * 文件下载 - */ - @RequestMapping(value = "/download") - public void fileDownload(String filePath,String fileName, HttpServletResponse resp) throws Exception { - String realFilePath = jnConfig.getUploadPath() + filePath; - InputStream in = new FileInputStream(realFilePath); - //设置响应头,对文件进行url编码 - fileName = URLEncoder.encode(fileName, "UTF-8"); - resp.setHeader("Content-Disposition", "attachment;filename=" + fileName); + /** + * 文件下载 + */ + @RequestMapping(value = "/download") + public void fileDownload(String filePath, String fileName, HttpServletResponse resp) throws Exception { + String realFilePath = jnConfig.getUploadPath() + filePath; + InputStream in = new FileInputStream(realFilePath); + //设置响应头,对文件进行url编码 + fileName = URLEncoder.encode(fileName, "UTF-8"); + resp.setHeader("Content-Disposition", "attachment;filename=" + fileName); - resp.setContentLength(in.available()); + resp.setContentLength(in.available()); - OutputStream out = resp.getOutputStream(); - byte[] b = new byte[1024]; - int len = 0; - while ((len = in.read(b)) != -1) { - out.write(b, 0, len); - } - out.flush(); - out.close(); - in.close(); - } + OutputStream out = resp.getOutputStream(); + byte[] b = new byte[1024]; + int len = 0; + while ((len = in.read(b)) != -1) { + out.write(b, 0, len); + } + out.flush(); + out.close(); + in.close(); + } } diff --git a/novel-admin/src/main/java/com/java2nb/common/service/impl/FileServiceImpl.java b/novel-admin/src/main/java/com/java2nb/common/service/impl/FileServiceImpl.java index e746869..eb561b7 100644 --- a/novel-admin/src/main/java/com/java2nb/common/service/impl/FileServiceImpl.java +++ b/novel-admin/src/main/java/com/java2nb/common/service/impl/FileServiceImpl.java @@ -1,72 +1,74 @@ package com.java2nb.common.service.impl; +import com.java2nb.common.config.Constant; import com.java2nb.common.config.JnConfig; +import com.java2nb.common.dao.FileDao; +import com.java2nb.common.domain.FileDO; +import com.java2nb.common.service.FileService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.io.File; import java.util.List; import java.util.Map; -import com.java2nb.common.dao.FileDao; -import com.java2nb.common.domain.FileDO; -import com.java2nb.common.service.FileService; -import org.springframework.util.StringUtils; - @Service public class FileServiceImpl implements FileService { - @Autowired - private FileDao sysFileMapper; - @Autowired - private JnConfig jnConfig; - @Override - public FileDO get(Long id){ - return sysFileMapper.get(id); - } - - @Override - public List list(Map map){ - return sysFileMapper.list(map); - } - - @Override - public int count(Map map){ - return sysFileMapper.count(map); - } - - @Override - public int save(FileDO sysFile){ - return sysFileMapper.save(sysFile); - } - - @Override - public int update(FileDO sysFile){ - return sysFileMapper.update(sysFile); - } - - @Override - public int remove(Long id){ - return sysFileMapper.remove(id); - } - - @Override - public int batchRemove(Long[] ids){ - return sysFileMapper.batchRemove(ids); - } + @Autowired + private FileDao sysFileMapper; + + @Autowired + private JnConfig jnConfig; + + @Override + public FileDO get(Long id) { + return sysFileMapper.get(id); + } + + @Override + public List list(Map map) { + return sysFileMapper.list(map); + } + + @Override + public int count(Map map) { + return sysFileMapper.count(map); + } + + @Override + public int save(FileDO sysFile) { + return sysFileMapper.save(sysFile); + } + + @Override + public int update(FileDO sysFile) { + return sysFileMapper.update(sysFile); + } + + @Override + public int remove(Long id) { + return sysFileMapper.remove(id); + } + + @Override + public int batchRemove(Long[] ids) { + return sysFileMapper.batchRemove(ids); + } @Override public Boolean isExist(String url) { - Boolean isExist = false; - if (!StringUtils.isEmpty(url)) { - String filePath = url.replace("/files/", ""); - filePath = jnConfig.getUploadPath() + filePath; - File file = new File(filePath); - if (file.exists()) { - isExist = true; - } - } - return isExist; - } - } + Boolean isExist = false; + if (!StringUtils.isEmpty(url)) { + String filePath = url.replace(Constant.UPLOAD_FILES_PREFIX, ""); + filePath = jnConfig.getUploadPath() + filePath; + File file = new File(filePath); + if (file.exists()) { + isExist = true; + } + } + return isExist; + } +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/controller/WebsiteInfoController.java b/novel-admin/src/main/java/com/java2nb/novel/controller/WebsiteInfoController.java new file mode 100644 index 0000000..89b0507 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/controller/WebsiteInfoController.java @@ -0,0 +1,50 @@ +package com.java2nb.novel.controller; + +import com.java2nb.common.utils.R; +import com.java2nb.novel.domain.WebsiteInfoDO; +import com.java2nb.novel.service.WebsiteInfoService; +import io.swagger.annotations.ApiOperation; +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.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * 网站信息表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2023-04-14 11:05:43 + */ + +@Controller +@RequestMapping("/novel/websiteInfo") +public class WebsiteInfoController { + + @Autowired + private WebsiteInfoService websiteInfoService; + + @GetMapping() + @RequiresPermissions("novel:websiteInfo:detail") + String detail(Model model) { + WebsiteInfoDO websiteInfo = websiteInfoService.get(1L); + model.addAttribute("websiteInfo", websiteInfo); + return "novel/websiteInfo/detail"; + } + + /** + * 修改 + */ + @ApiOperation(value = "修改网站信息表", notes = "修改网站信息表") + @ResponseBody + @RequestMapping("/update") + @RequiresPermissions("novel:websiteInfo:edit") + public R update(WebsiteInfoDO websiteInfo) { + websiteInfoService.update(websiteInfo); + return R.ok(); + } + +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/dao/WebsiteInfoDao.java b/novel-admin/src/main/java/com/java2nb/novel/dao/WebsiteInfoDao.java new file mode 100644 index 0000000..f84ee58 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/dao/WebsiteInfoDao.java @@ -0,0 +1,32 @@ +package com.java2nb.novel.dao; + +import com.java2nb.novel.domain.WebsiteInfoDO; + +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.annotations.Mapper; + +/** + * 网站信息表 + * @author xiongxy + * @email 1179705413@qq.com + * @date 2023-04-14 11:05:43 + */ +@Mapper +public interface WebsiteInfoDao { + + WebsiteInfoDO get(Long id); + + List list(Map map); + + int count(Map map); + + int save(WebsiteInfoDO websiteInfo); + + int update(WebsiteInfoDO websiteInfo); + + int remove(Long id); + + int batchRemove(Long[] ids); +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/domain/WebsiteInfoDO.java b/novel-admin/src/main/java/com/java2nb/novel/domain/WebsiteInfoDO.java new file mode 100644 index 0000000..e4ff0f3 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/domain/WebsiteInfoDO.java @@ -0,0 +1,208 @@ +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 11:05:43 + */ +public class WebsiteInfoDO implements Serializable { + private static final long serialVersionUID = 1L; + + + //主键 + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long id; + //网站名 + private String name; + //网站域名 + private String domain; + //SEO关键词 + private String keyword; + //网站描述 + private String description; + //站长QQ + private String qq; + //网站logo图片(默认) + private String logo; + //网站logo图片(深色) + private String logoDark; + //创建时间 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + //创建人ID + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long createUserId; + //更新时间 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + //更新人ID + //java中的long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值) + //所以通过序列化成字符串来解决 + @JsonSerialize(using = LongToStringSerializer.class) + private Long updateUserId; + + /** + * 设置:主键 + */ + 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 setDomain(String domain) { + this.domain = domain; + } + /** + * 获取:网站域名 + */ + public String getDomain() { + return domain; + } + /** + * 设置:SEO关键词 + */ + public void setKeyword(String keyword) { + this.keyword = keyword; + } + /** + * 获取:SEO关键词 + */ + public String getKeyword() { + return keyword; + } + /** + * 设置:网站描述 + */ + public void setDescription(String description) { + this.description = description; + } + /** + * 获取:网站描述 + */ + public String getDescription() { + return description; + } + /** + * 设置:站长QQ + */ + public void setQq(String qq) { + this.qq = qq; + } + /** + * 获取:站长QQ + */ + public String getQq() { + return qq; + } + /** + * 设置:网站logo图片(默认) + */ + public void setLogo(String logo) { + this.logo = logo; + } + /** + * 获取:网站logo图片(默认) + */ + public String getLogo() { + return logo; + } + /** + * 设置:网站logo图片(深色) + */ + public void setLogoDark(String logoDark) { + this.logoDark = logoDark; + } + /** + * 获取:网站logo图片(深色) + */ + public String getLogoDark() { + return logoDark; + } + /** + * 设置:创建时间 + */ + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + /** + * 获取:创建时间 + */ + public Date getCreateTime() { + return createTime; + } + /** + * 设置:创建人ID + */ + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + /** + * 获取:创建人ID + */ + public Long getCreateUserId() { + return createUserId; + } + /** + * 设置:更新时间 + */ + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + /** + * 获取:更新时间 + */ + public Date getUpdateTime() { + return updateTime; + } + /** + * 设置:更新人ID + */ + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } + /** + * 获取:更新人ID + */ + public Long getUpdateUserId() { + return updateUserId; + } +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/WebsiteInfoService.java b/novel-admin/src/main/java/com/java2nb/novel/service/WebsiteInfoService.java new file mode 100644 index 0000000..8bfc7c3 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/service/WebsiteInfoService.java @@ -0,0 +1,30 @@ +package com.java2nb.novel.service; + +import com.java2nb.novel.domain.WebsiteInfoDO; + +import java.util.List; +import java.util.Map; + +/** + * 网站信息表 + * + * @author xiongxy + * @email 1179705413@qq.com + * @date 2023-04-14 11:05:43 + */ +public interface WebsiteInfoService { + + WebsiteInfoDO get(Long id); + + List list(Map map); + + int count(Map map); + + int save(WebsiteInfoDO websiteInfo); + + int update(WebsiteInfoDO websiteInfo); + + int remove(Long id); + + int batchRemove(Long[] ids); +} diff --git a/novel-admin/src/main/java/com/java2nb/novel/service/impl/WebsiteInfoServiceImpl.java b/novel-admin/src/main/java/com/java2nb/novel/service/impl/WebsiteInfoServiceImpl.java new file mode 100644 index 0000000..f32c2c9 --- /dev/null +++ b/novel-admin/src/main/java/com/java2nb/novel/service/impl/WebsiteInfoServiceImpl.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.WebsiteInfoDao; +import com.java2nb.novel.domain.WebsiteInfoDO; +import com.java2nb.novel.service.WebsiteInfoService; + + + +@Service +public class WebsiteInfoServiceImpl implements WebsiteInfoService { + @Autowired + private WebsiteInfoDao websiteInfoDao; + + @Override + public WebsiteInfoDO get(Long id){ + return websiteInfoDao.get(id); + } + + @Override + public List list(Map map){ + return websiteInfoDao.list(map); + } + + @Override + public int count(Map map){ + return websiteInfoDao.count(map); + } + + @Override + public int save(WebsiteInfoDO websiteInfo){ + return websiteInfoDao.save(websiteInfo); + } + + @Override + public int update(WebsiteInfoDO websiteInfo){ + return websiteInfoDao.update(websiteInfo); + } + + @Override + public int remove(Long id){ + return websiteInfoDao.remove(id); + } + + @Override + public int batchRemove(Long[] ids){ + return websiteInfoDao.batchRemove(ids); + } + +} diff --git a/novel-admin/src/main/java/com/java2nb/system/service/impl/SysUserServiceImpl.java b/novel-admin/src/main/java/com/java2nb/system/service/impl/SysUserServiceImpl.java index 56f0d5d..449d4da 100644 --- a/novel-admin/src/main/java/com/java2nb/system/service/impl/SysUserServiceImpl.java +++ b/novel-admin/src/main/java/com/java2nb/system/service/impl/SysUserServiceImpl.java @@ -1,14 +1,19 @@ package com.java2nb.system.service.impl; -import java.awt.image.BufferedImage; -import java.io.ByteArrayOutputStream; -import java.util.*; - +import com.java2nb.common.config.Constant; import com.java2nb.common.config.JnConfig; import com.java2nb.common.domain.FileDO; +import com.java2nb.common.domain.Tree; import com.java2nb.common.service.FileService; import com.java2nb.common.utils.*; +import com.java2nb.system.dao.DeptDao; +import com.java2nb.system.dao.SysUserDao; +import com.java2nb.system.dao.UserRoleDao; +import com.java2nb.system.domain.DeptDO; +import com.java2nb.system.domain.UserDO; +import com.java2nb.system.domain.UserRoleDO; import com.java2nb.system.service.DeptService; +import com.java2nb.system.service.SysUserService; import com.java2nb.system.vo.UserVO; import org.apache.commons.lang.ArrayUtils; import org.slf4j.Logger; @@ -16,22 +21,17 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - -import com.java2nb.common.domain.Tree; -import com.java2nb.system.dao.DeptDao; -import com.java2nb.system.dao.SysUserDao; -import com.java2nb.system.dao.UserRoleDao; -import com.java2nb.system.domain.DeptDO; -import com.java2nb.system.domain.UserDO; -import com.java2nb.system.domain.UserRoleDO; -import com.java2nb.system.service.SysUserService; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.util.*; @Transactional @Service public class SysUserServiceImpl implements SysUserService { + @Autowired SysUserDao userMapper; @Autowired @@ -64,7 +64,7 @@ public class SysUserServiceImpl implements SysUserService { List childIds = deptService.listChildrenIds(deptIdl); childIds.add(deptIdl); map.put("deptId", null); - map.put("deptIds",childIds); + map.put("deptIds", childIds); } return userMapper.listByPerm(map); } @@ -213,7 +213,7 @@ public class SysUserServiceImpl implements SysUserService { public Map updatePersonalImg(MultipartFile file, String avatar_data, Long userId) throws Exception { String fileName = file.getOriginalFilename(); fileName = FileUtil.renameToUUID(fileName); - FileDO sysFile = new FileDO(FileType.fileType(fileName), "/files/" + fileName, new Date()); + FileDO sysFile = new FileDO(FileType.fileType(fileName), Constant.UPLOAD_FILES_PREFIX + fileName, new Date()); //获取图片后缀 String prefix = fileName.substring((fileName.lastIndexOf(".") + 1)); String[] str = avatar_data.split(","); diff --git a/novel-admin/src/main/resources/application-dev.yml b/novel-admin/src/main/resources/application-dev.yml index 647122b..c63a852 100644 --- a/novel-admin/src/main/resources/application-dev.yml +++ b/novel-admin/src/main/resources/application-dev.yml @@ -10,7 +10,7 @@ spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true + url: jdbc:mysql://127.0.0.1:3306/novel_plus?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root password: test123456 #password: diff --git a/novel-admin/src/main/resources/mybatis/novel/WebsiteInfoMapper.xml b/novel-admin/src/main/resources/mybatis/novel/WebsiteInfoMapper.xml new file mode 100644 index 0000000..266c659 --- /dev/null +++ b/novel-admin/src/main/resources/mybatis/novel/WebsiteInfoMapper.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + insert into website_info + ( + `id`, + `name`, + `domain`, + `keyword`, + `description`, + `qq`, + `logo`, + `logo_dark`, + `create_time`, + `create_user_id`, + `update_time`, + `update_user_id` + ) + values + ( + #{id}, + #{name}, + #{domain}, + #{keyword}, + #{description}, + #{qq}, + #{logo}, + #{logoDark}, + #{createTime}, + #{createUserId}, + #{updateTime}, + #{updateUserId} + ) + + + + insert into website_info + ( + `id`, + `name`, + `domain`, + `keyword`, + `description`, + `qq`, + `logo`, + `logo_dark`, + `create_time`, + `create_user_id`, + `update_time`, + `update_user_id` + ) + values + ( + #{id}, + #{name}, + #{domain}, + #{keyword}, + #{description}, + #{qq}, + #{logo}, + #{logoDark}, + #{createTime}, + #{createUserId}, + #{updateTime}, + #{updateUserId} + ) + + + + update website_info + + `name` = #{name}, + `domain` = #{domain}, + `keyword` = #{keyword}, + `description` = #{description}, + `qq` = #{qq}, + `logo` = #{logo}, + `logo_dark` = #{logoDark}, + `create_time` = #{createTime}, + `create_user_id` = #{createUserId}, + `update_time` = #{updateTime}, + `update_user_id` = #{updateUserId} + + where id = #{id} + + + + delete from website_info where id = #{value} + + + + delete from website_info where id in + + #{id} + + + + \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/js/appjs/novel/websiteInfo/edit.js b/novel-admin/src/main/resources/static/js/appjs/novel/websiteInfo/edit.js new file mode 100644 index 0000000..b3384bd --- /dev/null +++ b/novel-admin/src/main/resources/static/js/appjs/novel/websiteInfo/edit.js @@ -0,0 +1,99 @@ +var E = window.wangEditor; +$("[id^='contentEditor']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(13); + var editor = new E('#contentEditor' + relName); +// 自定义菜单配置 + editor.customConfig.menus = [ + 'head', // 标题 + 'bold', // 粗体 + 'fontSize', // 字号 + 'fontName', // 字体 + 'italic', // 斜体 + 'underline', // 下划线 + 'strikeThrough', // 删除线 + 'foreColor', // 文字颜色 + //'backColor', // 背景颜色 + //'link', // 插入链接 + 'list', // 列表 + 'justify', // 对齐方式 + 'quote', // 引用 + 'emoticon', // 表情 + 'image', // 插入图片 + //'table', // 表格 + //'video', // 插入视频 + //'code', // 插入代码 + 'undo', // 撤销 + 'redo' // 重复 + ]; + editor.customConfig.onchange = function (html) { + // html 即变化之后的内容 + $("#" + relName).val(html); + } + editor.customConfig.uploadImgShowBase64 = true; + editor.create(); + editor.txt.html($("#" + relName).val()); + +}) + +$("[id^='picImage']").each(function (index, ele) { + var relName = $(ele).attr("id").substring(8); + layui.use('upload', function () { + var upload = layui.upload; + //执行实例 + var uploadInst = upload.render({ + elem: '#picImage' + relName, //绑定元素 + url: '/common/sysFile/upload', //上传接口 + size: 1000, + accept: 'file', + done: function (r) { + $("#picImage" + relName).attr("src", r.fileName); + $("#" + relName).val(r.fileName); + }, + error: function (r) { + layer.msg(r.msg); + } + }); + }); + +}); + +$().ready(function () { + validateRule(); +}); + +$.validator.setDefaults({ + submitHandler: function () { + update(); + } +}); + +function update() { + $.ajax({ + cache: true, + type: "POST", + url: "/novel/websiteInfo/update", + data: $('#signupForm').serialize(),// 你的formid + async: false, + error: function (request) { + layer.alert("Connection error"); + }, + success: function (data) { + if (data.code == 0) { + layer.msg("操作成功"); + } else { + layer.alert(data.msg) + } + + } + }); + +} + +function validateRule() { + var icon = " "; + $("#signupForm").validate({ + ignore: "", + rules: {}, + messages: {} + }) +} \ No newline at end of file diff --git a/novel-admin/src/main/resources/static/sql/novel/author/menu.js b/novel-admin/src/main/resources/static/sql/novel/author/menu.js index d561b52..e69de29 100644 --- a/novel-admin/src/main/resources/static/sql/novel/author/menu.js +++ b/novel-admin/src/main/resources/static/sql/novel/author/menu.js @@ -1,18 +0,0 @@ --- 菜单SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - VALUES ('1', '作者表', 'novel/author', 'novel:author:author', '1', 'fa', '6'); - --- 按钮父菜单ID -set @parentId = @@identity; - --- 菜单对应按钮SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '查看', null, 'novel:author:detail', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '新增', null, 'novel:author:add', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '修改', null, 'novel:author:edit', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '删除', null, 'novel:author:remove', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '批量删除', null, 'novel:author:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js b/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js index 8c6c25d..e69de29 100644 --- a/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js +++ b/novel-admin/src/main/resources/static/sql/novel/authorCode/menu.js @@ -1,18 +0,0 @@ --- 菜单SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - VALUES ('1', '作家邀请码表', 'novel/authorCode', 'novel:authorCode:authorCode', '1', 'fa', '6'); - --- 按钮父菜单ID -set @parentId = @@identity; - --- 菜单对应按钮SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '查看', null, 'novel:authorCode:detail', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '新增', null, 'novel:authorCode:add', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '修改', null, 'novel:authorCode:edit', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '删除', null, 'novel:authorCode:remove', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '批量删除', null, 'novel:authorCode:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/static/sql/novel/book/menu.js b/novel-admin/src/main/resources/static/sql/novel/book/menu.js index 057e333..e69de29 100644 --- a/novel-admin/src/main/resources/static/sql/novel/book/menu.js +++ b/novel-admin/src/main/resources/static/sql/novel/book/menu.js @@ -1,18 +0,0 @@ --- 菜单SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - VALUES ('1', '小说表', 'novel/book', 'novel:book:book', '1', 'fa', '6'); - --- 按钮父菜单ID -set @parentId = @@identity; - --- 菜单对应按钮SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '查看', null, 'novel:book:detail', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '新增', null, 'novel:book:add', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '修改', null, 'novel:book:edit', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '删除', null, 'novel:book:remove', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '批量删除', null, 'novel:book:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/static/sql/novel/category/menu.js b/novel-admin/src/main/resources/static/sql/novel/category/menu.js index de0b6a7..e69de29 100644 --- a/novel-admin/src/main/resources/static/sql/novel/category/menu.js +++ b/novel-admin/src/main/resources/static/sql/novel/category/menu.js @@ -1,18 +0,0 @@ --- 菜单SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - VALUES ('1', '新闻类别表', 'novel/category', 'novel:category:category', '1', 'fa', '6'); - --- 按钮父菜单ID -set @parentId = @@identity; - --- 菜单对应按钮SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '查看', null, 'novel:category:detail', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '新增', null, 'novel:category:add', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '修改', null, 'novel:category:edit', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '删除', null, 'novel:category:remove', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '批量删除', null, 'novel:category:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/static/sql/novel/news/menu.js b/novel-admin/src/main/resources/static/sql/novel/news/menu.js index 24acd26..e69de29 100644 --- a/novel-admin/src/main/resources/static/sql/novel/news/menu.js +++ b/novel-admin/src/main/resources/static/sql/novel/news/menu.js @@ -1,18 +0,0 @@ --- 菜单SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - VALUES ('1', '新闻表', 'novel/news', 'novel:news:news', '1', 'fa', '6'); - --- 按钮父菜单ID -set @parentId = @@identity; - --- 菜单对应按钮SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '查看', null, 'novel:news:detail', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '新增', null, 'novel:news:add', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '修改', null, 'novel:news:edit', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '删除', null, 'novel:news:remove', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '批量删除', null, 'novel:news:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/static/sql/novel/pay/menu.js b/novel-admin/src/main/resources/static/sql/novel/pay/menu.js index 4ba9933..e69de29 100644 --- a/novel-admin/src/main/resources/static/sql/novel/pay/menu.js +++ b/novel-admin/src/main/resources/static/sql/novel/pay/menu.js @@ -1,18 +0,0 @@ --- 菜单SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - VALUES ('1', '充值订单', 'novel/pay', 'novel:pay:pay', '1', 'fa', '6'); - --- 按钮父菜单ID -set @parentId = @@identity; - --- 菜单对应按钮SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '查看', null, 'novel:pay:detail', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '新增', null, 'novel:pay:add', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '修改', null, 'novel:pay:edit', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '删除', null, 'novel:pay:remove', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '批量删除', null, 'novel:pay:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/static/sql/novel/user/menu.js b/novel-admin/src/main/resources/static/sql/novel/user/menu.js index 6319b06..e69de29 100644 --- a/novel-admin/src/main/resources/static/sql/novel/user/menu.js +++ b/novel-admin/src/main/resources/static/sql/novel/user/menu.js @@ -1,18 +0,0 @@ --- 菜单SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - VALUES ('1', '', 'novel/user', 'novel:user:user', '1', 'fa', '6'); - --- 按钮父菜单ID -set @parentId = @@identity; - --- 菜单对应按钮SQL -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '查看', null, 'novel:user:detail', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '新增', null, 'novel:user:add', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '修改', null, 'novel:user:edit', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '删除', null, 'novel:user:remove', '2', null, '6'; -INSERT INTO `sys_menu` (`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) - SELECT @parentId, '批量删除', null, 'novel:user:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/static/sql/novel/websiteInfo/menu.js b/novel-admin/src/main/resources/static/sql/novel/websiteInfo/menu.js new file mode 100644 index 0000000..f4df000 --- /dev/null +++ b/novel-admin/src/main/resources/static/sql/novel/websiteInfo/menu.js @@ -0,0 +1,36 @@ +--菜单SQL +INSERT +INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) +VALUES('247', '网站信息表', 'novel/websiteInfo', 'novel:websiteInfo:websiteInfo', '1', 'fa', '6'); + +--按钮父菜单ID +set +@parentId += @@identity; + +--菜单对应按钮SQL +INSERT +INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) +SELECT +@parentId, +'查看', null, 'novel:websiteInfo:detail', '2', null, '6'; +INSERT +INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) +SELECT +@parentId, +'新增', null, 'novel:websiteInfo:add', '2', null, '6'; +INSERT +INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) +SELECT +@parentId, +'修改', null, 'novel:websiteInfo:edit', '2', null, '6'; +INSERT +INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) +SELECT +@parentId, +'删除', null, 'novel:websiteInfo:remove', '2', null, '6'; +INSERT +INTO`sys_menu`(`parent_id`, `name`, `url`, `perms`, `type`, `icon`, `order_num`) +SELECT +@parentId, +'批量删除', null, 'novel:websiteInfo:batchRemove', '2', null, '6'; diff --git a/novel-admin/src/main/resources/templates/novel/websiteInfo/detail.html b/novel-admin/src/main/resources/templates/novel/websiteInfo/detail.html new file mode 100644 index 0000000..10e509e --- /dev/null +++ b/novel-admin/src/main/resources/templates/novel/websiteInfo/detail.html @@ -0,0 +1,93 @@ + + + + + +

+
+
+
+
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ + + + diff --git a/novel-common/src/main/java/com/java2nb/novel/entity/WebsiteInfo.java b/novel-common/src/main/java/com/java2nb/novel/entity/WebsiteInfo.java new file mode 100644 index 0000000..13de380 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/entity/WebsiteInfo.java @@ -0,0 +1,162 @@ +package com.java2nb.novel.entity; + +import java.util.Date; +import javax.annotation.Generated; + +public class WebsiteInfo { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String name; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String domain; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String keyword; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String description; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String qq; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String logo; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private String logoDark; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Date updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + private Long updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getId() { + return id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setId(Long id) { + this.id = id; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getName() { + return name; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getDomain() { + return domain; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setDomain(String domain) { + this.domain = domain == null ? null : domain.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getKeyword() { + return keyword; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setKeyword(String keyword) { + this.keyword = keyword == null ? null : keyword.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getDescription() { + return description; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setDescription(String description) { + this.description = description == null ? null : description.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getQq() { + return qq; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setQq(String qq) { + this.qq = qq == null ? null : qq.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getLogo() { + return logo; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLogo(String logo) { + this.logo = logo == null ? null : logo.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public String getLogoDark() { + return logoDark; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setLogoDark(String logoDark) { + this.logoDark = logoDark == null ? null : logoDark.trim(); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getCreateTime() { + return createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getCreateUserId() { + return createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setCreateUserId(Long createUserId) { + this.createUserId = createUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Date getUpdateTime() { + return updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public Long getUpdateUserId() { + return updateUserId; + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public void setUpdateUserId(Long updateUserId) { + this.updateUserId = updateUserId; + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoDynamicSqlSupport.java b/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoDynamicSqlSupport.java new file mode 100644 index 0000000..01e6b86 --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoDynamicSqlSupport.java @@ -0,0 +1,79 @@ +package com.java2nb.novel.mapper; + +import java.sql.JDBCType; +import java.util.Date; +import javax.annotation.Generated; +import org.mybatis.dynamic.sql.SqlColumn; +import org.mybatis.dynamic.sql.SqlTable; + +public final class WebsiteInfoDynamicSqlSupport { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final WebsiteInfo websiteInfo = new WebsiteInfo(); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn id = websiteInfo.id; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn name = websiteInfo.name; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn domain = websiteInfo.domain; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn keyword = websiteInfo.keyword; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn description = websiteInfo.description; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn qq = websiteInfo.qq; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn logo = websiteInfo.logo; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn logoDark = websiteInfo.logoDark; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createTime = websiteInfo.createTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn createUserId = websiteInfo.createUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateTime = websiteInfo.updateTime; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final SqlColumn updateUserId = websiteInfo.updateUserId; + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + public static final class WebsiteInfo extends SqlTable { + public final SqlColumn id = column("id", JDBCType.BIGINT); + + public final SqlColumn name = column("name", JDBCType.VARCHAR); + + public final SqlColumn domain = column("domain", JDBCType.VARCHAR); + + public final SqlColumn keyword = column("keyword", JDBCType.VARCHAR); + + public final SqlColumn description = column("description", JDBCType.VARCHAR); + + public final SqlColumn qq = column("qq", JDBCType.VARCHAR); + + public final SqlColumn logo = column("logo", JDBCType.VARCHAR); + + public final SqlColumn logoDark = column("logo_dark", JDBCType.VARCHAR); + + public final SqlColumn createTime = column("create_time", JDBCType.TIMESTAMP); + + public final SqlColumn createUserId = column("create_user_id", JDBCType.BIGINT); + + public final SqlColumn updateTime = column("update_time", JDBCType.TIMESTAMP); + + public final SqlColumn updateUserId = column("update_user_id", JDBCType.BIGINT); + + public WebsiteInfo() { + super("website_info"); + } + } +} \ No newline at end of file diff --git a/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoMapper.java b/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoMapper.java new file mode 100644 index 0000000..81db4af --- /dev/null +++ b/novel-common/src/main/java/com/java2nb/novel/mapper/WebsiteInfoMapper.java @@ -0,0 +1,248 @@ +package com.java2nb.novel.mapper; + +import static com.java2nb.novel.mapper.WebsiteInfoDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.*; + +import com.java2nb.novel.entity.WebsiteInfo; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import javax.annotation.Generated; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.InsertProvider; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Result; +import org.apache.ibatis.annotations.ResultMap; +import org.apache.ibatis.annotations.Results; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.type.JdbcType; +import org.mybatis.dynamic.sql.BasicColumn; +import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider; +import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider; +import org.mybatis.dynamic.sql.select.CountDSLCompleter; +import org.mybatis.dynamic.sql.select.SelectDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.mybatis.dynamic.sql.update.UpdateDSL; +import org.mybatis.dynamic.sql.update.UpdateDSLCompleter; +import org.mybatis.dynamic.sql.update.UpdateModel; +import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider; +import org.mybatis.dynamic.sql.util.SqlProviderAdapter; +import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils; + +@Mapper +public interface WebsiteInfoMapper { + @Generated("org.mybatis.generator.api.MyBatisGenerator") + BasicColumn[] selectList = BasicColumn.columnList(id, name, domain, keyword, description, qq, logo, logoDark, createTime, createUserId, updateTime, updateUserId); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + long count(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @DeleteProvider(type=SqlProviderAdapter.class, method="delete") + int delete(DeleteStatementProvider deleteStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insert") + int insert(InsertStatementProvider insertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @InsertProvider(type=SqlProviderAdapter.class, method="insertMultiple") + int insertMultiple(MultiRowInsertStatementProvider multipleInsertStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @ResultMap("WebsiteInfoResult") + Optional selectOne(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @SelectProvider(type=SqlProviderAdapter.class, method="select") + @Results(id="WebsiteInfoResult", value = { + @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR), + @Result(column="domain", property="domain", jdbcType=JdbcType.VARCHAR), + @Result(column="keyword", property="keyword", jdbcType=JdbcType.VARCHAR), + @Result(column="description", property="description", jdbcType=JdbcType.VARCHAR), + @Result(column="qq", property="qq", jdbcType=JdbcType.VARCHAR), + @Result(column="logo", property="logo", jdbcType=JdbcType.VARCHAR), + @Result(column="logo_dark", property="logoDark", jdbcType=JdbcType.VARCHAR), + @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="create_user_id", property="createUserId", jdbcType=JdbcType.BIGINT), + @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), + @Result(column="update_user_id", property="updateUserId", jdbcType=JdbcType.BIGINT) + }) + List selectMany(SelectStatementProvider selectStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + @UpdateProvider(type=SqlProviderAdapter.class, method="update") + int update(UpdateStatementProvider updateStatement); + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default long count(CountDSLCompleter completer) { + return MyBatis3Utils.countFrom(this::count, websiteInfo, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int delete(DeleteDSLCompleter completer) { + return MyBatis3Utils.deleteFrom(this::delete, websiteInfo, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int deleteByPrimaryKey(Long id_) { + return delete(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insert(WebsiteInfo record) { + return MyBatis3Utils.insert(this::insert, record, websiteInfo, c -> + c.map(id).toProperty("id") + .map(name).toProperty("name") + .map(domain).toProperty("domain") + .map(keyword).toProperty("keyword") + .map(description).toProperty("description") + .map(qq).toProperty("qq") + .map(logo).toProperty("logo") + .map(logoDark).toProperty("logoDark") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .map(updateTime).toProperty("updateTime") + .map(updateUserId).toProperty("updateUserId") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertMultiple(Collection records) { + return MyBatis3Utils.insertMultiple(this::insertMultiple, records, websiteInfo, c -> + c.map(id).toProperty("id") + .map(name).toProperty("name") + .map(domain).toProperty("domain") + .map(keyword).toProperty("keyword") + .map(description).toProperty("description") + .map(qq).toProperty("qq") + .map(logo).toProperty("logo") + .map(logoDark).toProperty("logoDark") + .map(createTime).toProperty("createTime") + .map(createUserId).toProperty("createUserId") + .map(updateTime).toProperty("updateTime") + .map(updateUserId).toProperty("updateUserId") + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int insertSelective(WebsiteInfo record) { + return MyBatis3Utils.insert(this::insert, record, websiteInfo, c -> + c.map(id).toPropertyWhenPresent("id", record::getId) + .map(name).toPropertyWhenPresent("name", record::getName) + .map(domain).toPropertyWhenPresent("domain", record::getDomain) + .map(keyword).toPropertyWhenPresent("keyword", record::getKeyword) + .map(description).toPropertyWhenPresent("description", record::getDescription) + .map(qq).toPropertyWhenPresent("qq", record::getQq) + .map(logo).toPropertyWhenPresent("logo", record::getLogo) + .map(logoDark).toPropertyWhenPresent("logoDark", record::getLogoDark) + .map(createTime).toPropertyWhenPresent("createTime", record::getCreateTime) + .map(createUserId).toPropertyWhenPresent("createUserId", record::getCreateUserId) + .map(updateTime).toPropertyWhenPresent("updateTime", record::getUpdateTime) + .map(updateUserId).toPropertyWhenPresent("updateUserId", record::getUpdateUserId) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectOne(SelectDSLCompleter completer) { + return MyBatis3Utils.selectOne(this::selectOne, selectList, websiteInfo, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List select(SelectDSLCompleter completer) { + return MyBatis3Utils.selectList(this::selectMany, selectList, websiteInfo, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default List selectDistinct(SelectDSLCompleter completer) { + return MyBatis3Utils.selectDistinct(this::selectMany, selectList, websiteInfo, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default Optional selectByPrimaryKey(Long id_) { + return selectOne(c -> + c.where(id, isEqualTo(id_)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int update(UpdateDSLCompleter completer) { + return MyBatis3Utils.update(this::update, websiteInfo, completer); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateAllColumns(WebsiteInfo record, UpdateDSL dsl) { + return dsl.set(id).equalTo(record::getId) + .set(name).equalTo(record::getName) + .set(domain).equalTo(record::getDomain) + .set(keyword).equalTo(record::getKeyword) + .set(description).equalTo(record::getDescription) + .set(qq).equalTo(record::getQq) + .set(logo).equalTo(record::getLogo) + .set(logoDark).equalTo(record::getLogoDark) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .set(updateUserId).equalTo(record::getUpdateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + static UpdateDSL updateSelectiveColumns(WebsiteInfo record, UpdateDSL dsl) { + return dsl.set(id).equalToWhenPresent(record::getId) + .set(name).equalToWhenPresent(record::getName) + .set(domain).equalToWhenPresent(record::getDomain) + .set(keyword).equalToWhenPresent(record::getKeyword) + .set(description).equalToWhenPresent(record::getDescription) + .set(qq).equalToWhenPresent(record::getQq) + .set(logo).equalToWhenPresent(record::getLogo) + .set(logoDark).equalToWhenPresent(record::getLogoDark) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKey(WebsiteInfo record) { + return update(c -> + c.set(name).equalTo(record::getName) + .set(domain).equalTo(record::getDomain) + .set(keyword).equalTo(record::getKeyword) + .set(description).equalTo(record::getDescription) + .set(qq).equalTo(record::getQq) + .set(logo).equalTo(record::getLogo) + .set(logoDark).equalTo(record::getLogoDark) + .set(createTime).equalTo(record::getCreateTime) + .set(createUserId).equalTo(record::getCreateUserId) + .set(updateTime).equalTo(record::getUpdateTime) + .set(updateUserId).equalTo(record::getUpdateUserId) + .where(id, isEqualTo(record::getId)) + ); + } + + @Generated("org.mybatis.generator.api.MyBatisGenerator") + default int updateByPrimaryKeySelective(WebsiteInfo record) { + return update(c -> + c.set(name).equalToWhenPresent(record::getName) + .set(domain).equalToWhenPresent(record::getDomain) + .set(keyword).equalToWhenPresent(record::getKeyword) + .set(description).equalToWhenPresent(record::getDescription) + .set(qq).equalToWhenPresent(record::getQq) + .set(logo).equalToWhenPresent(record::getLogo) + .set(logoDark).equalToWhenPresent(record::getLogoDark) + .set(createTime).equalToWhenPresent(record::getCreateTime) + .set(createUserId).equalToWhenPresent(record::getCreateUserId) + .set(updateTime).equalToWhenPresent(record::getUpdateTime) + .set(updateUserId).equalToWhenPresent(record::getUpdateUserId) + .where(id, isEqualTo(record::getId)) + ); + } +} \ No newline at end of file diff --git a/novel-common/src/main/resources/application-common-dev.yml b/novel-common/src/main/resources/application-common-dev.yml index bc9da55..4b8c9ce 100644 --- a/novel-common/src/main/resources/application-common-dev.yml +++ b/novel-common/src/main/resources/application-common-dev.yml @@ -23,7 +23,7 @@ spring: #连接超时时间(毫秒) timeout: 30000 datasource: - url: jdbc:mysql://127.0.0.1:3306/novel_biz?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai + url: jdbc:mysql://127.0.0.1:3306/novel_plus?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: test123456 driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/novel-common/src/main/resources/mybatis/generatorConfig.xml b/novel-common/src/main/resources/mybatis/generatorConfig.xml index 984a5aa..4ec360d 100644 --- a/novel-common/src/main/resources/mybatis/generatorConfig.xml +++ b/novel-common/src/main/resources/mybatis/generatorConfig.xml @@ -1,21 +1,22 @@ - + - + + userId="root"/> - + @@ -23,16 +24,16 @@ targetPackage="com.java2nb.novel.entity" targetProject="novel-common/src/main/java"> - + - + - + @@ -40,11 +41,11 @@ targetPackage="com.java2nb.novel.mapper" targetProject="novel-common/src/main/java" type="XMLMAPPER"> - + - +
diff --git a/novel-front/src/main/java/com/java2nb/novel/core/config/WebMvcConfig.java b/novel-front/src/main/java/com/java2nb/novel/core/config/WebMvcConfig.java deleted file mode 100644 index f9552e0..0000000 --- a/novel-front/src/main/java/com/java2nb/novel/core/config/WebMvcConfig.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.java2nb.novel.core.config; - -import com.java2nb.novel.core.converter.DateConverter; -import org.springframework.context.annotation.Configuration; -import org.springframework.format.FormatterRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - - -/** - * @author xiongxiaoyang - */ -@Configuration -public class WebMvcConfig extends WebMvcConfigurerAdapter { - @Override - public void addFormatters(FormatterRegistry registry) { - registry.addConverter(new DateConverter()); - } -} diff --git a/novel-front/src/main/java/com/java2nb/novel/core/listener/StarterListener.java b/novel-front/src/main/java/com/java2nb/novel/core/listener/StarterListener.java index 7ae5c58..41d5a5f 100644 --- a/novel-front/src/main/java/com/java2nb/novel/core/listener/StarterListener.java +++ b/novel-front/src/main/java/com/java2nb/novel/core/listener/StarterListener.java @@ -1,6 +1,8 @@ package com.java2nb.novel.core.listener; import com.java2nb.novel.core.config.WebsiteProperties; +import com.java2nb.novel.entity.WebsiteInfo; +import com.java2nb.novel.mapper.WebsiteInfoMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -10,6 +12,7 @@ import javax.servlet.annotation.WebListener; /** * 启动监听器 + * * @author xiongxiaoyang */ @WebListener @@ -17,12 +20,21 @@ import javax.servlet.annotation.WebListener; @RequiredArgsConstructor public class StarterListener implements ServletContextListener { - private final WebsiteProperties websiteConfig; + private final WebsiteProperties websiteProperties; + private final WebsiteInfoMapper websiteInfoMapper; @Override public void contextInitialized(ServletContextEvent sce) { - sce.getServletContext().setAttribute("website",websiteConfig); - + sce.getServletContext() + .setAttribute("website", websiteInfoMapper.selectByPrimaryKey(1L).orElse(new WebsiteInfo() {{ + setName(websiteProperties.getName()); + setDomain(websiteProperties.getDomain()); + setKeyword(websiteProperties.getKeyword()); + setDescription(websiteProperties.getDescription()); + setQq(websiteProperties.getQq()); + setLogo("/images/logo.png"); + setLogoDark("/images/logo_white.png"); + }})); } } diff --git a/novel-front/src/main/resources/application-dev.yml b/novel-front/src/main/resources/application-dev.yml index 83ae91e..d209c49 100644 --- a/novel-front/src/main/resources/application-dev.yml +++ b/novel-front/src/main/resources/application-dev.yml @@ -1,13 +1,13 @@ spring: profiles: - include: [common-dev] + include: [ common-dev ] pic: save: type: 1 #图片保存方式, 1不保存,使用爬取的网络图片 ,2保存在自己的存储介质 storage: local #存储介质,local:本地,OSS:阿里云对象存储,fastDfs:分布式文件系统 - path: /Users/xiongxiaoyang/java #图片保存路径 + path: /Users/xiongxiaoyang/java/ #图片保存路径 diff --git a/novel-front/src/main/resources/templates/book/book_content.html b/novel-front/src/main/resources/templates/book/book_content.html index 0af0618..ea960d8 100644 --- a/novel-front/src/main/resources/templates/book/book_content.html +++ b/novel-front/src/main/resources/templates/book/book_content.html @@ -1,12 +1,14 @@ - - + - - - - + + + + @@ -25,13 +27,13 @@ - @@ -42,6 +44,8 @@ + +
@@ -53,29 +57,35 @@
- 首页 > + 首页 > > @@ -85,10 +95,13 @@

-

+
类别: - 作者: + 作者:
@@ -98,7 +111,8 @@

@@ -107,8 +121,10 @@

此章为VIP章节,需要订阅后才能继续阅读

@@ -118,11 +134,13 @@
@@ -159,18 +180,31 @@
  • 阅读主题:
  • + href="javascript:void(0);" title="白色" onclick="javascript:BookDetail.SetBackUpColor(1);">
  • 正文字体: 雅黑 宋体 楷书
  • + href="javascript:void(0);" + onclick="javascript:BookDetail.SetReadFontFamily(0);">雅黑 + 宋体楷书 +
  • 字体大小: A- - 16A+
  • + onclick="javascript:BookDetail.SetReadFont(-2);">A- + 16A+ @@ -208,30 +242,32 @@ --> - @@ -42,6 +44,8 @@ + +
    @@ -53,29 +57,35 @@
    - 首页 > + 首页 > > @@ -85,10 +95,13 @@

    -

    +
    类别: - 作者: + 作者:
    @@ -98,7 +111,8 @@

    @@ -107,8 +121,10 @@

    此章为VIP章节,需要订阅后才能继续阅读

    @@ -118,11 +134,13 @@
    @@ -159,18 +180,31 @@
  • 阅读主题:
  • + href="javascript:void(0);" title="白色" onclick="javascript:BookDetail.SetBackUpColor(1);">
  • 正文字体: 雅黑 宋体 楷书
  • + href="javascript:void(0);" + onclick="javascript:BookDetail.SetReadFontFamily(0);">雅黑 + 宋体楷书 +
  • 字体大小: A- - 16A+
  • + onclick="javascript:BookDetail.SetReadFont(-2);">A- + 16A+ @@ -208,30 +242,32 @@ -->