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

主要技术实现:spring、 springmvc、 redis、 springboot、  mybatis 、session、 jquery 、 md5 、bootstarp.js  tomcat、、拦截器等。

主要功能实现:
前端:登录、注册、商品分类查看、浏览水果商品、订单管理、发表评论、收藏商品、购物车管理、个人订单管理查看、个人信息查看修改、地址管理等

后台管理员:后台登录、数据统计、系统版本信息等、管理员管理、角色管理、订单管理、通知公告管理、商品种类、和商品详情管理

主要功能截图如下:

用户填写相关信息进行注册:

水果商品数据列表查看:也可以根据关键字搜索水果商品信息

水果商品详情管理:点击可以查看水果商品购买详情数据、可以进行数量操作、加入订单和购物车以及收藏商品和查看排行等功能

我的购物车详情:可以结算以及继续购物和删除购物车信息等操作

订单详情管理:

我的个人信息管理:可以进行密码修改、订单查看管理、收藏查看管理、收获地址管理

我的评论查看:

我的收藏;可以移除收藏

后台管理员端主要实现:

超级管理员admin登录

系统首页:主要功能用户、角色、通知公告信息、商品种类以及商品详情管理和用户管理以及订单信息管理等数据操作。

后台菜单管理:

用户管理:

通知公告列表展示以及内容添加:

后台管理员对水果商品的管理:

上传商品详情信息:

商品评论数据维护:

订单管理和维护:

项目使用eclipse和idea运行、推荐idea、源码架构:

数据库设计ER图:

设计报告:

用户管理控制器业务:

