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

一、项目简述

功能:本系统分用户前台和管理员后台。 前台展示+后台管理,前台界面可实现用户登录,用户注 册,商品展示,商品明细展示,用户信息修改,密码修 改,购物车添加,商品购买,商品结算,订单查询,购物 车查询,后台管理可实现商品管理,订单管理,用户管理

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。

后台管理-账户页:

/*** 后台管理-账户页*/
@Controller
public class AccountController extends BaseController{@Resource(name = "adminService")private AdminService adminService;//转到后台管理-账户页-ajax@RequestMapping(value = "admin/account", method = RequestMethod.GET)public String goToPage(HttpSession session, Map<String, Object> map){logger.info("获取管理员信息");Object adminId = checkAdmin(session);if(adminId == null){return "admin/include/loginMessage";}logger.info("获取目前登录的管理员信息,管理员ID:{}",adminId);Admin admin = adminService.get(null,Integer.parseInt(adminId.toString()));map.put("admin",admin);logger.info("转到后台管理-账户页-ajax方式");return "admin/accountManagePage";}//退出当前账号@RequestMapping(value = "admin/account/logout", method = RequestMethod.GET)public String logout(HttpSession session) {Object o = session.getAttribute("adminId");if (o == null) {logger.info("无相关信息,返回管理员登陆页");} else {session.removeAttribute("adminId");session.invalidate();logger.info("登录信息已清除,返回管理员登陆页");}return "redirect:/admin/login";}//管理员头像上传@ResponseBody@RequestMapping(value = "admin/uploadAdminHeadImage", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")public String uploadAdminHeadImage(@RequestParam MultipartFile file, HttpSession session) {String originalFileName = file.getOriginalFilename();logger.info("获取图片原始文件名:{}", originalFileName);assert originalFileName != null;String extension = originalFileName.substring(originalFileName.lastIndexOf('.'));//生成随机名String fileName = UUID.randomUUID() + extension;//获取上传路径String filePath = session.getServletContext().getRealPath("/") + "res/images/item/adminProfilePicture/" + fileName;logger.info("文件上传路径:{}", filePath);JSONObject jsonObject = new JSONObject();try {logger.info("文件上传中...");file.transferTo(new File(filePath));logger.info("文件上传成功!");jsonObject.put("success", true);jsonObject.put("fileName", fileName);} catch (IOException e) {logger.warn("文件上传失败!");e.printStackTrace();jsonObject.put("success", false);}return jsonObject.toJSONString();}//更新管理员信息@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)@ResponseBody@RequestMapping(value = "admin/account/{admin_id}", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8")public String updateAdmin(HttpSession session, @RequestParam String admin_nickname/*管理员昵称*/,@RequestParam(required = false) String admin_password/*管理员当前密码*/,@RequestParam(required = false) String admin_newPassword/*管理员新密码*/,@RequestParam(required = false) String admin_profile_picture_src/*管理员头像路径*/,@PathVariable("admin_id") String admin_id/*管理员编号*/) {logger.info("获取管理员信息");Object adminId = checkAdmin(session);if (adminId == null) {return "admin/include/loginMessage";}JSONObject jsonObject = new JSONObject();Admin putAdmin = new Admin();putAdmin.setAdmin_id(Integer.valueOf(admin_id));putAdmin.setAdmin_nickname(admin_nickname);if (admin_password != null && !"".equals(admin_password) && admin_newPassword != null && !"".equals(admin_newPassword)) {logger.info("获取需要修改的管理员信息");Admin admin = adminService.get(null, Integer.valueOf(adminId.toString()));if (adminService.login(admin.getAdmin_name(), admin_password) != null) {logger.info("原密码正确");putAdmin.setAdmin_password(admin_newPassword);} else {logger.info("原密码错误,返回错误信息");jsonObject.put("success", false);jsonObject.put("message", "原密码输入有误!");return jsonObject.toJSONString();}}if (admin_profile_picture_src != null && !"".equals(admin_profile_picture_src)) {logger.info("管理员头像路径为{}", admin_profile_picture_src);putAdmin.setAdmin_profile_picture_src(admin_profile_picture_src.substring(admin_profile_picture_src.lastIndexOf("/") + 1));}logger.info("更新管理员信息,管理员ID值为:{}", admin_id);Boolean yn = adminService.update(putAdmin);if (yn) {logger.info("更新成功!");jsonObject.put("success", true);session.removeAttribute("adminId");session.invalidate();logger.info("登录信息已清除");} else {jsonObject.put("success", false);logger.warn("更新失败!事务回滚");throw new RuntimeException();}return jsonObject.toJSONString();}
}

