springboot在线小说阅读网站的设计与实现

网站首页:

  1. 用户登录/注册:用户注册时进行用户名及笔名存在的限制
  2. 热门小说推荐:显示小说名及作者名,点击进入对应小说
  3. 小说类别:玄幻,武侠,言情,历史等,点击对用分类到分类下所有小说
  4. 最新小说:显示新更新的小说名称,点击进入对应小说
  5. 查询:根据小说名/笔名进行查询

登录注册:

  1. 注册:用户注册时进行用户名及笔名存在的限制,存在则不能注册成功显示已存在
  2. 登录:登录有用户名密码及图片验证的校验

用户:

  1. 网站首页
  2. 个人信息管理:邮箱,用户名,笔名
  3. 对小说进行评价
  4. 在线阅读小说(收费作品需要充值才能浏览):章节目录,添加到书架,下一章的点击按钮
  5. 购买VIP:每本付费小说下都能跳转到充值界面,未充值的用户浏览收费小说自动跳转到充值界面,充值后显示VIP剩余日期
  6. 我的全部作品:添加小说(小说名,小说封面,收费/免费,小说分类,小说简介),删除小说,章节管理(更新章节,删除章节),更改小说完结状态
  7. 我的书架:可以进行查看及删除
  8. 阅读记录:可以进行查看及删除

后台管理:

  1. 用户管理:有删除用户的权限
  2. 订单管理:所有购买VIP的订单的删除及查询
  3. 书评管理:书评敏感词审查及删除
  4. 分类管理:添加删除分类,所管理的分类在用户添加小说时给一个下拉框进行选择

 

 

 

 

package com.novel.controller;


import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.novel.entity.Order;
import com.novel.entity.User;
import com.novel.service.OrderService;
import com.novel.util.AlipayConfig;
import com.novel.util.DateUtil;
import com.novel.util.Msg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
/**
 * @Author: 
 * @Date: 2024/3/11 14:29
 * @Description: 订单管理
 */
