N-133基于springboot,vue小说网站

开发工具:IDEA

服务器:Tomcat9.0, jdk1.8

项目构建:maven

数据库:mysql5.7

系统分前后台,项目采用前后端分离

前端技术:vue+elementUI

服务端技术:springboot+mybatis-plus

本项目分为管理员与普通用户两种角色

一、用户功能:

1.登录、注册、退出登录

2.首页、搜索、阅读小说,添加书签、添加收藏、取消收藏

3.我的书架:新建文件夹、下载全部、我要上传、搜素小说

4.我的上传:查看、编辑、删除、下载、发布小说

5.我的书签:查询、编辑、删除

6.阅读历史:查询、删除

7.个人信息:修改个人信息

8.个人动态:显示所有个人发布的动态信息

9.安全管理:修改邮箱和修改密码

二、管理员功能:

1.用户管理:查询、删除、详情、禁用

2.动态管理:查询、删除

3.小说管理:上传小说、查看详情、下载小说、编辑、删除

4.小说审核:通过、驳回、禁用

5.书签管理:查询、按进度查看,编辑、删除

6.收藏管理:查询、删除

7.管理员设置:修改密码,添加管理员

8.公告管理:发布公告、编辑、查询、删除

用户截图:

 

 

 

管理员截图:

 

 

package com.wpy.controller;


import com.wpy.annotation.SysLogs;
import com.wpy.dto.DownloadDto;
import com.wpy.dto.NovelDto;
import com.wpy.dto.NovelUploadDto;
import com.wpy.entity.Novel;
import com.wpy.entity.SysUser;
import com.wpy.enums.CodeMsgEnums;
import com.wpy.exception.RequestException;
import com.wpy.service.NovelService;
import com.wpy.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.List;

/**
 * <p>
 * 小说数据表 前端控制器
 * </p>
 */
@RestController
@RequestMapping("/novel")
@Slf4j
public class NovelController {

    @Autowired
    private NovelService novelService;

    @PostMapping("/upload")
    @SysLogs("小说上传")
    public ResponseResult uploadNovel(HttpServletRequest request,NovelUploadDto novelUploadDto){
        try{
            if(novelUploadDto.getNovelFiles().length==0){
                throw RequestException.fail("文件不能为空");
            }
            SysUser sysUser = ShiroUtils.getSysUser(request);
            novelService.uploadNovel(sysUser,novelUploadDto);
            return ResponseResult.success();
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return ResponseResult.error();
        }
    }

    @PostMapping("/updateNovel")
    @SysLogs("小说修改")
    public ResponseResult updateNovel(HttpServletRequest request,NovelUploadDto novelUploadDto){
        if(StringUtils.isEmpty(novelUploadDto.getId())){
            throw RequestException.fail(CodeMsgEnums.ID_IS_EMPTY.getMsg());
        }
        try{
            SysUser sysUser = ShiroUtils.getSysUser(request);
            novelService.updateNovel(sysUser,novelUploadDto);
            return ResponseResult.success();
        }catch (Exception e){
            log.error(e.getMessage(),e);
            return ResponseResult.error();
        }
    }

    @GetMapping("/list")
    @SysLogs("小说列表")
    public ResponseResult getNovelList(HttpServletRequest request,NovelDto novelDto){
        SysUser sysUser = RequestUtils.getSysUser(request);
        return ResponseResult.success(novelService.getNovelList(sysUser,novelDto));
    }

    @GetMapping("/novelInfo")
    @SysLogs("获取小说信息")
    public ResponseResult getNovelInfo(HttpServletRequest request,@RequestParam("id")String id,@RequestParam("isClick")Boolean isClick){
        if(StringUtils.isEmpty(id)){
            throw RequestException.fail(CodeMsgEnums.ID_IS_EMPTY.getMsg());
        }
        SysUser sysUser = RequestUtils.getSysUser(request);
        return ResponseResult.success(novelService.getNovelInfo(sysUser,id,isClick));
    }

    @DeleteMapping("/deleteNovel")
    @SysLogs("删除小说")
    public ResponseResult deleteNovel(@RequestParam("ids")List<String> ids){
        if(CollectionUtils.isEmpty(ids)){
            throw RequestException.fail(CodeMsgEnums.ID_IS_EMPTY.getMsg());
        }
        novelService.deleteNovel(ids);
        return ResponseResult.success();
    }

    @GetMapping("/download")
    @SysLogs("下载小说")
    public void downloadNovel(HttpServletRequest request, HttpServletResponse response, @RequestParam("params") String params){
        try {
            SysUser sysUser = ShiroUtils.getSysUser(request);
            String param = URLDecoder.decode(params, "UTF-8");
            DownloadDto downloadDto = JsonUtils.jsonStrToObject(param, DownloadDto.class);
            this.novelService.downloadNovel(request,response,downloadDto,sysUser);
        } catch (UnsupportedEncodingException e) {
            throw RequestException.fail("参数错误");
        }
    }