后台管理-产品类型页:

/*** 后台管理-产品类型页*/
@Controller
public class CategoryController extends BaseController {@Resource(name = "categoryService")private CategoryService categoryService;@Resource(name = "lastIDService")private LastIDService lastIDService;@Resource(name = "propertyService")private PropertyService propertyService;//转到后台管理-产品类型页-ajax@RequestMapping(value = "admin/category", method = RequestMethod.GET)public String goToPage(HttpSession session, Map<String, Object> map) {logger.info("获取前10条产品类型列表");PageUtil pageUtil = new PageUtil(0, 10);List<Category> categoryList = categoryService.getList(null, pageUtil);map.put("categoryList", categoryList);logger.info("获取产品类型总数量");Integer categoryCount = categoryService.getTotal(null);map.put("categoryCount", categoryCount);logger.info("获取分页信息");pageUtil.setTotal(categoryCount);map.put("pageUtil", pageUtil);logger.info("转到后台管理-分类页-ajax方式");return "admin/categoryManagePage";}//转到后台管理-产品类型详情页-ajax@RequestMapping(value = "admin/category/{cid}", method = RequestMethod.GET)public String goToDetailsPage(HttpSession session, Map<String, Object> map, @PathVariable Integer cid/* 分类ID */) {logger.info("获取category_id为{}的分类信息", cid);Category category = categoryService.get(cid);logger.info("获取分类子信息-属性列表");category.setPropertyList(propertyService.getList(new Property().setProperty_category(category), null));map.put("category", category);logger.info("转到后台管理-分类详情页-ajax方式");return "admin/include/categoryDetails";}//转到后台管理-产品类型添加页-ajax@RequestMapping(value = "admin/category/new", method = RequestMethod.GET)public String goToAddPage(HttpSession session, Map<String, Object> map) {logger.info("转到后台管理-分类添加页-ajax方式");return "admin/include/categoryDetails";}//添加产品类型信息-ajax@ResponseBody@RequestMapping(value = "admin/category", method = RequestMethod.POST, produces = "application/json;charset=utf-8")public String addCategory(@RequestParam String category_name/* 分类名称 */,@RequestParam String category_image_src/* 分类图片路径 */) {JSONObject jsonObject = new JSONObject();logger.info("整合分类信息");Category category = new Category().setCategory_name(category_name).setCategory_image_src(category_image_src.substring(category_image_src.lastIndexOf("/") + 1));logger.info("添加分类信息");boolean yn = categoryService.add(category);if (yn) {int category_id = lastIDService.selectLastID();logger.info("添加成功!,新增分类的ID值为:{}", category_id);jsonObject.put("success", true);jsonObject.put("category_id", category_id);} else {jsonObject.put("success", false);logger.warn("添加失败!事务回滚");throw new RuntimeException();}return jsonObject.toJSONString();}//更新产品类型信息-ajax@ResponseBody@RequestMapping(value = "admin/category/{category_id}", method = RequestMethod.PUT, produces = "application/json;charset=utf-8")public String updateCategory(@RequestParam String category_name/* 分类名称 */,@RequestParam String category_image_src/* 分类图片路径 */,@PathVariable("category_id") Integer category_id/* 分类ID */) {JSONObject jsonObject = new JSONObject();logger.info("整合分类信息");Category category = new Category().setCategory_id(category_id).setCategory_name(category_name).setCategory_image_src(category_image_src.substring(category_image_src.lastIndexOf("/") + 1));logger.info("更新分类信息,分类ID值为:{}", category_id);boolean yn = categoryService.update(category);if (yn) {logger.info("更新成功!");jsonObject.put("success", true);jsonObject.put("category_id", category_id);} else {jsonObject.put("success", false);logger.info("更新失败!事务回滚");throw new RuntimeException();}return jsonObject.toJSONString();}//按条件查询产品类型-ajax@ResponseBody@RequestMapping(value = "admin/category/{index}/{count}", method = RequestMethod.GET, produces = "application/json;charset=utf-8")public String getCategoryBySearch(@RequestParam(required = false) String category_name/* 分类名称 */,@PathVariable Integer index/* 页数 */,@PathVariable Integer count/* 行数 */) throws UnsupportedEncodingException {//移除不必要条件if (category_name != null) {//如果为非空字符串则解决中文乱码:URLDecoder.decode(String,"UTF-8");category_name = "".equals(category_name) ? null : URLDecoder.decode(category_name, "UTF-8");}JSONObject object = new JSONObject();logger.info("按条件获取第{}页的{}条分类", index + 1, count);PageUtil pageUtil = new PageUtil(index, count);List<Category> categoryList = categoryService.getList(category_name, pageUtil);object.put("categoryList", JSONArray.parseArray(JSON.toJSONString(categoryList)));logger.info("按条件获取分类总数量");Integer categoryCount = categoryService.getTotal(category_name);object.put("categoryCount", categoryCount);logger.info("获取分页信息");pageUtil.setTotal(categoryCount);object.put("totalPage", pageUtil.getTotalPage());object.put("pageUtil", pageUtil);return object.toJSONString();}// 上传产品类型图片-ajax@ResponseBody@RequestMapping(value = "admin/uploadCategoryImage", method = RequestMethod.POST, produces = "application/json;charset=utf-8")public String uploadCategoryImage(@RequestParam MultipartFile file, HttpSession session) {String originalFileName = file.getOriginalFilename();logger.info("获取图片原始文件名:  {}", originalFileName);String extension = originalFileName.substring(originalFileName.lastIndexOf('.'));String fileName = UUID.randomUUID() + extension;String filePath = session.getServletContext().getRealPath("/") + "res/images/item/categoryPicture/" + fileName;logger.info("文件上传路径:{}", filePath);JSONObject object = new JSONObject();try {logger.info("文件上传中...");file.transferTo(new File(filePath));logger.info("文件上传完成");object.put("success", true);object.put("fileName", fileName);} catch (IOException e) {logger.warn("文件上传失败!");e.printStackTrace();object.put("success", false);}return object.toJSONString();}
}