@Controller
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private OrderService orderService;

    /**
     * 跳转到后台订单管理
     * @return
     */
    @RequestMapping("show")
    public String show(){

        return "orderManage";
    }

    /**
     * 订单列表
     * @param pn
     * @return
     */
    @RequestMapping("/showjson")
    @ResponseBody
    public Msg getAllGoods(@RequestParam(value = "page",defaultValue = "1") Integer pn, HttpServletResponse response, Model model) {
        //一页显示几个数据
        PageHelper.startPage(pn, 10);
        List<Order> orderList = orderService.selectOrderList();
        orderList.forEach(order -> {
            order.setCreatetime1(DateUtil.getStringDate(order.getCreatetime()));
            order.setStarttime1(DateUtil.getStringDate(order.getStarttime()));
            order.setEndtime1(DateUtil.getStringDate(order.getEndtime()));
        });
        //显示几个页号
        PageInfo page = new PageInfo(orderList,5);
        return Msg.success("查询成功!").add("pageInfo", page);
    }

    /**
     * 删除
     * @param id
     * @return
     */
    @RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE)
    @ResponseBody
    public Msg deleteUser(@PathVariable("id")Integer id) {
        orderService.deleteByPrimaryKey(id);
        return Msg.success("删除成功!");
    }

    /**
     * 跳转到充值页面
     */
    @RequestMapping("toPayPage")
    public String toPayPage(HttpSession session, Model model){
        User user = (User) session.getAttribute("user");
        if(user==null){
            return "login";
        }
        Order order = orderService.selectOneOrder(user.getUserid());
        if(order!=null){
            int i = new Date().compareTo(order.getEndtime());
            if(i<0 || DateUtil.getStringDate(new Date()).equals(DateUtil.getStringDate(order.getEndtime()))){
                model.addAttribute("endtime",DateUtil.getStringDate(order.getEndtime()));
            }else{
                model.addAttribute("endtime","已过期,上次到期日:"+DateUtil.getStringDate(order.getEndtime()));
            }
        }else{
            model.addAttribute("endtime","无充值记录");
        }
        return "pay";
    }

    /**
     * 用户充值支付
     */
    @RequestMapping("userPay")
    public void pay(Integer month,HttpServletResponse rep, Model model,HttpSession session){
        User user = (User) session.getAttribute("user");
        session.setAttribute("month",month);
        //接入支付宝沙箱支付
//获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
        //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(AlipayConfig.return_url);
        //alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
        try{
        //商户订单号,商户网站订单系统中唯一订单号,必填
        String out_trade_no = UUID.randomUUID().toString();
        //付款金额,必填
        int total = month*10;
        String total_amount =String.valueOf(total);
        //订单名称,必填
        String subject   ="用户"+user.getUsername()+"订单";
        //商品描述,可空
        String body = "";

        alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
                + "\"total_amount\":\""+ total_amount +"\","
                + "\"subject\":\""+ subject +"\","
                + "\"body\":\""+ body +"\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        //请求
        String result = alipayClient.pageExecute(alipayRequest).getBody();

        rep.setContentType("text/html;charset=" + AlipayConfig.charset);
        //直接将完整的表单html输出到页面
        rep.getWriter().write(result);
        rep.getWriter().flush();
        rep.getWriter().close();
        }catch (Exception e){
           e.printStackTrace();
        }
     }

    /**
     * 支付成功以后回调
     * @return
     */
    @RequestMapping("payreturn")
     public String payreturn(HttpSession session,Model model){
        User user = (User) session.getAttribute("user");
        int month = (int) session.getAttribute("month");
        Order order = orderService.selectOneOrder(user.getUserid());
        int num=0;
        if(order!=null){
            int i = new Date().compareTo(order.getEndtime());
            if(i<0 || DateUtil.getStringDate(new Date()).equals(DateUtil.getStringDate(order.getEndtime()))){
                //更新
                order.setEndtime(DateUtil.subMonth(order.getEndtime(),month));
                order.setMonth(order.getMonth()+month);
                order.setTotalmoney(order.getTotalmoney()+(month*10));
                orderService.updateByPrimaryKey(order);
            }else{
                num++;
            }
        }else{
            num++;
        }

        if(num>0){
            order = new Order();
            order.setUserid(user.getUserid());
            order.setUsername(user.getUsername());
            order.setCreatetime(new Date());
            order.setStarttime(new Date());
            order.setEndtime(DateUtil.subMonth(new Date(),month));
            order.setMonth(month);
            order.setTotalmoney(month*10);
            orderService.insert(order);
        }
        session.setAttribute("uservip",1);
        return "redirect:/order/toPayPage";
     }

}

 

package com.novel.controller;

import com.novel.entity.Category;
import com.novel.entity.Novel;
import com.novel.entity.NovelDetails;
import com.novel.entity.User;
import com.novel.service.CategoryService;
import com.novel.service.NovelDetailsService;
import com.novel.service.NovelService;
import com.novel.util.DateUtil;
import com.novel.util.Msg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.UUID;

@Controller
@RequestMapping("usernovel")
public class NovelController {
    @Autowired
    private NovelService novelService;
    @Autowired
    private NovelDetailsService novelDetailsService;
    @Autowired
    private CategoryService categoryService;


    @RequestMapping("queryNovel")
    public String queryNovel(Model model,Novel record){
        if(record==null){
            model.addAttribute("novelList",null);
        }else{
            List<Novel> novelList =  novelService.selectAllNovel(record);
            model.addAttribute("novelList",novelList);
        }

        return "serch";
    }

