——————————DescriptionStart——————————
运行环境 Java≥8、MySQL≥5.7
开发工具 eclipse/idea/myeclipse/sts等均可配置运行
适用 课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
前台用户
后台管理员
基于javaweb的SpringBoot网上家具商城平台设计和实现(java+springboot+mysql+jpa+thymeleaf+html+maven)
主要技术:springmvc springboot mybatis mysql jquery layui 等技术
具体功能模块:
(1) 用户注册和登录登录功能:
①用户的注册功能 : 访问网站的人根据网站的提示注册自己的账户
②用户的登录功能 : 用户可以输入用户名和密码进行登录操作,当没有该账户的时 候,提示错误,用户必须通过注册完成或者从数据库中获取才能进行会员权限级别的操 作。登录成功之后可以购买商品,查询订单的详细信息
(2) 、个人信息的管理:
①用户信息的修改操作,其中包括会员名、密码、性别、联系方式 e-mail 和个人介 绍等用户信息的修改操作。但是会员邮箱是绑定账号的,会员邮箱不能进行更改操作。
②订单管理操作:订单只能查询和删除操作,不能有修改操作,修改操作是属于管理员的权限。
③用户退出操作:当点击用户退出时,就会退出当前用户的登录状态,恢复到游客 状态。
(3) 、商品的操作:
①搜索商品操作: 当在 Search 栏输入想搜索的家居用品时, 会使用模糊查询, 搜索 出客户想到查询的家居用品。
②商品列表展示:
③商品详细信息展示:
(4) 、购物车的管理操作:
①显示商品信息:当我们一进入购物车页面,就会显示出商品的详细信息,以及购 物车界面的功能信息。
②修改商品的数量:用户可以自己输入不同数量的商品,当商品的数量变动时,商 品的库存就会相应的减少,也会根据商品的数量得到购买这一种商品的金额小计。
③删除购物车中的商品:
④购物流程变动:
(5) 、订单管理操作:
①订单生成:进入结算中心,会提示用户已经登录成功并来到结算中心,然后在提 交订单的时候生成了一份订单,会显示在确认订单页面。
②确认订单:当点击确认订单的时候会进入支付页面,那里会真正的付款操作。
③订单查询:在我的订单页面会显示订单的详细信息,我们可以查询我们想要的订 单信息。
④订单管理:在我的订单页面会显示所有订单的信息,可以在那里删除订单,查询 订单等。
后台管理员主要设计:
系统的后台是专门为管理家居商城系统的人员设计的,功能如下:
(1) 、超级管理员:拥有管理该系统的最大权限,他有两个特有的功能
①数据字典:可以对后台的不同分类的分类列表具有增删改查的操作。
②角色管理:将拥有不同权限的管理员分成不同的角色,每个不同角色有自己的权限,不能执行越权操作
(2) 、商品分类的管理:
①添加编辑分类:点击添加按钮,会跳转到分类添加页面,需要编写分类名称,分类描述信息。
2.删除分类:当点击删除按钮时,会弹出一个提醒框,当点击确定,删除分类,点击取消,保持原来不变。
(3) 、商品管理功能:
①查询商品 : 查询所有商品列表, 还有通过商品的名称、 商品的类别和价格区间查询
②添加修改商品 : 点击添加商品会转到添加商品页面, 需要提供商品名称、 商品图片、商 5 6 品类别、商品价格、库存数量、商品描述等内容。
④删除商品:删除商品。
给大家截一部分效果图吧
系统客户端首页:
登录注册以及后台用户管理:
后台商品信息管理:
功能选择:
用户信息管理修改:
——————————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 31 32 33 34 35 36 37 38 39 * @param username * @param password */ @RequestMapping(method = RequestMethod.POST, value = "/login.do") public void login (String username, String password, HttpServletRequest request, HttpServletResponse response) throws IOException { AdminUser adminUser = adminUserService.checkLogin(request, username, password); response.sendRedirect("/mall/admin/toIndex.html" ); } @RequestMapping("/logout.do") public void logout (HttpServletRequest request, HttpServletResponse response) throws IOException { request.getSession().removeAttribute("login_user" ); response.sendRedirect("toLogin.html" ); } } package priv.jesse.mall.service.impl;@Service public class AdminUserServiceImpl implements AdminUserService { @Autowired private AdminUserDao adminUserDao; @Override public AdminUser findById (int id) { return adminUserDao.getOne(id); } @Override public Page<AdminUser> findAll (Pageable pageable) { return adminUserDao.findAll(pageable);
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 @Aspect @Order(5) @Component public class WebLogAspect { private static final Logger LOGGER = LoggerFactory.getLogger(WebLogAspect.class); ThreadLocal<Long> startTime = new ThreadLocal<>(); @Pointcut("execution(public * priv.jesse.mall.controller.*.*(..))") public void webLog () { } @Before("webLog()") public void doBefore (JoinPoint joinPoint) throws Throwable { startTime.set(System.currentTimeMillis()); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); LOGGER.info("**************Start API Request**************" ); LOGGER.info("URL : " + request.getRequestURI().toString()); LOGGER.info("HTTP_METHOD : " + request.getMethod()); LOGGER.info("IP : " + request.getRemoteAddr()); LOGGER.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); LOGGER.info("ARGS : " + Arrays.toString(joinPoint.getArgs())); } @AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning (Object ret) throws Throwable { LOGGER.info("RESPONSE : " + ret); LOGGER.info("SPEND TIME : " + (System.currentTimeMillis() - startTime.get())); LOGGER.info("***************End API Request***************" ); } } package priv.jesse.mall.service;
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 @Transactional public void submit (String name, String phone, String addr, HttpServletRequest request, HttpServletResponse response) throws Exception { Object user = request.getSession().getAttribute("user" ); if (user == null ) throw new LoginException("请登录!" ); User loginUser = (User) user; Order order = new Order(); order.setName(name); order.setPhone(phone); order.setAddr(addr); order.setOrderTime(new Date()); order.setUserId(loginUser.getId()); order.setState(STATE_NO_PAY); List<OrderItem> orderItems = shopCartService.listCart(request); Double total = 0.0 ; order.setTotal(total); order = orderDao.save(order); for (OrderItem orderItem : orderItems) { orderItem.setOrderId(order.getId()); total += orderItem.getSubTotal(); orderItemDao.save(orderItem); } order.setTotal(total); orderDao.save(order); response.sendRedirect("/mall/order/toList.html" ); } @Override public void receive (int orderId) { Order order = orderDao.findOne(orderId); if (order == null ) throw new RuntimeException("订单不存在" ); orderDao.updateState(STATE_COMPLETE,order.getId()); } } package priv.jesse.mall.filter;
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 public void updateStatus (int id, int status) { Order order = orderDao.findOne(id); order.setState(status); orderDao.save(order); } @Override public List<Order> findUserOrder (HttpServletRequest request) { Object user = request.getSession().getAttribute("user" ); if (user == null ) throw new LoginException("请登录!" ); User loginUser = (User) user; List<Order> orders = orderDao.findByUserId(loginUser.getId()); return orders; } @Override public void pay (int orderId) { Order order = orderDao.findOne(orderId); if (order == null ) throw new RuntimeException("订单不存在" ); orderDao.updateState(STATE_WAITE_SEND,order.getId()); } @Override @Transactional public void submit (String name, String phone, String addr, HttpServletRequest request, HttpServletResponse response) throws Exception { Object user = request.getSession().getAttribute("user" ); if (user == null )
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 @RequestMapping("/toEdit.html") public String toEdit (int id, Map<String, Object> map) { User user = userService.findById(id); map.put("user" , user); return "admin/user/edit" ; } @ResponseBody @RequestMapping("/list.do") public ResultBean<List<User>> findAllUser(int pageindex, @RequestParam(value = "pageSize", defaultValue = "15") int pageSize) { Pageable pageable = new PageRequest(pageindex, pageSize, null ); List<User> users = userService.findAll(pageable).getContent(); return new ResultBean<>(users); } @ResponseBody @RequestMapping("/getTotal.do") public ResultBean<Integer> geTotal () { Pageable pageable = new PageRequest(1 , 15 , null ); int total = (int ) userService.findAll(pageable).getTotalElements(); return new ResultBean<>(total); } @ResponseBody @RequestMapping("/del.do") public ResultBean<Boolean> del (int id) { userService.delById(id); return new ResultBean<>(true ); } @ResponseBody @RequestMapping(method = RequestMethod.POST, value = "/update.do") public ResultBean<Boolean> update (int id,String username,
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 * @param phone * @param addr * @param request * @param response */ void submit (String name, String phone, String addr, HttpServletRequest request, HttpServletResponse response) throws Exception ; void receive (int orderId) ; } package priv.jesse.mall.web.admin;@Controller @RequestMapping("/admin") public class AdminController { @Autowired private AdminUserService adminUserService; @RequestMapping("/toIndex.html") public String toIndex () { return "admin/index" ; }
——————————PayStart——————————
项目链接: https://javayms.github.io?id=321422292105200fe https://javayms.pages.dev?id=321422292105200fe