后台管理-订单页:

/*** 后台管理-订单页*/
@Controller
public class
OrderController extends BaseController{@Resource(name="productOrderService")private ProductOrderService productOrderService;@Resource(name = "addressService")private AddressService addressService;@Resource(name="userService")private UserService userService;@Resource(name = "productOrderItemService")private ProductOrderItemService productOrderItemService;@Resource(name = "productService")private ProductService productService;@Resource(name = "productImageService")private ProductImageService productImageService;@Resource(name = "lastIDService")private LastIDService lastIDService;//转到后台管理-订单页-ajax@RequestMapping(value = "admin/order", method = RequestMethod.GET)public String goToPage(HttpSession session, Map<String, Object> map){logger.info("获取前10条订单列表");PageUtil pageUtil = new PageUtil(0, 10);List<ProductOrder> productOrderList =productOrderService.getList(null,null,new OrderUtil("productOrder_id",true), pageUtil);map.put("productOrderList",productOrderList);logger.info("获取订单总数量");Integer productOrderCount = productOrderService.getTotal(null, null);map.put("productOrderCount", productOrderCount);logger.info("获取分页信息");pageUtil.setTotal(productOrderCount);map.put("pageUtil", pageUtil);logger.info("转到后台管理-订单页-ajax方式");return "admin/orderManagePage";}//转到后台管理-订单详情页-ajax@RequestMapping(value = "admin/order/{oid}", method = RequestMethod.GET)public String goToDetailsPage(HttpSession session, Map<String, Object> map, @PathVariable Integer oid/* 订单ID */) {logger.info("获取order_id为{}的订单信息",oid);ProductOrder order = productOrderService.get(oid);logger.info("获取订单详情-地址信息");Address address = addressService.get(order.getProductOrder_address().getAddress_areaId());Stack<String> addressStack = new Stack<>();//详细地址addressStack.push(order.getProductOrder_detail_address());//最后一级地址addressStack.push(address.getAddress_name() + " ");//如果不是第一级地址,循环拼接地址信息while (!address.getAddress_areaId().equals(address.getAddress_regionId().getAddress_areaId())) {address = addressService.get(address.getAddress_regionId().getAddress_areaId());addressStack.push(address.getAddress_name() + " ");}StringBuilder builder = new StringBuilder();while (!addressStack.empty()) {builder.append(addressStack.pop());}logger.info("订单地址字符串:{}", builder);order.setProductOrder_detail_address(builder.toString());logger.info("获取订单详情-用户信息");order.setProductOrder_user(userService.get(order.getProductOrder_user().getUser_id()));logger.info("获取订单详情-订单项信息");List<ProductOrderItem> productOrderItemList = productOrderItemService.getListByOrderId(oid, null);if (productOrderItemList != null) {logger.info("获取订单详情-订单项对应的产品信息");for (ProductOrderItem productOrderItem : productOrderItemList) {Integer productId = productOrderItem.getProductOrderItem_product().getProduct_id();logger.info("获取产品ID为{}的产品信息", productId);Product product = productService.get(productId);if (product != null) {logger.info("获取产品ID为{}的第一张预览图片信息", productId);product.setSingleProductImageList(productImageService.getList(productId, (byte) 0, new PageUtil(0, 1)));}productOrderItem.setProductOrderItem_product(product);}}order.setProductOrderItemList(productOrderItemList);map.put("order", order);logger.info("转到后台管理-订单详情页-ajax方式");return "admin/include/orderDetails";}//更新订单信息-ajax@ResponseBody@RequestMapping(value = "admin/order/{order_id}", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8")public String updateOrder(@PathVariable("order_id") String order_id) {JSONObject jsonObject = new JSONObject();logger.info("整合订单信息");ProductOrder productOrder = new ProductOrder().setProductOrder_id(Integer.valueOf(order_id)).setProductOrder_status((byte) 2).setProductOrder_delivery_date(new Date());logger.info("更新订单信息,订单ID值为:{}", order_id);boolean yn = productOrderService.update(productOrder);if (yn) {logger.info("更新成功!");jsonObject.put("success", true);} else {logger.info("更新失败!事务回滚");jsonObject.put("success", false);throw new RuntimeException();}jsonObject.put("order_id", order_id);return jsonObject.toJSONString();}//按条件查询订单-ajax@ResponseBody@RequestMapping(value = "admin/order/{index}/{count}", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")public String getOrderBySearch(@RequestParam(required = false) String productOrder_code/* 订单号 */,@RequestParam(required = false) String productOrder_post/* 订单邮政编码 */,@RequestParam(required = false) Byte[] productOrder_status_array/* 订单状态数组 */,@RequestParam(required = false) String orderBy/* 排序字段 */,@RequestParam(required = false,defaultValue = "true") Boolean isDesc/* 是否倒序 */,@PathVariable Integer index/* 页数 */,@PathVariable Integer count/* 行数 */){//移除不必要条件if (productOrder_status_array != null && (productOrder_status_array.length <= 0 || productOrder_status_array.length >=5)) {productOrder_status_array = null;}if (productOrder_code != null){productOrder_code = "".equals(productOrder_code) ? null : productOrder_code;}if(productOrder_post != null){productOrder_post = "".equals(productOrder_post) ? null : productOrder_post;}if (orderBy != null && "".equals(orderBy)) {orderBy = null;}//封装查询条件ProductOrder productOrder = new ProductOrder().setProductOrder_code(productOrder_code).setProductOrder_post(productOrder_post);OrderUtil orderUtil = null;if (orderBy != null) {logger.info("根据{}排序,是否倒序:{}",orderBy,isDesc);orderUtil = new OrderUtil(orderBy, isDesc);} else {orderUtil = new OrderUtil("productOrder_id",true);}JSONObject object = new JSONObject();logger.info("按条件获取第{}页的{}条订单", index + 1, count);PageUtil pageUtil = new PageUtil(index, count);List<ProductOrder> productOrderList = productOrderService.getList(productOrder, productOrder_status_array, orderUtil, pageUtil);object.put("productOrderList", JSONArray.parseArray(JSON.toJSONString(productOrderList)));logger.info("按条件获取订单总数量");Integer productOrderCount = productOrderService.getTotal(productOrder, productOrder_status_array);object.put("productOrderCount", productOrderCount);logger.info("获取分页信息");pageUtil.setTotal(productOrderCount);object.put("totalPage", pageUtil.getTotalPage());object.put("pageUtil", pageUtil);return object.toJSONString();}
}

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

