——————————DescriptionStart——————————
运行环境 Java≥8、MySQL≥5.7
开发工具 eclipse/idea/myeclipse/sts等均可配置运行
适用 课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SpringBoot生鲜水果商城(java+springboot+html+thymeleaf+bootstrap+mysql)
项目介绍
后台功能:
后台商品信息的添加 2. 后台商品信息的维护 要求:商品图片的修改。先显示现有的图片,当鼠标移动到图片上时,图片右上角显示一把X,即允许删除当前图片,然后提供添加新图片的按钮。类似于QQ空间相册中图片的修改一样。 上传的所有商品图片必须在右下角自动加上水印,即前台显示时,显示已经加好水印的图片。 3. 后台统计报表 要求:使用Echarts显示统计日营业额、月营业额、季度营业额以及年度营业额 以及 根据商品统计月营业额
前台功能:
首页商品显示 要求:显示每种类型的最新四种商品信息(一次性查出,即只能发送一次请求和一条sql语句) 2. 点击首页 查看更多后,根据类型跳到goods.html页面分页显示当前类型的商品信息,排序规则:先根据销售数量降序,再根据商品编号降序 3. 点击加入购物车按钮时 要求: 先判断有没有登录,如果没有登录先提醒用户”请先登录…”,然后跳到登录界面,登录成功后再跳回到原来界面 如果已经登录,加入购物车前,先判断该商品购物车中是否已经存在,如果存在则直接加数量,如果不存在则添加次商品信息到购物车 当前页面 “我的购物车” 商品信息的数量相应的改变 4. 当点击头部或其它地方的 “我的购物车” 时,跳到购物车页面 要求:需要做登录校验 完善全选全不选效果 完善增或减商品的数量,合计、商品数量总计等信息需要联动 5. 在我的购物车页面勾选需要结账的商品后,点击去结账 要求:如果没有勾选任何商品,则给出提示信息 点击编辑收货地址,弹出收货地址编辑框,让用户选择当前订单的收货地址,省市区采用js解析xml三级级联实现 完善收货地址编辑列表,添加设为默认收货地址按钮和当前为默认收货地址的标签,效果可参考京东、淘宝的收货地址效果 修改默认收货地址时,只允许发送一条sql语句 6. 点击提交订单时(需要做登录校验) 要求:删除当前用户购物车中,已下单的商品信息 修改用户已经购买的商品的相应的库存量 在订单表中添加一条订单记录 在订单详细表中添加购买商品的详细信息 要求以上操作必须添加事务管理,所有操作要么同时成功要么都回滚,并且对每个表的操作只能发送一条sql一句,即总共下单功能只能发送4条sql语句 7. 在首页或商品信息页面,当用户点击某个商品时,跳到 details.html 显示该商品的详细信息 扩展功能: 1. 添加前台会员信息的修改,允许前台会员拍照上传或选择图片上传的方式修改个人的图像
购物车数据使用redis缓存
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 4.数据库:MySql 5.7版本;
技术栈
后端:SpringBoot
前端:HTML+Thymeleaf+jQuery+easyUI+bootstrap
使用说明 运行项目,前台地址:http://localhost:8080 用户名 wang11 密码123456 后台地址: http://localhost:8080/toAdminLogin 用户名 supperman 密码 123456
——————————CodeStart——————————
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 return "redirect:toAdminLogin" ; } } package com.softeem.fresh.controller;@Controller public class GoodsCarController { @Resource(name = "goodsCarService") GoodsCarService goodsCarService; @Resource(name = "userService") UserService userService; @Resource(name = "orderService") OrderService orderService; @RequestMapping("/addGoodsCar") @ResponseBody public Map<String, Object> addGoodsCar (String goodsid, String shuliang, HttpServletRequest request) { Map<String, Object> map = new HashMap<String, Object>(); HttpSession session = request.getSession(); String username = (String) session.getAttribute("username" ); User u = userService.findUserByUsername(username); String userid = u.getId(); List<Goodscar> goodscars = goodsCarService.findGoodscarByUserId(userid); for (Goodscar gs : goodscars) { if (gs.getGoodsid().equals(goodsid)){ double count = Double.parseDouble(shuliang);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 */ @RequestMapping("/goodsDown") @ResponseBody public Map<String, Object> goodsDown (String id) { Map<String, Object> map = new HashMap<String, Object>(); int result = goodsService.goodsDown(id); if (result == 1 ) { map.put("status" , 0 ); map.put("message" , "下架成功" ); } else { map.put("status" , 1 ); map.put("message" , "下架失败" ); } return map; } @RequestMapping("/goodsDelete") @ResponseBody public Map<String, Object> goodsDelete (String id) { Map<String, Object> map = new HashMap<String, Object>(); int result = goodsService.goodsDelete(id); if (result == 1 ) { map.put("status" , 0 ); map.put("message" , "删除成功" ); } else { map.put("status" , 1 ); map.put("message" , "删除失败" ); } return map; } @RequestMapping("/deleteAll") @ResponseBody public Map<String, Object> deleteAll (String ids) { Map<String, Object> map = new HashMap<String, Object>(); String[] id_s = ids.split("," ); int result = goodsService.deleteAll(id_s); if (result >= 1 ) { map.put("status" , 0 ); map.put("message" , "删除成功" ); } else {
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 model.addAttribute("groupid" , groupid); model.addAttribute("goodsPart" , goodsPart); model.addAttribute("goodslist" , goodslist); return "readmoreShop" ; } @RequestMapping("/readMoreSecond") public String readMoreSecond (String groupid, Model model) { if (gdsList!=null ){ List<Goods> goodsPart = new ArrayList<Goods>(); if (gdsList.size()>=2 ){ goodsPart.add(gdsList.get(gdsList.size() - 2 )); goodsPart.add(gdsList.get(gdsList.size() - 1 )); }else if ((gdsList.size()==1 )){ goodsPart.add(gdsList.get(gdsList.size() - 1 )); } model.addAttribute("groupid" , groupid); model.addAttribute("goodsPart" , goodsPart); model.addAttribute("goodslist" , gdsList); return "readmoreShop" ; } return null ; } @RequestMapping("/shopMessage") public String shopMessage (String id, Model model, HttpServletRequest request) { HttpSession session = request.getSession(); Goods goods = goodsService.shopMessage(id); if (goods == null ) { return "redirect:toIndex" ; } else { if (goodsBrowse.size() >= 1 ) { for (int i = 0 ; i < goodsBrowse.size(); i++) { if (goods.getName().equals(goodsBrowse.get(i).getName())) { goodsBrowse.remove(i); } } } goodsBrowse.add(goods); if (goodsBrowse.size() > 4 ) { goodsBrowse.remove(0 ); } session.setAttribute("goodsBrowse" , goodsBrowse); String groupid = goods.getGroupid(); List<Goods> goodslist = goodsService.readMore(groupid); List<Goods> goodsNews = new ArrayList<Goods>();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 if (count <= 0 ) { resultMap.put("status" , 1 ); resultMap.put("message" , "没有数据" ); resultMap.put("result" , null ); } else { int totalCount = count; double tc = totalCount; int totalPage = (int ) Math.ceil(tc / pageSize); pageBean.setCurrentage(currentPage); pageBean.setPageSize(pageSize); pageBean.setTotalCount(totalCount); pageBean.setTotalPage(totalPage); pageBean.setLists(lists); resultMap.put("status" , 0 ); resultMap.put("message" , "有数据" ); resultMap.put("result" , pageBean); } } return resultMap; } @RequestMapping("/addGoodsType") @ResponseBody public Map<String, Object> addGoodsType (String name) { Map<String, Object> map = new HashMap<String, Object>(); int dr = 0 ; String id = name; Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("id" ,id); map1.put("name" ,name); map1.put("dr" ,dr); int result = goodstypeService.addGoodsType(map1); if (result == 1 ) { map.put("status" , 0 ); map.put("message" , "添加成功" ); } else { map.put("status" , 1 ); map.put("message" , "添加失败" ); } return map; } @RequestMapping("/selectGoodsType") @ResponseBody public Map<String, Object> selectGoodsType () {
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 String code = "0123456789ABCDEFGabcdefg" ; int size = code.length(); Random r = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 1 ; i <= 4 ; i++) { int index = r.nextInt(size); char c = code.charAt(index); sb.append(c); } return sb.toString(); } } package com.softeem.fresh.controller;@Controller public class GoodstypeController { @Resource(name = "goodstypeService") GoodstypeService goodstypeService; @RequestMapping("/addGoodsTypeList") @ResponseBody public Map<String, Object> addGoodsTypeList (int currentPage, String search) { Map<String, Object> resultMap = new HashMap<String, Object>(); PageBean<Goodstype> pageBean = new PageBean<Goodstype>(); int pageSize = 5 ; int start = (currentPage - 1 ) * pageSize; int size = pageSize; if (search == "" || search == null ) { Map<String, Object> map = new HashMap<String, Object>(); map.put("start" ,start); map.put("size" ,size); List<Goodstype> lists = goodstypeService.findByPageType(map); int count = goodstypeService.selectCountType(); if (count <= 0 ) {
——————————PayStart——————————
项目链接: https://javayms.github.io?id=171422292105200er https://javayms.pages.dev?id=171422292105200er