作者主页:夜未央5788

简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

项目介绍

后台功能:

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

运行截图

前台界面

后台界面

代码相关

商品管理控制器

@Controller
public class GoodsCarController {@Resource(name = "goodsCarService")GoodsCarService goodsCarService;@Resource(name = "userService")UserService userService;@Resource(name = "orderService")OrderService orderService;/*** 加入购物车*/@RequestMapping("/addGoodsCar")@ResponseBodypublic 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);count += gs.getCount();Map<String, Object> map1 = new HashMap<String, Object>();int reserved1 = (int) count;map1.put("count",count);map1.put("goodsid",goodsid);map1.put("reserved1",String.valueOf(reserved1));int result = goodsCarService.updateGoodsCarByCount(map1);if (result == 1){List<Goodscar> gds = goodsCarService.findGoodscarByUserId(userid);App.goodscarList = gds;session.setAttribute("goodscarList", App.goodscarList);session.setAttribute("count", App.goodscarList.size());map.put("status", 0);map.put("message", "加入购物车成功");}else {map.put("status", 1);map.put("message", "加入购物车失败");}return map;}}String id = App.getUid();int dr = 1;double count = Double.parseDouble(shuliang);Map<String, Object> map1 = new HashMap<String, Object>();map1.put("id",id);map1.put("goodsid",goodsid);map1.put("userid",userid);map1.put("dr",dr);map1.put("count",count);map1.put("reserved1",shuliang);int result = goodsCarService.addGoodsCar(map1);if (result == 1) {List<Goodscar> gods = goodsCarService.findGoodscarByUserId(userid);App.goodscarList = gods;session.setAttribute("goodscarList", App.goodscarList);session.setAttribute("count", App.goodscarList.size());map.put("status", 0);map.put("message", "加入购物车成功");} else {map.put("status", 1);map.put("message", "加入购物车失败");}return map;}/*** 购物车的商品单个逻辑删除*/@RequestMapping("/goodscarDelete")@ResponseBodypublic Map<String, Object> goodscarDelete(String id, HttpServletRequest request) {Map<String, Object> map = new HashMap<String, Object>();int result = goodsCarService.goodsDelete(id);if (result == 1) {HttpSession session = request.getSession();String username = (String) session.getAttribute("username");User u = userService.findUserByUsername(username);List<Goodscar> goodscars = goodsCarService.findGoodscarByUserId(u.getId());App.goodscarList = goodscars;session.setAttribute("goodscarList", App.goodscarList);session.setAttribute("count", App.goodscarList.size());map.put("status", 0);map.put("message", "删除成功");} else {map.put("status", 1);map.put("message", "删除失败");}return map;}/*** 结算商品*/@RequestMapping("/totalAllGoods")@ResponseBodypublic Map<String, Object> totalAllGoods(String ids,String reserved1s, HttpServletRequest request) {Map<String, Object> map = new HashMap<String, Object>();HttpSession session = request.getSession();String[] gcids = ids.split(",");String[] resves = reserved1s.split(",");Map<String, Object> map3 = new HashMap<String, Object>();for (int i=0;i<gcids.length;i++){int reserved1 = Integer.parseInt(resves[i]);map3.put("count",reserved1);map3.put("id",gcids[i]);map3.put("reserved1",String.valueOf(reserved1));goodsCarService.updateGoodsCarCount(map3);}int result = goodsCarService.totalAllGoods(gcids);if (result <= 0) {map.put("status", 1);map.put("message", "交易失败");} else {String uname = (String) session.getAttribute("username");User u = userService.findUserByUsername(uname);List<Goodscar> goodscars = goodsCarService.findGoodscarDrById(gcids);List<Ordergoods> orders = new ArrayList<Ordergoods>();Map<String, Object> map1 = new HashMap<String, Object>();for (Goodscar gc : goodscars) {String id = App.getUid();String uid = gc.getUserid();String gid = gc.getGoodsid();String gcid = gc.getId();int dr = gc.getDr();map1.put("id",id);map1.put("userid",uid);map1.put("goodsid",gid);map1.put("goodscarid",gcid);map1.put("dr",dr);orderService.addOrdergoods(map1);}List<Ordergoods> gcs = orderService.selectOrderByuserId(u.getId());for (Ordergoods gs : gcs) {orders.add(gs);}if (orders.size() <= 0) {map.put("status", 1);map.put("message", "交易失败");} else {session.setAttribute("orders", orders);String userid = u.getId();List<Goodscar> gc = goodsCarService.findGoodscarByUserId(userid);App.goodscarList = gc;session.setAttribute("goodscarList", App.goodscarList);session.setAttribute("count", App.goodscarList.size());map.put("status", 0);map.put("message", "交易成功");}}return map;}/*** 立即购买*/@RequestMapping("/buyGoodsImmediately")@ResponseBodypublic Map<String, Object> buyGoodsImmediately(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();String id = App.getUid();int dr = 0;double count = Double.parseDouble(shuliang);Map<String, Object> map1 = new HashMap<String, Object>();map1.put("id",id);map1.put("goodsid",goodsid);map1.put("userid",userid);map1.put("dr",dr);map1.put("count",count);map1.put("reserved1",shuliang);int result = goodsCarService.addGoodsCar(map1);Map<String, Object> map2 = new HashMap<String, Object>();map2.put("id",App.getUid());map2.put("userid",userid);map2.put("goodsid",goodsid);map2.put("goodscarid",id);map2.put("dr",dr);int result2 = orderService.addOrdergoods(map2);if (result == 1 && result2 == 1){List<Ordergoods> orders = new ArrayList<Ordergoods>();List<Ordergoods> gcs = orderService.selectOrderByuserId(u.getId());for (Ordergoods gs : gcs) {orders.add(gs);}session.setAttribute("orders", orders);map.put("status", 0);map.put("message", "购买成功");map.put("result",id);}else {map.put("status", 1);map.put("message", "购买失败");map.put("result",null);}return map;}
}

