Java毕业设计项目实战篇|Java项目:优咪商城系统(java+SpringBoot+html+bootstrap+layui+maven+mysql)

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

项目介绍 优咪网上购物体验系统
1. 该平台主要有两大功能:
(1) 浏览平台官方和认证作者提供的篮球相关信息,信息类型包括:视频,新闻,评论类文章,比赛结果
(2) 篮球周边商城,商品分类球鞋、球衣、篮球、运动装备、休闲衣服
(3) 特别功能:每条信息和每一个商品都有一个特殊类型:标签(可有多个标签)。当用户在浏览某条信息(例如在看某段视频到结尾时),平台根据标签向用户推送标签相同的商品。反之,用户在浏览某件商品时,亦根据标签向用户推送与该商品标签相同的信息。
2. 该平台有三种用户:平台管理员、平台认证作者、普通用户
(1) 平台管理员:
① 可管理平台官方运营的商店,对商店的商品进行增删查改,定期上线活动
② 管理平台的信息发布,可对信息进行增删改查
(2) 平台认证作者:
① 可发布自己攥写的文章或自己剪辑的视频
② 可在自己发布的信息下方添加商品链接,若用户购买可获得提成
(3) 用户:
① 可无广告地浏览平台上关于篮球的资讯
② 可浏览商品并且购买
③ 可申请成为官方认证作者
环境需要
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+bootstrap+jQuery+layui+ueditor
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 将项目中application.yml配置文件中的数据库配置改为自己的配置
3. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven; 若为maven项目,导入成功后请执行maven clean; maven install命令,配置tomcat,然后运行;
4. 运行项目 前台地址:http://localhost:8080/
后台浏览地址:http://localhost:8080/login.html

Java毕业设计项目实战篇|Java项目:优咪商城系统(java+SpringBoot+html+bootstrap+layui+maven+mysql)
文章图片

Java毕业设计项目实战篇|Java项目:优咪商城系统(java+SpringBoot+html+bootstrap+layui+maven+mysql)
文章图片

Java毕业设计项目实战篇|Java项目:优咪商城系统(java+SpringBoot+html+bootstrap+layui+maven+mysql)
文章图片

Java毕业设计项目实战篇|Java项目:优咪商城系统(java+SpringBoot+html+bootstrap+layui+maven+mysql)
文章图片

Java毕业设计项目实战篇|Java项目:优咪商城系统(java+SpringBoot+html+bootstrap+layui+maven+mysql)
文章图片

Java毕业设计项目实战篇|Java项目:优咪商城系统(java+SpringBoot+html+bootstrap+layui+maven+mysql)
文章图片


