网站首页:
- 用户登录/注册:用户注册时进行用户名及笔名存在的限制
- 热门小说推荐:显示小说名及作者名,点击进入对应小说
- 小说类别:玄幻,武侠,言情,历史等,点击对用分类到分类下所有小说
- 最新小说:显示新更新的小说名称,点击进入对应小说
- 查询:根据小说名/笔名进行查询
登录注册:
- 注册:用户注册时进行用户名及笔名存在的限制,存在则不能注册成功显示已存在
- 登录:登录有用户名密码及图片验证的校验
用户:
- 网站首页
- 个人信息管理:邮箱,用户名,笔名
- 对小说进行评价
- 在线阅读小说(收费作品需要充值才能浏览):章节目录,添加到书架,下一章的点击按钮
- 购买VIP:每本付费小说下都能跳转到充值界面,未充值的用户浏览收费小说自动跳转到充值界面,充值后显示VIP剩余日期
- 我的全部作品:添加小说(小说名,小说封面,收费/免费,小说分类,小说简介),删除小说,章节管理(更新章节,删除章节),更改小说完结状态
- 我的书架:可以进行查看及删除
- 阅读记录:可以进行查看及删除
后台管理:
- 用户管理:有删除用户的权限
- 订单管理:所有购买VIP的订单的删除及查询
- 书评管理:书评敏感词审查及删除
- 分类管理:添加删除分类,所管理的分类在用户添加小说时给一个下拉框进行选择
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();
}
}