作者主页:Java毕设网
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
一、项目介绍
本项目分为管理员与普通用户两种角色
后台管理员功能:
求购管理,收购管理,学生管理,评论管理,建议管理,新闻公告,网站设置,订单管理,图书管理。
1.求购管理实现了查看前台用户发布的求购信息和删除功能
2.收购管理实现了学生发布的二手书籍商品的查看和收购
3.学生管理实现了前台用户信息的查看和账号冻结功能
4.评论管理实现了对发布的图书的留言评论信息的查看和删除功能
5.建议管理实现了用户对发布的二手书籍的建议查看和删除
6.新闻公告实现了新闻公告的发布的增删改查,在前台首页显示
7.网站设置分为友情链接和站点设置
A、友情链接实现了前台下面的友情网站的增删改查,(比如发布一个网址)
B、站点设置实现了前台显示logo和网站名称的增删改查
8.订单管理实现了用户购买的订单信息的查看
9.图书管理实现了分类列表和图书列表
A、分类列表实现书籍分类的增删改查(二级分类)
B、图书列表实现了被收购的二手书籍在这里进行编辑,上架下架,是否进行推荐(上架后,用户可以进行购买)
前台用户功能:
注册登录,个人信息的管理,我发布的出售书籍,我发布的求购书籍管理,我建议的书籍,查看书籍订单,求购专区查看等等功能。
1.个人信息实现了个人信息的管理和密码修改
2.我发布的出售书籍实现了可以对出售的书籍进行增删改查(被官网收购后只能查看)
3.我发布的求购书籍实现了可以对求购书籍进行增删改查
4.我建议的书籍实现了对某个上架的书籍的建议查看
5.查看书籍订单实现了查看购买的书籍
6.求购专区实现了查看全部求购信息
7.前台书籍信息的查看,新闻公告的查看等等功能
二、环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
4.数据库:MySql 8.0/5.7版本;
5.是否Maven项目:是;
三、技术栈
freemarker+CSS+JavaScript+mysql+SpringBoot+springJpa
四、使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中application-dev.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,前台地址:在浏览器中输入http://localhost:8081/home/index/index 访问
后台地址:http://localhost:8081/system/login
五、运行截图
前台界面
后台界面
六、相关代码
商品管理控制器
/**
* 后台物品管理控制器
* @author Administrator
*
*/
@RequestMapping("/admin/goods")
@Controller
public class GoodsController {
@Autowired
private GoodsCategoryService goodsCategoryService;
@Autowired
private GoodsService goodsService;
@Autowired
private StudentService studentService;
/**
* 物品管理列表页面
* @param pageBean
* @param model
* @return
*/
@RequestMapping(value="/list")
public String list(Goods goods,PageBean<Goods> pageBean,Model model){
if(goods.getStudent() != null && goods.getStudent().getSn() != null){
Student student = studentService.findBySn(goods.getStudent().getSn());
if(student != null){
goods.setStudent(student);
}
}
if(goods.getGoodsCategory() != null && goods.getGoodsCategory().getName() != null){
List<GoodsCategory> goodsCategorys = goodsCategoryService.findByName(goods.getGoodsCategory().getName());
if(goodsCategorys != null && goodsCategorys.size() > 0){
goods.setGoodsCategory(goodsCategorys.get(0));
}
}
goods.setStatus(-1);
model.addAttribute("title", "物品列表");
model.addAttribute("name", goods.getName());
model.addAttribute("goodsCategoryName", goods.getGoodsCategory() == null ? null : goods.getGoodsCategory().getName());
model.addAttribute("sn", goods.getStudent() == null ? null : goods.getStudent().getSn());
model.addAttribute("pageBean", goodsService.findlist(pageBean, goods));
return "admin/goods/list";
}
/**
* 物品上架
* @param id,status
* @return
*/
@RequestMapping(value="/up_down",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> upDown(@RequestParam(name="id",required=true)Long id ,@RequestParam(name="status",required=true)Integer status){
Goods goods = goodsService.findById(id);
if(goods == null){
return Result.error(CodeMsg.ADMIN_GOODS_NO_EXIST);
}
if(goods.getStatus() == status){
return Result.error(CodeMsg.ADMIN_GOODS_STATUS_NO_CHANGE);
}
if(status != Goods.GOODS_STATUS_UP && status != Goods.GOODS_STATUS_DOWN){
return Result.error(CodeMsg.ADMIN_GOODS_STATUS_ERROR);
}
if(goods.getStatus() == Goods.GOODS_STATUS_SOLD){
return Result.error(CodeMsg.ADMIN_GOODS_STATUS_UNABLE);
}
goods.setStatus(status);
//进行更新数据库
if(goodsService.save(goods) ==null){
return Result.error(CodeMsg.ADMIN_GOODS_EDIT_ERROR);
}
return Result.success(true);
}
/**
* 物品推荐或取消推荐
* @param id
* @param recommend
* @return
*/
@RequestMapping(value="/recommend",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> recommend(@RequestParam(name="id",required=true)Long id ,@RequestParam(name="recommend",required=true)Integer recommend){
Goods goods = goodsService.findById(id);
if(goods == null){
return Result.error(CodeMsg.ADMIN_GOODS_NO_EXIST);
}
if(goods.getRecommend() == recommend){
return Result.error(CodeMsg.ADMIN_GOODS_STATUS_NO_CHANGE);
}
if(recommend != Goods.GOODS_RECOMMEND_OFF && recommend != Goods.GOODS_RECOMMEND_ON){
return Result.error(CodeMsg.ADMIN_GOODS_STATUS_ERROR);
}
if(goods.getStatus() == Goods.GOODS_STATUS_SOLD){
return Result.error(CodeMsg.ADMIN_GOODS_STATUS_UNABLE);
}
goods.setRecommend(recommend);;
//进行更新数据库
if(goodsService.save(goods) ==null){
return Result.error(CodeMsg.ADMIN_GOODS_EDIT_ERROR);
}
return Result.success(true);
}
/**
* 物品删除操作
* @param id
* @return
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
try {
goodsService.delete(id);
} catch (Exception e) {
return Result.error(CodeMsg.ADMIN_GOODS_DELETE_ERROR);
}
return Result.success(true);
}
}
新闻管理控制器
/**
* 后台新闻公告管理控制器
* @author Administrator
*
*/
@RequestMapping("/admin/news")
@Controller
public class NewsController {
@Autowired
private NewsService newsService;
@Autowired
private OperaterLogService operaterLogService;
/**
* 新闻公告列表页面
* @param model
* @param user
* @param pageBean
* @return
*/
@RequestMapping(value="/list")
public String list(Model model,News news,PageBean<News> pageBean){
model.addAttribute("title", "新闻公告列表");
model.addAttribute("newsTitle", news.getTitle());
model.addAttribute("pageBean", newsService.findList(pageBean,news));
return "admin/news/list";
}
/**
* 新增新闻公告页面
* @param model
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.GET)
public String add(Model model){
return "admin/news/add";
}
/**
* 新闻公告添加表单提交处理
* @param news
* @return
*/
@RequestMapping(value="/add",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> add(News news){
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(news);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
//到这说明一切符合条件,进行数据库新增
if(newsService.save(news) == null){
return Result.error(CodeMsg.ADMIN_NEWS_ADD_ERROR);
}
operaterLogService.add("添加新闻公告:" + news);
return Result.success(true);
}
/**
* 新闻公告编辑页面
* @param model
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.GET)
public String edit(Model model,@RequestParam(name="id",required=true)Long id){
model.addAttribute("news", newsService.find(id));
return "admin/news/edit";
}
/**
* 编辑新闻公告信息表单提交处理
* @param news
* @return
*/
@RequestMapping(value="/edit",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> edit(News news){
//用统一验证实体方法验证是否合法
CodeMsg validate = ValidateEntityUtil.validate(news);
if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
return Result.error(validate);
}
//到这说明一切符合条件,进行数据库保存
News findById = newsService.find(news.getId());
//讲提交的新闻公告信息指定字段复制到已存在的user对象中,该方法会覆盖新字段内容
BeanUtils.copyProperties(news, findById, "id","createTime","updateTime");
if(newsService.save(findById) == null){
return Result.error(CodeMsg.ADMIN_NEWS_EDIT_ERROR);
}
operaterLogService.add("编辑新闻公告:" + findById);
return Result.success(true);
}
/**
* 删除新闻公告
* @param id
* @return
*/
@RequestMapping(value="/delete",method=RequestMethod.POST)
@ResponseBody
public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
newsService.delete(id);
operaterLogService.add("删除新闻公告,新闻公告ID:" + id);
return Result.success(true);
}
}