Java毕业设计项目实战篇|Java项目:生鲜水果商城(java+SpringBoot+HTML+Thymeleaf+easyUI+bootstrap+mysql)

源码获取:博客首页 "资源" 里下载!
项目介绍
后台功能:
1. 后台商品信息的添加
2. 后台商品信息的维护
要求:商品图片的修改。先显示现有的图片,当鼠标移动到图片上时,图片右上角显示一把X,即允许删除当前图片,然后提供添加新图片的按钮。类似于QQ空间相册中图片的修改一样。
上传的所有商品图片必须在右下角自动加上水印,即前台显示时,显示已经加好水印的图片。
3. 后台统计报表
要求:使用Echarts显示统计日营业额、月营业额、季度营业额以及年度营业额 以及 根据商品统计月营业额
前台功能:
1. 首页商品显示
要求:显示每种类型的最新四种商品信息(一次性查出,即只能发送一次请求和一条sql语句)
2. 点击首页 查看更多后,根据类型跳到goods.html页面分页显示当前类型的商品信息,排序规则:先根据销售数量降序,再根据商品编号降序
3. 点击加入购物车按钮时
要求: 先判断有没有登录,如果没有登录先提醒用户"请先登录...",然后跳到登录界面,登录成功后再跳回到原来界面
如果已经登录,加入购物车前,先判断该商品购物车中是否已经存在,如果存在则直接加数量,如果不存在则添加次商品信息到购物车
当前页面 "我的购物车" 商品信息的数量相应的改变
4. 当点击头部或其它地方的 "我的购物车" 时,跳到购物车页面
要求:需要做登录校验
完善全选全不选效果
完善增或减商品的数量,合计、商品数量总计等信息需要联动
5. 在我的购物车页面勾选需要结账的商品后,点击去结账
要求:如果没有勾选任何商品,则给出提示信息
点击编辑收货地址,弹出收货地址编辑框,让用户选择当前订单的收货地址,省市区采用js解析xml三级级联实现
完善收货地址编辑列表,添加设为默认收货地址按钮和当前为默认收货地址的标签,效果可参考京东、淘宝的收货地址效果
修改默认收货地址时,只允许发送一条sql语句
6. 点击提交订单时(需要做登录校验)
要求:删除当前用户购物车中,已下单的商品信息
修改用户已经购买的商品的相应的库存量
在订单表中添加一条订单记录
在订单详细表中添加购买商品的详细信息
要求以上操作必须添加事务管理,所有操作要么同时成功要么都回滚,并且对每个表的操作只能发送一条sql一句,即总共下单功能只能发送4条sql语句
7. 在首页或商品信息页面,当用户点击某个商品时,跳到 details.html 显示该商品的详细信息

扩展功能:
1. 添加前台会员信息的修改,允许前台会员拍照上传或选择图片上传的方式修改个人的图像
2. 购物车数据使用redis缓存
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目
6.数据库:MySql 5.7版本;
技术栈
1. 后端:SpringBoot
2. 前端:HTML+Thymeleaf+jQuery+easyUI+bootstrap
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean; maven install命令,配置tomcat,然后运行;
3. 将项目中application.yml配置文件中的数据库配置改为自己的配置;
4.运行项目,前台地址:http://localhost:8080
用户名 wang11 密码123456

后台地址: http://localhost:8080/toAdminLogin
用户名 supperman 密码123456
Java毕业设计项目实战篇|Java项目:生鲜水果商城(java+SpringBoot+HTML+Thymeleaf+easyUI+bootstrap+mysql)
文章图片


Java毕业设计项目实战篇|Java项目:生鲜水果商城(java+SpringBoot+HTML+Thymeleaf+easyUI+bootstrap+mysql)
文章图片

Java毕业设计项目实战篇|Java项目:生鲜水果商城(java+SpringBoot+HTML+Thymeleaf+easyUI+bootstrap+mysql)
文章图片

Java毕业设计项目实战篇|Java项目:生鲜水果商城(java+SpringBoot+HTML+Thymeleaf+easyUI+bootstrap+mysql)
文章图片