/*** 用户管理控制器**/
@RequestMapping("/admin/user")
@Controller
public class UserController {@Autowiredprivate UserService userService;@Autowiredprivate RoleService roleService;/*** 用户列表页面* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){Map<String, Object> queryMap = new HashMap<String, Object>();model.addObject("roleList", roleService.findList(queryMap));model.setViewName("user/list");return model;}/*** 获取用户列表* @param page* @param username* @param roleId* @param sex* @return*/@RequestMapping(value="/list",method=RequestMethod.POST)@ResponseBodypublic Map<String, Object> getList(Page page,@RequestParam(name="username",required=false,defaultValue="") String username,@RequestParam(name="roleId",required=false) Long roleId,@RequestParam(name="sex",required=false) Integer sex,HttpServletRequest request){Map<String, Object> ret = new HashMap<String, Object>();Map<String, Object> queryMap = new HashMap<String, Object>();Role role = (Role) request.getSession().getAttribute("role");User user = (User) request.getSession().getAttribute("admin");if(role.getId().equals(Long.valueOf("2"))) {//如果是卖家角色, 只能看到自己的个人信息queryMap.put("Id", user.getId());}queryMap.put("username", username);queryMap.put("roleId", roleId);queryMap.put("sex", sex);queryMap.put("offset", page.getOffset());queryMap.put("pageSize", page.getRows());ret.put("rows", userService.findList(queryMap));ret.put("total", userService.getTotal(queryMap));return ret;}/*** 添加用户* @param user* @return*/@RequestMapping(value="/add",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> add(User user){Map<String, String> ret = new HashMap<String, String>();if(user == null){ret.put("type", "error");ret.put("msg", "请填写正确的用户信息!");return ret;}if(StringUtils.isEmpty(user.getUsername())){ret.put("type", "error");ret.put("msg", "请填写用户名!");return ret;}if(StringUtils.isEmpty(user.getPassword())){ret.put("type", "error");ret.put("msg", "请填写密码!");return ret;}if(user.getRoleId() == null){ret.put("type", "error");ret.put("msg", "请选择所属角色!");return ret;}if(isExist(user.getUsername(), 0l)){ret.put("type", "error");ret.put("msg", "该用户名已经存在,请重新输入!");return ret;}if(userService.add(user) <= 0){ret.put("type", "error");ret.put("msg", "用户添加失败,请联系管理员!");return ret;}ret.put("type", "success");ret.put("msg", "角色添加成功!");return ret;}/*** 编辑用户* @param user* @return*/@RequestMapping(value="/edit",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> edit(User user){Map<String, String> ret = new HashMap<String, String>();if(user == null){ret.put("type", "error");ret.put("msg", "请填写正确的用户信息!");return ret;}if(StringUtils.isEmpty(user.getUsername())){ret.put("type", "error");ret.put("msg", "请填写用户名!");return ret;}
//      if(StringUtils.isEmpty(user.getPassword())){
//          ret.put("type", "error");
//          ret.put("msg", "请填写密码!");
//          return ret;
//      }if(user.getRoleId() == null){ret.put("type", "error");ret.put("msg", "请选择所属角色!");return ret;}if(isExist(user.getUsername(), user.getId())){ret.put("type", "error");ret.put("msg", "该用户名已经存在,请重新输入!");return ret;}if(userService.edit(user) <= 0){ret.put("type", "error");ret.put("msg", "用户添加失败,请联系管理员!");return ret;}ret.put("type", "success");ret.put("msg", "角色添加成功!");return ret;}/*** 批量删除用户* @param ids* @return*/@RequestMapping(value="/delete",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> delete(String ids){Map<String, String> ret = new HashMap<String, String>();if(StringUtils.isEmpty(ids)){ret.put("type", "error");ret.put("msg", "选择要删除的数据!");return ret;}if(ids.contains(",")){ids = ids.substring(0,ids.length()-1);}if(userService.delete(ids) <= 0){ret.put("type", "error");ret.put("msg", "用户删除失败,请联系管理员!");return ret;}ret.put("type", "success");ret.put("msg", "用户删除成功!");return ret;}/*** 上传图片* @param photo* @param request* @return*/@RequestMapping(value="/upload_photo",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> uploadPhoto(MultipartFile photo,HttpServletRequest request){Map<String, String> ret = new HashMap<String, String>();if(photo == null){ret.put("type", "error");ret.put("msg", "选择要上传的文件!");return ret;}if(photo.getSize() > 1024*1024*1024){ret.put("type", "error");ret.put("msg", "文件大小不能超过10M!");return ret;}//获取文件后缀String suffix = photo.getOriginalFilename().substring(photo.getOriginalFilename().lastIndexOf(".")+1,photo.getOriginalFilename().length());if(!"jpg,jpeg,gif,png".toUpperCase().contains(suffix.toUpperCase())){ret.put("type", "error");ret.put("msg", "请选择jpg,jpeg,gif,png格式的图片!");return ret;}String savePath = request.getServletContext().getRealPath("/") + "/resources/upload/";File savePathFile = new File(savePath);if(!savePathFile.exists()){//若不存在改目录,则创建目录savePathFile.mkdir();}String filename = new Date().getTime()+"."+suffix;try {//将文件保存至指定目录photo.transferTo(new File(savePath+filename));}catch (Exception e) {// TODO Auto-generated catch blockret.put("type", "error");ret.put("msg", "保存文件异常!");e.printStackTrace();return ret;}ret.put("type", "success");ret.put("msg", "用户删除成功!");ret.put("filepath",request.getServletContext().getContextPath() + "/resources/upload/" + filename );return ret;}/*** 判断该用户名是否存在* @param username* @param id* @return*/private boolean isExist(String username,Long id){User user = userService.findByUsername(username);if(user == null)return false;if(user.getId().longValue() == id.longValue())return false;return true;}
}

系统操作类控制器:

/*** 系统操作类控制器**/
@Controller
@RequestMapping("/system")
public class SystemController {@Autowiredprivate UserService userService;@Autowiredprivate RoleService roleService;@Autowiredprivate AuthorityService authorityService;@Autowiredprivate MenuService menuService;@Autowiredprivate LogService logService;/*** 系统登录后的主页* @param model* @return*/@RequestMapping(value="/index",method=RequestMethod.GET)public ModelAndView index(ModelAndView model,HttpServletRequest request){List<Menu> userMenus = (List<Menu>)request.getSession().getAttribute("userMenus");model.addObject("topMenuList", MenuUtil.getAllTopMenu(userMenus));model.addObject("secondMenuList", MenuUtil.getAllSecondMenu(userMenus));model.setViewName("system/index");return model;//WEB-INF/views/+system/index+.jsp = WEB-INF/views/system/index.jsp}/*** 系统登录后的欢迎页* @param model* @return*/@RequestMapping(value="/welcome",method=RequestMethod.GET)public ModelAndView welcome(ModelAndView model){model.setViewName("system/welcome");return model;}/*** 系统500错误页面* @param model* @return*/@RequestMapping(value="/operation_error",method=RequestMethod.GET)public ModelAndView operationError(ModelAndView model){model.setViewName("errors/500");return model;}/*** 登陆页面* @param model* @return*/@RequestMapping(value="/login",method=RequestMethod.GET)public ModelAndView login(ModelAndView model){model.setViewName("system/login");return model;}/*** 登录表单提交处理控制器* @param user* @param cpacha* @return*/@RequestMapping(value="/login",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> loginAct(User user,String cpacha,HttpServletRequest request){Map<String, String> ret = new HashMap<String, String>();if(user == null){ret.put("type", "error");ret.put("msg", "请填写用户信息!");return ret;}if(StringUtils.isEmpty(cpacha)){ret.put("type", "error");ret.put("msg", "请填写验证码!");return ret;}if(StringUtils.isEmpty(user.getUsername())){ret.put("type", "error");ret.put("msg", "请填写用户名!");return ret;}if(StringUtils.isEmpty(user.getPassword())){ret.put("type", "error");ret.put("msg", "请填写密码!");return ret;}Object loginCpacha = request.getSession().getAttribute("loginCpacha");if(loginCpacha == null){ret.put("type", "error");ret.put("msg", "会话超时,请刷新页面!");return ret;}if(!cpacha.toUpperCase().equals(loginCpacha.toString().toUpperCase())){ret.put("type", "error");ret.put("msg", "验证码错误!");logService.add("用户名为"+user.getUsername()+"的用户登录时输入验证码错误!");return ret;}User findByUsername = userService.findByUsername(user.getUsername());if(findByUsername == null){ret.put("type", "error");ret.put("msg", "该用户名不存在!");logService.add("登录时,用户名为"+user.getUsername()+"的用户不存在!");return ret;}if(!user.getPassword().equals(findByUsername.getPassword())){ret.put("type", "error");ret.put("msg", "密码错误!");logService.add("用户名为"+user.getUsername()+"的用户登录时输入密码错误!");return ret;}//说明用户名密码及验证码都正确//此时需要查询用户的角色权限Role role = roleService.find(findByUsername.getRoleId());List<Authority> authorityList = authorityService.findListByRoleId(role.getId());//根据角色获取权限列表String menuIds = "";for(Authority authority:authorityList){menuIds += authority.getMenuId() + ",";}if(!StringUtils.isEmpty(menuIds)){menuIds = menuIds.substring(0,menuIds.length()-1);}List<Menu> userMenus = menuService.findListByIds(menuIds);//把角色信息、菜单信息放到session中request.getSession().setAttribute("admin", findByUsername);request.getSession().setAttribute("role", role);request.getSession().setAttribute("userMenus", userMenus);ret.put("type", "success");ret.put("msg", "登录成功!");logService.add("用户名为{"+user.getUsername()+"},角色为{"+role.getName()+"}的用户登录成功!");return ret;}/*** 后台退出注销功能* @param request* @return*/@RequestMapping(value="/logout",method=RequestMethod.GET)public String logout(HttpServletRequest request){HttpSession session = request.getSession();session.setAttribute("admin", null);session.setAttribute("role", null);request.getSession().setAttribute("userMenus", null);return "redirect:login";}/*** 修改密码页面* @param model* @return*/@RequestMapping(value="/edit_password",method=RequestMethod.GET)public ModelAndView editPassword(ModelAndView model){model.setViewName("system/edit_password");return model;}@RequestMapping(value="/edit_password",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> editPasswordAct(String newpassword,String oldpassword,HttpServletRequest request){Map<String, String> ret = new HashMap<String, String>();if(StringUtils.isEmpty(newpassword)){ret.put("type", "error");ret.put("msg", "请填写新密码!");return ret;}User user = (User)request.getSession().getAttribute("admin");if(!user.getPassword().equals(oldpassword)){ret.put("type", "error");ret.put("msg", "原密码错误!");return ret;}user.setPassword(newpassword);if(userService.editPassword(user) <= 0){ret.put("type", "error");ret.put("msg", "密码修改失败,请联系管理员!");return ret;}ret.put("type", "success");ret.put("msg", "密码修改成功!");logService.add("用户名为{"+user.getUsername()+"},的用户成功修改密码!");return ret;} /*** 本系统所有的验证码均采用此方法* @param vcodeLen* @param width* @param height* @param cpachaType:用来区别验证码的类型,传入字符串* @param request* @param response*/@RequestMapping(value="/get_cpacha",method=RequestMethod.GET)public void generateCpacha(@RequestParam(name="vl",required=false,defaultValue="4") Integer vcodeLen,@RequestParam(name="w",required=false,defaultValue="100") Integer width,@RequestParam(name="h",required=false,defaultValue="30") Integer height,@RequestParam(name="type",required=true,defaultValue="loginCpacha") String cpachaType,HttpServletRequest request,HttpServletResponse response){CpachaUtil cpachaUtil = new CpachaUtil(vcodeLen, width, height);String generatorVCode = cpachaUtil.generatorVCode();request.getSession().setAttribute(cpachaType, generatorVCode);BufferedImage generatorRotateVCodeImage = cpachaUtil.generatorRotateVCodeImage(generatorVCode, true);try {ImageIO.write(generatorRotateVCodeImage, "gif", response.getOutputStream());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

角色role控制器:

/*** 角色role控制器*/
@RequestMapping("/admin/role")
@Controller
public class RoleController {@Autowiredprivate RoleService roleService;@Autowiredprivate AuthorityService authorityService;@Autowiredprivate MenuService menuService;/*** 角色列表页面* @param model* @return*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){model.setViewName("/role/list");return model;}/*** 获取角色列表* @param page* @param name* @return*/@RequestMapping(value="/list",method=RequestMethod.POST)@ResponseBodypublic Map<String, Object> getList(Page page,@RequestParam(name="name",required=false,defaultValue="") String name){Map<String, Object> ret = new HashMap<String, Object>();Map<String, Object> queryMap = new HashMap<String, Object>();queryMap.put("name", name);queryMap.put("offset", page.getOffset());queryMap.put("pageSize", page.getRows());ret.put("rows", roleService.findList(queryMap));ret.put("total", roleService.getTotal(queryMap));return ret;}/*** 角色添加* @param role* @return*/@RequestMapping(value="/add",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> add(Role role){Map<String, String> ret = new HashMap<String, String>();if(role == null){ret.put("type", "error");ret.put("msg", "请填写正确的角色信息!");return ret;}if(StringUtils.isEmpty(role.getName())){ret.put("type", "error");ret.put("msg", "请填写角色名称!");return ret;}if(roleService.add(role) <= 0){ret.put("type", "error");ret.put("msg", "角色添加失败,请联系管理员!");return ret;}ret.put("type", "success");ret.put("msg", "角色添加成功!");return ret;}/*** 角色修改* @param role* @return*/@RequestMapping(value="/edit",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> edit(Role role){Map<String, String> ret = new HashMap<String, String>();if(role == null){ret.put("type", "error");ret.put("msg", "请填写正确的角色信息!");return ret;}if(StringUtils.isEmpty(role.getName())){ret.put("type", "error");ret.put("msg", "请填写角色名称!");return ret;}if(roleService.edit(role) <= 0){ret.put("type", "error");ret.put("msg", "角色修改失败,请联系管理员!");return ret;}ret.put("type", "success");ret.put("msg", "角色修改成功!");return ret;}/*** 删除角色信息* @param id* @return*/@RequestMapping(value="/delete",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> delete(Long id){Map<String, String> ret = new HashMap<String, String>();if(id == null){ret.put("type", "error");ret.put("msg", "请选择要删除的角色!");return ret;}try {if(roleService.delete(id) <= 0){ret.put("type", "error");ret.put("msg", "删除失败,请联系管理员!");return ret;}} catch (Exception e) {// TODO: handle exceptionret.put("type", "error");ret.put("msg", "该角色下存在权限或者用户信息,不能删除!");return ret;}ret.put("type", "success");ret.put("msg", "角色删除成功!");return ret;}/*** 获取所有的菜单信息* @return*/@RequestMapping(value="/get_all_menu",method=RequestMethod.POST)@ResponseBodypublic List<Menu> getAllMenu(){Map<String, Object> queryMap = new HashMap<String, Object>();queryMap.put("offset", 0);queryMap.put("pageSize", 99999);return menuService.findList(queryMap);}/*** 添加权限* @param ids* @return*/@RequestMapping(value="/add_authority",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> addAuthority(@RequestParam(name="ids",required=true) String ids,@RequestParam(name="roleId",required=true) Long roleId){Map<String,String> ret = new HashMap<String, String>();if(StringUtils.isEmpty(ids)){ret.put("type", "error");ret.put("msg", "请选择相应的权限!");return ret;}if(roleId == null){ret.put("type", "error");ret.put("msg", "请选择相应的角色!");return ret;}if(ids.contains(",")){ids = ids.substring(0,ids.length()-1);}String[] idArr = ids.split(",");if(idArr.length > 0){authorityService.deleteByRoleId(roleId);}for(String id:idArr){Authority authority = new Authority();authority.setMenuId(Long.valueOf(id));authority.setRoleId(roleId);authorityService.add(authority);}ret.put("type", "success");ret.put("msg", "权限编辑成功!");return ret;}/*** 获取某个角色的所有权限* @param roleId* @return*/@RequestMapping(value="/get_role_authority",method=RequestMethod.POST)@ResponseBodypublic List<Authority> getRoleAuthority(@RequestParam(name="roleId",required=true) Long roleId){return authorityService.findListByRoleId(roleId);}
}

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

Java项目:网上水果超市商城设计和实现(java+SSM+springboot+redis)相关推荐

  1. 基于javaweb+mysql的网上水果超市商城设计和实现(java+ssm+springboot+redis)

    基于javaweb+mysql的网上水果超市商城设计和实现(java+ssm+springboot+redis) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/mye ...

  2. 基于java SSM springboot+redis网上水果超市商城设计和实现以及文档

    作者主页:Java李杨勇 简介:Java领域优质创作者.[Java李杨勇]公号作者  简历模板.学习资料.面试题库.技术互助[关注我,都给你] 文末获取源码 主要技术实现:spring. spring ...

  3. Java项目:婚纱影楼摄影预约网站设计和实现(javaweb+SSM+springboot)

    源码获取:博客首页 "资源" 里下载! 主要功能设计: 运行环境: java jdk 1.8 环境:IDEA tomcat环境: Tomcat 7.x.8 主要功能说明: 管理员角 ...

  4. SSM框架网上水果超市的设计与实现+文档

     博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 SSM框架网上水果超市的设计与实现+文档 视频效果 https://www.bi ...

  5. 基于java的网上宠物销售商城设计(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 毕业设计论文 基于JSP的网上宠物销售商城 摘   要 随着近年来中国经济的快速发展,人民水平的 ...

  6. java水果超市课程设计_(学习java)水果超市管理系统

    代码地址:码云 水果超市管理系统(简化版): https://gitee.com/scorpio0zry/Fruit 水果超市管理系统 : https://gitee.com/scorpio0zry/ ...

  7. Java项目:爱游旅行平台设计和实现(java+springboot+ssm)

    源码获取:博客首页 "资源" 里下载! 项目意义: 改革开放以来, 我国的旅游业发展迅速,但比较而言,我国旅游业发展的广度和深度都远远不能满足经济发展和人民生活水平提高的需要. 随 ...

  8. Java项目:网上水果蔬菜项目系统设计和实现(java+springboot+mysql+ssm)

    源码获取:博客首页 "资源" 里下载! 主主要技术:java  springmvc  springboot mybatis mysql jquery layui 等技术要模块设计如 ...

  9. Java项目:前台+后台精品水果商城系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统主要实现的功能有: 前台用户的登录注册,水果商品的展示,水果的购物车, 购物车新增结算等等,银行卡的支付绑定,收货地址的 ...

最新文章

  1. nopi 的使用记录
  2. pythonpip安装与使用_Python pip 安装使用与问题
  3. Deepgreen数据库日志清理脚本
  4. JavaEE班第四天
  5. yii2 联表查询时,查询关联表的字段时,使用asArray方法
  6. JBoss中间件漏洞总结
  7. 安装loadrunner,缺少VC2005_sp1_with_atl的错
  8. 为什么会有这么多中间表?
  9. 计算机c盘红色,win7系统c盘空间不足变红了如何解决_windows7的C盘变成红色怎么办...
  10. Proof of Stake-股权证明 系列3
  11. android 开发相机焦距解析之调节远近焦距
  12. 适合小学生python的书_小学生开始学Python,最接近AI的编程语言:安利一波Python书单...
  13. Oracle redo 与 undo
  14. Chrome 技术篇-未安装的crx插件源码查看,crx类型文件解压方法
  15. ffmpeg中av_image_alloc()函数的用法 以及 另一种同样功能的函数用法
  16. [易飞]2019年税率改革
  17. Android之更换头像
  18. Linux redis安装及开机自启详细教程
  19. 基于Pytorch的神经网络之CNN
  20. CS10-3ZX控制步进电机

热门文章

  1. unity3d培训_007
  2. 如何实现系统公告或系统消息
  3. 单样本和双样本的检验
  4. CentOS7更换yum源
  5. 中国石油大学《计算机文化基础》在线考试题
  6. win11系统恢复Win10右键菜单的方法
  7. fish shell一个专为90后设计的命令行shell
  8. 影院活动管理系统 项目测试与部署
  9. NLP语义技术演进:从DP依存句法到SDP依存语义再到AMR抽象语义分析概述与开源实现...
  10. 数据规模超大,分布密集,数据存储难