商品分类控制器

@Controller
public class GoodstypeController {@Resource(name = "goodstypeService")GoodstypeService goodstypeService;/*** 分页查询增加商品分类列表信息*/@RequestMapping("/addGoodsTypeList")@ResponseBodypublic 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);
//            List<Goodstype> list = goodstypeService.selectCountType();int count = goodstypeService.selectCountType();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);}} else {
//            String search1 = "";
//            search1 += ("%" + search + "%");Map<String, Object> map = new HashMap<String, Object>();map.put("start",start);map.put("size",size);map.put("search",search);List<Goodstype> lists = goodstypeService.findByPageTypeSearch(map);
//            List<Goodstype> list = goodstypeService.selectSearchCounttype(search1);int count = goodstypeService.selectSearchCounttype(search);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")@ResponseBodypublic 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")@ResponseBodypublic Map<String, Object> selectGoodsType() {Map<String, Object> map = new HashMap<String, Object>();List<Goodstype> goodstypes = goodstypeService.selectGoodsType();if (goodstypes != null) {map.put("status", 0);map.put("message", "查询成功");map.put("result", goodstypes);} else {map.put("status", 1);map.put("message", "查询失败");map.put("result", null);}return map;}
}

如果也想学习本系统,下面领取。回复:055springboot

Java项目:Springboot生鲜水果商城相关推荐

  1. springboot生鲜水果商城销售系统

    #### 环境需要 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的.其他版本理论上也可以. 2.IDE环境:IDEA,Eclipse,Myeclipse都可以.推荐IDEA; 3 ...

  2. java毕业设计springboot生鲜超市商城管理系统研究与实现

    我是吉哥,爱好编程,专业从事JavaWeb程序开发,微信小程序开发,定制化项目.源码.代码讲解.文档撰写.ppt制作.做自己喜欢的事,生活就是快乐的. 技术选型: springboot.mybatis ...

  3. 基于javaweb+springboot的水果商城在线商城(java+Springboot+ssm+mysql+jsp+maven)

    基于javaweb+springboot的水果商城在线商城(java+Springboot+ssm+mysql+jsp+maven) 一.项目简述 本系统主要实现的功能有: 前台用户的登录注册,水果商 ...

  4. java计算机毕业设计vue水果商城源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue水果商城源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue水果商城源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...

  5. java基于springboot的网上商城购物系统

    项目介绍 随着社会的快速发展,计算机的影响是全面且深入的.人们生活水平的不断提高,日常生活中人们对网上商城购物系统方面的要求也在不断提高,购物的人数更是不断增加,使得网上商城购物系统的开发成为必需而且 ...

  6. Java项目:SSM水果蔬菜商城批发网站

    作者主页:夜未央5788 简介:Java领域优质创作者.Java项目.学习资料.技术互助 文末获取源码 项目介绍 本项目分为前后台,前台为普通用户登录,后台为管理员登录: 管理员角色包含以下功能: 管 ...

  7. java基于ssm蔬菜水果商城销售系统设计 jsp maven idea

    网上水果超市选择性多,满足人们追求生活质量.喜欢新鲜事物的需求,未来将会受到更多人的青睐.而互联网的加持,更让用户享受到购买水果的简单便捷,提高了用户的生活水平.水果网上超市的意义不仅可以让消费者更方 ...

  8. java项目springboot医院固定资产检修管理系统

    功能介绍 主要对主页.个人中心.员工管理.供应商管理.设备类型管理.仪器设备管理.设备采购管理.设备入库管理.设备申请管理.检修信息管理的实现. springboot是spring家族中的一个全新框架 ...

  9. Java项目:微信小程序商城+后台管理系统(java+SSH+JSP+jQuery+Mysql)

    源码获取:俺的博客首页 "资源" 里下载! 项目介绍 本项目为小程序商城系统前后台,前台为普通会员用户登录,后台为管理员登录: 程序功能: 1.小程序前台:用户注册登录.首页.轮播 ...