    @RequestMapping("addNovel")
    public String insert( Novel novel, @RequestParam MultipartFile fileToUpload, HttpServletRequest request, HttpServletResponse response, HttpSession session){
        User user = (User) session.getAttribute("user");
        novel.setUserid(user.getUserid());
        novel.setPenname(user.getPenname());
        novel.setCreatetime(DateUtil.getStringDate(new Date()));
        novel.setUpdatetime(DateUtil.getStringDate());
        novel.setEndfinsh(0);

        //上传图片
        String name = UUID.randomUUID().toString();
        String newFileName = name + ".jpg";
        File newFile = new File(request.getServletContext().getRealPath("/image"), newFileName);
        newFile.getParentFile().mkdirs();
        try {
            fileToUpload.transferTo(newFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        novel.setImgpath("image/"+newFileName);
        Category category = categoryService.selectByPrimaryKey(novel.getCategoryId());
        novel.setCategoryName(category.getCategoryname());
        novelService.insert(novel);
        return "redirect:/usernovel/novelList";
    }

    /**
     * 我的所有小说
     * @param session
     * @param model
     * @return
     */
    @RequestMapping("novelList")
    public String novelList( HttpSession session,Model model){
        User user = (User) session.getAttribute("user");
        Novel novel123 = new Novel();
        novel123.setUserid(user.getUserid());
        List<Novel> novelList =  novelService.selectAllNovel(novel123);
        model.addAttribute("novelList",novelList);
        List<Category> categoryList = categoryService.selectByCategory();
        model.addAttribute("categoryList",categoryList);
        return "user_novel";
    }

    /**
     * 删除小说
     * @param novel
     * @return
     */
    @RequestMapping("/deleteNovel")
    @ResponseBody
    public Msg deleteAddr(Novel novel) {
        novelService.deleteByPrimaryKey(novel.getNovelid());
        return Msg.success("删除成功");
    }

    /**
     * 修改小说
     * @return
     */
    @RequestMapping("editNovel")
    public String editNovel(Novel novel,HttpSession session,Model model){
        novelService.updateByPrimaryKeySelective(novel);
        return "redirect:/usernovel/novelList";
    }

    /**
     * 完结小说
     * @return
     */
    @RequestMapping("endNovel")
    public String endNovel(Novel novel){
        novel.setEndfinsh(1);
        novelService.updateByPrimaryKeySelective(novel);
        return "redirect:/usernovel/novelList";
    }

    /**
     * 查询某个小说下所有章节
     */

    @RequestMapping("queryNovelByNovelId")
    public String queryNovelByNovelId(Integer novelId,Model model){
        Novel novel = novelService.selectByPrimaryKey(novelId);
        List<NovelDetails> novelDetailsList = novelDetailsService.selectAllNovelIdASC(novelId);
        model.addAttribute("novelDetailsList",novelDetailsList);
        model.addAttribute("novel",novel);
        return "user_novel_detail";
    }

    /**
     * 跳转到添加章节页面
     * @return
     */
     @RequestMapping("toAddUserNovelDetail")
    public String toAddUserNovelDetail(Model model,Integer novelId){
         Novel novel = novelService.selectByPrimaryKey(novelId);
         model.addAttribute("novel",novel);
         return "user_addnoveldetail";
    }

    /**
     * 添加小说章节
     * @param novelDetails
     * @return
     */
    @RequestMapping("addNovelDetail")
    public String addNovelDetail(NovelDetails novelDetails){
         String dateTime = DateUtil.getStringDate();
         novelDetails.setCreatetime(dateTime);
         novelDetailsService.insert(novelDetails);
        Novel novel = novelService.selectByPrimaryKey(novelDetails.getNovelid());
        novel.setUpdatetime(dateTime);
        novelService.updateByPrimaryKey(novel);
        return "redirect:/usernovel/queryNovelByNovelId?novelId="+novelDetails.getNovelid();
    }

    /**
     * 删除小说章节
     * @return
     */
    @RequestMapping("deleteNovekDetail")
    public String deleteNovekDetail(Integer detailsid,Integer novelId){
        NovelDetails novelDetails =  novelDetailsService.selectByPrimaryKey(detailsid);
        novelDetailsService.deleteByPrimaryKey(detailsid);
        return "redirect:/usernovel/queryNovelByNovelId?novelId="+novelDetails.getNovelid();
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿毕业分享网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值