Java项目:网上电商系统(java+SSM+mysql+maven+tomcat)相关推荐

  1. Java项目:网上电商项目(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 一款基于Springboot+Vue的电商项目,前后端分离项目,前台后台都有,前台商品展示购买,购物车分类, ...

  2. Java项目:网上花店商城系统(java+jsp+servlert+mysql+ajax)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能: 一套完整的网上花店商场系统,系统支持前台会员的注册 登陆系统留言,花朵的品种选择,详情浏览,加入购物 车,购买花朵等: ...

  3. Java项目:网上图书商城系统(java+SSM+Jsp+MySQL+Redis+JWT+Shiro+RabbitMQ+EasyUI)

    源码获取:博客首页 "资源" 里下载! 这个项目涉及到Shiro整合JWT.秒杀功能所具备的基本要求(限流.乐观锁.接口隐藏.JMeter高并发测试等等).消息中间件RabbitM ...

  4. Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载)

    Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载) 说明:主要是针对一些中大型的项目需要进行分布式以及负载均衡的架构提一些思路与建议. 面对大量用户访问.高并发请求,海量 ...

  5. 基于JAVA的网上订餐外卖系统(Java+MySQL)

    基于JAVA的网上订餐外卖系统(Java+MySQL)-编号:jsp0812 美食是人类永恒的话题,无论是在古代还是现代人们对美食都有一种非常的热爱在里面,但是随着时代的发展,人们可能没有更多的时间去 ...

  6. 基于javaweb的精品酒店管理系统(java+SSM+mysql+maven+tomcat)

    基于javaweb的精品酒店管理系统(java+SSM+mysql+maven+tomcat) 一.项目简述 功能:主要功能主要功能会员管理,住客管理,房间管 理,系统管理,以及一些重要数据的展示导出 ...

  7. java微服务电商系统,JavaEE 电商系统微服务开发骨架(Spring Cloud版)

    Spring Boot - Spring Cloud 一个基于Spring Boot.Spring Cloud的项目,用来快速搭建电商项目微服务骨架. 说明:所有的功能都没有做参数强校验,也不考虑各种 ...

  8. java 全端开源 电商系统 springboot uniapp 小程序 前后端分离 高可用 100%源码 无二次封装 无私服Ja

    目录 Lilishop B2B2C商城系统 介绍 文档 项目链接(gitee) 项目链接(github) 演示地址 3行命令搭建本地环境 功能列表 功能展示 技术选型 升级计划 版本升级 技术亮点 开 ...

  9. Java项目:个人博客系统(java+SSM+Mysql+Servlet+JavaWeb)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 项目内容包括:首页,登陆,新建文章,搜索,登陆日志,登录次数,评论统计,相关信息,文章列表等其他相关功能 另外:系统采用MVC ...