    @PostMapping("/public")
    @SysLogs("发布小说")
    public ResponseResult publicNovel(HttpServletRequest request,@RequestBody NovelDto novelDto){
        if(StringUtils.isEmpty(novelDto.getId())&&CollectionUtils.isEmpty(novelDto.getIds())){
            throw RequestException.fail(CodeMsgEnums.ID_IS_EMPTY.getMsg());
        }
        SysUser sysUser = ShiroUtils.getSysUser(request);
        this.novelService.publicNovel(sysUser,novelDto);
        return ResponseResult.success();
    }

    @PostMapping("/cancelPublic")
    @SysLogs("取消发布")
    public ResponseResult cancelPublic(HttpServletRequest request,@RequestBody NovelDto novelDto){
        if(StringUtils.isEmpty(novelDto.getId())&&CollectionUtils.isEmpty(novelDto.getIds())){
            throw RequestException.fail(CodeMsgEnums.ID_IS_EMPTY.getMsg());
        }
        SysUser sysUser = ShiroUtils.getSysUser(request);
        this.novelService.cancelPublic(sysUser,novelDto);
        return ResponseResult.success();
    }

    @PostMapping("/audit")
    @SysLogs("审核小说")
    public ResponseResult auditNovel(HttpServletRequest request,@RequestBody NovelDto novelDto){
        if(StringUtils.isEmpty(novelDto.getId())&&CollectionUtils.isEmpty(novelDto.getIds())){
            throw RequestException.fail(CodeMsgEnums.ID_IS_EMPTY.getMsg());
        }
        SysUser sysUser = ShiroUtils.getSysUser(request);
        this.novelService.auditNovel(sysUser,novelDto);
        return ResponseResult.success();
    }
}


http://www.niftyadmin.cn/n/5171779.html

相关文章

温故知新:探究Android UI 绘制刷新流程

一、说明&#xff1a; 基于之前的了解知道ui的绘制最终会走到Android的ViewRootImpl中scheduleTraversals进行发送接收vsync信号绘制&#xff0c;在ViewRootImpl中还会进行主线程检测&#xff0c;也就是我们所谓子线程更新ui会抛出异常。 像我们常用的刷新ui&#xff0c;inval…

每日一题(LeetCode)----数组--移除元素(五)

每日一题(LeetCode)----数组–移除元素&#xff08;五&#xff09; 1.题目&#xff08;[977. 有序数组的平方](https://leetcode.cn/problems/sqrtx/)&#xff09; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也…

C++抽象类和纯虚函数

C中的抽象类是指包含至少一个纯虚函数的类。纯虚函数是指没有实现&#xff0c;需要在派生类中重写的函数。 例如&#xff0c;下面是一个抽象类的例子&#xff1a; class Shape { public:virtual float getArea() 0; // 纯虚函数virtual float getPerimeter() 0; // 纯虚函数…

LeetCode:2300. 咒语和药水的成功对数(C++)

目录 2300. 咒语和药水的成功对数 题目描述&#xff1a; 实现代码与解析&#xff1a; 二分 原理思路&#xff1a; 2300. 咒语和药水的成功对数 题目描述&#xff1a; 给你两个正整数数组 spells 和 potions &#xff0c;长度分别为 n 和 m &#xff0c;其中 spells[i] 表…

Uniapp实现时间选择器

Uniapp是一款基于Vue.js开发的跨平台应用框架&#xff0c;可以快速构建多端的移动应用。要在Uniapp中实现时间选择器&#xff0c;可以借助uni-datetime-picker组件来完成。 步骤 以下是在Uniapp中实现时间选择器的步骤&#xff1a; 在需要使用时间选择器的页面中引入 uni-date…

好物周刊#30:Github 上大学

https://github.com/cunyu1943/JavaPark https://yuque.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. Fighting Design 一款灵活、优质的组件库&#xff0c;可在 vue3 应用程…

归并分治 计算数组的小和 + 图解 + 笔记

归并分治 前置知识&#xff1a;讲解021-归并排序 归并排序 图解 递归 非递归 笔记-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/134338789?spm1001.2014.3001.5501原理&#xff1a; (1&#xff09;思考一个问题在大范围上的答案&#xff0c;是否等于&…

Sprint Boot 学习路线 4

微服务 Spring Microservices是一个框架&#xff0c;它使用Spring框架更容易地构建和管理基于微服务的应用程序。微服务是一种架构风格&#xff0c;其中一个大型应用程序被构建为一组小型、独立可部署的服务。每个服务具有明确定义的职责&#xff0c;并通过API与其他服务通信。…