最新文章

  1. Window Function--the function of window function
  2. 编译原理实验报告_任意给定一个正规式 r (包括连接、或、闭包运算),根据 Thompson算法设计一个程序,生成与该正规式等价的 NFA N 。
  3. SMS短信通API——(1)Java应用发送手机短信
  4. ubuntu linux theme,如何在Ubuntu 20.04中启用全局暗黑主题
  5. python ffmpy3与FFmpeg的安装
  6. String与Date、Timestamp互转
  7. java foreach顺序_Java中的LongStream forEachOrdered()方法
  8. fiddler 对https支持
  9. 测试工程师必备小工具指南
  10. 上海富勒wms_【快消 | 三草两木牵手富勒科技,深化新零售布局】
  11. 2021最新一线互联网大厂常见高并发面试题解析
  12. Java Swing中国象棋AI(人机和人人对战)
  13. srun Invalid account or account/partition combination specified
  14. 【Lintcode】1413. Tree
  15. 图像处理中“灰度级数”是什么?(灰度值)(位深度)(1bit=1位)
  16. 通报1422人!论文无实质贡献挂名认定为学术不端,科技部发布新规!
  17. 涵盖从java入门到深入架构,Linux、云计算、分布式、大数据Hadoop、ios、Android、互联网技术应有尽有
  18. DataGridView 控件中自动生成列
  19. 算法竞赛入门经典——训练指南
  20. 2023牛客寒假算法基础集训营1_20230116「典dp」「典set」「小思维+bfs」「小思维+构造+码力」「位运算博弈(人类智慧)」

热门文章

  1. 在Flex4中使用RemoteObjectAMF0来连接fluorine网关 转
  2. 群晖NAS与阿里云盘同步的方法
  3. 7 赫斯曼网管软件industrial hivision告警事件设置
  4. 2个简单易用的方法解决:Win10如何恢复回收站删除的文件
  5. 看好豪爵的摩托车,程序员也要放飞自我,想做的事情就要去做,省的以后没有机会而后悔。
  6. 网络摄像机编码标准及传输协议简析
  7. 转行互联网,零基础应届生应该选择什么样的岗位作为切入点?
  8. 海南计算机软件著作权代理哪家好,我想申请著作权登记,请问海南计算机软件著作权登记费用是多少...
  9. 《机器学习》周志华 第二章——模型评估与选择笔记
  10. php图片素描化,照片变素描软件,只需一次点,照片变素描|图片素描