【Java毕业设计项目实战篇|Java项目:生鲜水果商城(java+SpringBoot+HTML+Thymeleaf+easyUI+bootstrap+mysql)】 Java毕业设计项目实战篇|Java项目:生鲜水果商城(java+SpringBoot+HTML+Thymeleaf+easyUI+bootstrap+mysql)
文章图片

Java毕业设计项目实战篇|Java项目:生鲜水果商城(java+SpringBoot+HTML+Thymeleaf+easyUI+bootstrap+mysql)
文章图片


商品信息控制层:
@Controller @RequestMapping("/goodsInfo") public class GoodsInfoController{ @Autowired private IGoodsInfoBiz goodsInfoBiz; @RequestMapping("/findAll") @ResponseBody public List findAll() { return goodsInfoBiz.findAll(); } @RequestMapping("/find") @ResponseBody public GoodsInfo find(String str) { System.out.println(goodsInfoBiz.find(str)); return goodsInfoBiz.find(str); } @RequestMapping("/findByTno") @ResponseBody public List findByTno(String tno,String start) { return goodsInfoBiz.findByTno(tno,start); } @RequestMapping("/updateBal") @ResponseBody public Integer updateBal(String[] gnos,String[] nums) { return goodsInfoBiz.updateBal(gnos,nums); } @RequestMapping("/finds") @ResponseBody public List finds() { return goodsInfoBiz.finds(); } @RequestMapping("/upload") @ResponseBody public Map add(@RequestParam("upload")MultipartFile pic,HttpServletRequest request) { Map map = new HashMap(); if(pic.isEmpty()){ return map; } try{ String savePath = "images/goods"; String path = request.getServletContext().getRealPath(""); String temp = request.getServletContext().getInitParameter("uploadPath"); if(temp != null){ savePath = temp; }//在用户上传的文件名的前面加上时间戳 savePath += "/" + new Date().getTime() + "_" +pic.getOriginalFilename(); File dest = new File(new File(path).getParentFile(),savePath); //将本地图片保存到服务器 pic.transferTo(dest); map.put("fileName", pic.getOriginalFilename()); map.put("uploaded", 1); map.put("url","../../../"+savePath); }catch(IllegalStateException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } return map; } //管理员端的商品信息 @RequestMapping("/addGood") @ResponseBody public int addGood(@RequestParam Map map,@RequestParam MultipartFile pic, HttpServletRequest request){ int result =-1; if(pic.isEmpty()){ result=-2; //说明没有图片需要上传 } String savePath=""; try { String path= request.getServletContext().getRealPath(""); String temp = request.getServletContext().getInitParameter("uploadpath"); if(!StringUtil.checkNull(temp)){ savePath = temp; }savePath="images/goods/"+pic.getOriginalFilename(); File dest = new File(path, savePath); //将图片存到服务器的指定文件夹 pic.transferTo(dest); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } map.put("pics", savePath); result=goodsInfoBiz.addGood(map); return result; } @RequestMapping("/findgoods") @ResponseBody public List findgoods() { return goodsInfoBiz.findgoods(); } @RequestMapping("/del") @ResponseBody public int del(String gno) { return goodsInfoBiz.del(gno); } @RequestMapping("/getPage") @ResponseBody public Integer getPage(String tno) { int total=goodsInfoBiz.getTotal(tno); int page=total%10==0?total/10:total/10+1; return page; } }

订单信息控制层:
@Controller @RequestMapping("/orderInfo") public class OrderInfoController{ @Autowired private IOrderInfoBiz orderInfoBiz; @RequestMapping("/addOrderInfo") @ResponseBody public Integer addOrderInfo(String ono, String odate, String ano, String price) { Integer in = 0; try { in = orderInfoBiz.addOrderInfo(ono, odate,ano,price); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return in; } @RequestMapping("/getOrder") @ResponseBody public List getOrder(String mno) { return orderInfoBiz.getOrder(mno); } @RequestMapping("/getallOrder") @ResponseBody public List getallOrder(String mno) { return orderInfoBiz.getallOrder(mno); } @RequestMapping("/setStatus") @ResponseBody public Integer setStatus(String ono) { System.out.println("修改1"); return orderInfoBiz.setStatus(ono); } @RequestMapping("/getOrderByPage") @ResponseBody public List getOrderByPage(String mno, Integer page) { return orderInfoBiz.getOrderByPage(mno,page); } @RequestMapping("/getPage") @ResponseBody public Integer getPage(String mno) { int total=orderInfoBiz.getTotal(mno); int page=total%2==0?total/2:total/2+1; return page; } }

购物车信息控制层:
@Controller @RequestMapping("/cartInfo") public class CartInfoController{ @Autowired private ICartInfoBiz cartInfoBiz; @RequestMapping("/finds") @ResponseBody public List finds(String mno) { return cartInfoBiz.finds(mno); } @RequestMapping("/update") @ResponseBody public Integer update(String cno, Integer num) { return cartInfoBiz.update(cno, num); } @RequestMapping("/del") @ResponseBody public Integer del(String cno) { return cartInfoBiz.del(cno); } @RequestMapping("/add") @ResponseBody public Integer add(String mno, String gno, Integer num) { return cartInfoBiz.add(mno,gno,num); } @RequestMapping("/checkCar") @ResponseBody public Integer checkCar(String mno, String gno) { return cartInfoBiz.checkCar(mno,gno); } @RequestMapping("/dels") @ResponseBody public Integer dels(String[]gnos)throws IOException { return cartInfoBiz.dels(gnos); } }

用户管理控制层:
@Controller @RequestMapping("/admin") public class AdminInfoController{ @Autowired private IAdminInfoBiz adminInfoBiz; @RequestMapping("/checkLogin") @ResponseBody public Object checkLogin(HttpSession session) { Object obj = session.getAttribute("currentLoginUser"); if(obj == null){ return "{\"code\":\"101\"}"; } else { return obj; } } @RequestMapping("/login") @ResponseBody public int login(String aname, String pwd, HttpSession session) { AdminInfo af = adminInfoBiz.login(aname, pwd); int result = 0; if(af != null){ session.setAttribute("currentLoginUser", af); result = 1; } return result; } @RequestMapping("/success") public String loginSuccess(HttpSession session) { if(session.getAttribute("currentLoginUser") != null){ return "/WEB-INF/back/page/index.html"; } else { return "/bk/index.html"; //以/开头从项目目录开始算 } } @RequestMapping("/findAll") @ResponseBody public List findAll() { return adminInfoBiz.findAll(); } @RequestMapping("/add") @ResponseBody public int add(String aname, String pwd, String tel) { return adminInfoBiz.add(aname,pwd,tel); } @RequestMapping("/update") @ResponseBody public int update(String aid,String tel) { return adminInfoBiz.update(aid,tel); } @RequestMapping("/del") @ResponseBody public int del(String aid) { return adminInfoBiz.del(aid); } /*@RequestMapping("/upload") @ResponseBody public Map upload(MultipartFile pics, HttpServletRequest request, @RequestParam Map params) { if (pics.isEmpty()){ return Collections.emptyMap(); } String savePath = "../pics"; try{ String path = request.getServletContext().getRealPath(""); String temp = request.getServletContext().getInitParameter("uploadpath"); if(!StringUtil.checkNull(temp)){ savePath = temp; }savePath += "/" + new Date().getTime() + "_" + new Random().nextInt(10000) + "-" + pics.getOriginalFilename(); File dest = new File(path, savePath); //将图片存到服务器的指定文件 pics.transferTo(dest); } catch (IllegalStateException e){ e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } params.put("photo", savePath); if(adminInfoBiz.updatephoto(params) > 0){ Map map = new HashMap(); map.put("savepath", savePath); return map; } else { return Collections.emptyMap(); } }*/ }


源码获取:博客首页 "资源" 里下载!

    推荐阅读