后台管理-登录页:
/** * 后台管理-登录页 */ @Controller public class AdminLoginController extends BaseController { @Autowired private AdminService adminService; //转到后台管理-登录页 @RequestMapping("admin/login") public String goToPage(){ logger.info("转到后台管理-登录页"); return "admin/loginPage"; }//登陆验证-ajax @ResponseBody @RequestMapping(value = "https://www.it610.com/article/admin/login/doLogin",method = RequestMethod.POST,produces = "application/json; charset=utf-8") public String checkLogin(HttpSession session, @RequestParam String username, @RequestParam String password) { logger.info("管理员登录验证"); Integer admin = adminService.login(username,password); JSONObject object = new JSONObject(); if(admin == null){ logger.info("登录验证失败"); object.put("success",false); } else { logger.info("登录验证成功,管理员ID传入会话"); session.setAttribute("adminId",admin); object.put("success",true); }return object.toJSONString(); }//获取管理员头像路径-ajax @ResponseBody @RequestMapping(value = "https://www.it610.com/article/admin/login/profile_picture",method = RequestMethod.GET,produces = "application/json; charset=utf-8") public String getAdminProfilePicture(@RequestParam String username){ logger.info("根据用户名获取管理员头像路径"); Admin admin = adminService.get(username,null); JSONObject object = new JSONObject(); if(admin == null){ logger.info("未找到头像路径"); object.put("success",false); } else { logger.info("成功获取头像路径"); object.put("success",true); object.put("srcString",admin.getAdmin_profile_picture_src()); }return object.toJSONString(); } }

后台管理-分类页:
/** * 后台管理-分类页 */ @Controller public class CategoryController extends BaseController { @Autowired private CategoryService categoryService; @Autowired private LastIDService lastIDService; @Autowired private PropertyService propertyService; //转到后台管理-分类页-ajax @RequestMapping(value = "https://www.it610.com/article/admin/category", method = RequestMethod.GET) public String goToPage(HttpSession session, Map map) { logger.info("检查管理员权限"); Object adminId = checkAdmin(session); if (adminId == null) { return "admin/include/loginMessage"; }logger.info("获取前10条分类列表"); PageUtil pageUtil = new PageUtil(0, 10); List 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 = "https://www.it610.com/article/admin/category/{cid}", method = RequestMethod.GET) public String goToDetailsPage(HttpSession session, Map map, @PathVariable Integer cid/* 分类ID */) { logger.info("检查管理员权限"); Object adminId = checkAdmin(session); if (adminId == null) { return "admin/include/loginMessage"; } 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 = "https://www.it610.com/article/admin/category/new", method = RequestMethod.GET) public String goToAddPage(HttpSession session, Map map) { logger.info("检查管理员权限"); Object adminId = checkAdmin(session); if (adminId == null) { return "admin/include/loginMessage"; }logger.info("转到后台管理-分类添加页-ajax方式"); return "admin/include/categoryDetails"; }//添加分类信息-ajax @ResponseBody @RequestMapping(value = "https://www.it610.com/article/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 = "https://www.it610.com/article/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 = "https://www.it610.com/article/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 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 = "https://www.it610.com/article/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{ @Autowired private ProductOrderService productOrderService; @Autowired private AddressService addressService; @Autowired private UserService userService; @Autowired private ProductOrderItemService productOrderItemService; @Autowired private ProductService productService; @Autowired private ProductImageService productImageService; @Autowired private LastIDService lastIDService; //转到后台管理-订单页-ajax @RequestMapping(value = "https://www.it610.com/article/admin/order", method = RequestMethod.GET) public String goToPage(HttpSession session, Map map){ logger.info("检查管理员权限"); Object adminId = checkAdmin(session); if(adminId == null){ return "admin/include/loginMessage"; }logger.info("获取前10条订单列表"); PageUtil pageUtil = new PageUtil(0, 10); List 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 = "https://www.it610.com/article/admin/order/{oid}", method = RequestMethod.GET) public String goToDetailsPage(HttpSession session, Map map, @PathVariable Integer oid/* 订单ID */) { logger.info("检查管理员权限"); Object adminId = checkAdmin(session); if(adminId == null){ return "admin/include/loginMessage"; }logger.info("获取order_id为{}的订单信息",oid); ProductOrder order = productOrderService.get(oid); logger.info("获取订单详情-地址信息"); Address address = addressService.get(order.getProductOrder_address().getAddress_areaId()); Stack 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.warn("订单地址字符串:{}", builder); order.setProductOrder_detail_address(builder.toString()); logger.info("获取订单详情-用户信息"); order.setProductOrder_user(userService.get(order.getProductOrder_user().getUser_id())); logger.info("获取订单详情-订单项信息"); List productOrderItemList = productOrderItemService.getListByOrderId(oid, null); if (productOrderItemList != null) { logger.info("获取订单详情-订单项对应的产品信息"); for (ProductOrderItem productOrderItem : productOrderItemList) { Integer productId = productOrderItem.getProductOrderItem_product().getProduct_id(); logger.warn("获取产品ID为{}的产品信息", productId); Product product = productService.get(productId); if (product != null) { logger.warn("获取产品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 = "https://www.it610.com/article/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 = "https://www.it610.com/article/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 = "https://www.it610.com/article/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); }JSONObject object = new JSONObject(); logger.info("按条件获取第{}页的{}条订单", index + 1, count); PageUtil pageUtil = new PageUtil(index, count); List 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(); } }

后台管理-用户页:
/** * 后台管理-用户页 */ @Controller public class UserController extends BaseController { @Autowired private UserService userService; @Autowired private AddressService addressService; @Autowired private ReviewService reviewService; @Autowired private ProductOrderItemService productOrderItemService; @Autowired private ProductService productService; @Autowired private ProductImageService productImageService; //转到后台管理-用户页-ajax @RequestMapping(value = "https://www.it610.com/article/admin/user", method = RequestMethod.GET) public String goUserManagePage(HttpSession session, Map map) { logger.info("检查管理员权限"); Object adminId = checkAdmin(session); if (adminId == null) { return "admin/include/loginMessage"; }logger.info("获取前十条用户信息"); PageUtil pageUtil = new PageUtil(0, 10); List userList = userService.getList(null, null, pageUtil); map.put("userList", userList); logger.info("获取用户总数量"); Integer userCount = userService.getTotal(null); map.put("userCount", userCount); logger.info("获取分页信息"); pageUtil.setTotal(userCount); map.put("pageUtil", pageUtil); logger.info("转到后台管理-用户页-ajax方式"); return "admin/userManagePage"; }//转到后台管理-用户详情页-ajax @RequestMapping(value = "https://www.it610.com/article/admin/user/{uid}", method = RequestMethod.GET) public String getUserById(HttpSession session, Map map, @PathVariable Integer uid/* 用户ID */) { logger.info("检查管理员权限"); Object adminId = checkAdmin(session); if (adminId == null) { return "admin/include/loginMessage"; }logger.info("获取user_id为{}的用户信息", uid); User user = userService.get(uid); logger.info("获取用户详情-所在地地址信息"); Address address = addressService.get(user.getUser_address().getAddress_areaId()); Stack addressStack = new Stack<>(); //最后一级地址 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); user.setUser_address(new Address().setAddress_name(builder.toString())); logger.info("获取用户详情-家乡地址信息"); address = addressService.get(user.getUser_homeplace().getAddress_areaId()); //最后一级地址 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() + " "); } builder = new StringBuilder(); while (!addressStack.empty()) { builder.append(addressStack.pop()); } logger.info("家乡地址字符串:{}", builder); user.setUser_homeplace(new Address().setAddress_name(builder.toString())); logger.info("获取用户详情-购物车订单项信息"); List【Java毕业设计项目实战篇|Java项目:优咪商城系统(java+SpringBoot+html+bootstrap+layui+maven+mysql)】 productOrderItemList = productOrderItemService.getListByUserId(user.getUser_id(), null); if (productOrderItemList != null) { logger.info("获取用户详情-购物车订单项对应的产品信息"); for (ProductOrderItem productOrderItem : productOrderItemList) { Integer productId = productOrderItem.getProductOrderItem_product().getProduct_id(); logger.warn("获取产品ID为{}的产品信息", productId); Product product = productService.get(productId); if (product != null) { logger.warn("获取产品ID为{}的第一张预览图片信息", productId); product.setSingleProductImageList(productImageService.getList(productId, (byte) 0, new PageUtil(0, 1))); } productOrderItem.setProductOrderItem_product(product); } } user.setProductOrderItemList(productOrderItemList); if (!StringUtils.isEmpty(user.getUser_realname())) { logger.info("用户隐私加密"); user.setUser_realname(user.getUser_realname().substring(0, 1) + "*"); } else { user.setUser_realname("未命名"); }map.put("user", user); logger.info("转到后台管理-用户详情页-ajax方式"); return "admin/include/userDetails"; }//按条件查询用户-ajax @ResponseBody @RequestMapping(value = "https://www.it610.com/article/admin/user/{index}/{count}", method = RequestMethod.GET, produces = "application/json; charset=UTF-8") public String getUserBySearch(@RequestParam(required = false) String user_name/* 用户名称 */, @RequestParam(required = false) Byte[] user_gender_array/* 用户性别数组 */, @RequestParam(required = false) String orderBy/* 排序字段 */, @RequestParam(required = false, defaultValue = "https://www.it610.com/article/true") Boolean isDesc/* 是否倒序 */, @PathVariable Integer index/* 页数 */, @PathVariable Integer count/* 行数 */) throws UnsupportedEncodingException { //移除不必要条件 Byte gender = null; if (user_gender_array != null && user_gender_array.length == 1) { gender = user_gender_array[0]; }if (user_name != null) { //如果为非空字符串则解决中文乱码:URLDecoder.decode(String,"UTF-8"); user_name = "".equals(user_name) ? null : URLDecoder.decode(user_name, "UTF-8"); } if (orderBy != null && "".equals(orderBy)) { orderBy = null; } //封装查询条件 User user = new User() .setUser_name(user_name) .setUser_gender(gender); OrderUtil orderUtil = null; if (orderBy != null) { logger.info("根据{}排序,是否倒序:{}", orderBy, isDesc); orderUtil = new OrderUtil(orderBy, isDesc); }JSONObject object = new JSONObject(); logger.info("按条件获取第{}页的{}条用户", index + 1, count); PageUtil pageUtil = new PageUtil(index, count); List userList = userService.getList(user, orderUtil, pageUtil); object.put("userList", JSONArray.parseArray(JSON.toJSONString(userList))); logger.info("按条件获取用户总数量"); Integer userCount = userService.getTotal(user); object.put("userCount", userCount); logger.info("获取分页信息"); pageUtil.setTotal(userCount); object.put("totalPage", pageUtil.getTotalPage()); object.put("pageUtil", pageUtil); return object.toJSONString(); } }

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

    推荐阅读