最新文章

  1. 似然估计中为什么要取对数以GMM为例
  2. eclipse打开,莫名报一堆错(Syntax error on tokens, delete these tokens )
  3. yii2地址多级联动
  4. WINCE下的MINGW交叉编译环境下内存崩溃地址的查找方法。
  5. java的部署目录在哪里_Java:Tomcat的部署实例之资源目录
  6. java wordcount程序_[java]wordcount程序
  7. Java笔记03-Constructor Override
  8. 【Vue 3.0 新特性(三)】Vite 工具
  9. 错误 1 类型“System.Web.UI.ScriptManager”同时存在于“c:\windows\assembly\GAC_MSIL\System.Web.Extensions\3.5.0.0
  10. 纠前误码率与信噪比 matlab,信噪比与误码率关系.pdf
  11. [转载]你是那个能和我同行一生的人吗?
  12. Netty源码解析1-Buffer 1
  13. 微信卡券功能JAVA版(PS : 其实无关乎什么语言拉 :) )
  14. 包子笔记 - 关于沉没成本
  15. 建筑工程图上的尺寸数字
  16. Mark loves cat
  17. 【阅读笔记】c++ Primer Plus——第八章
  18. 是什么扼杀了大学后的成长?
  19. python中strip函数_python中strip()函数的理解
  20. 中职学生学业水平计算机考试试题,中职学业水平测试试卷(综合卷).docx

热门文章

  1. Maya与Substance Painter风格化材质阴影和照明学习教程
  2. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法
  3. Kubernetes集群部署(yum部署)
  4. zabbix4.0搭建(基于CentOS6.8)
  5. maven工程插件配置
  6. Android笔记(adb命令--reboot loader)
  7. win10 UWP 应用设置
  8. php 学习笔记 数组1
  9. javascript 利用 - 枚举思想 - 添加地名的一个小例子
  10. 复杂系统设计 企业开发的困境