项目编号:BS-SC-059
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
开发技术:Springboot+vue+沙箱支付宝
二,项目简介
本项目基于Spring Boot搭建的蛋糕商城系统主要有用户管理功能、商品管理功能、购物车管理功能、订单管理功能、角色管理功能等,一共分为七个大的核心模块:
前台管理系统:
(1)用户功能模块:用户可以进行登录注册与注销操作,并且可以对个人信息进行响应的修改。
(2)商品功能模块:用户可以搜索查看自己想要的商品,也可以点击商品进行查看商品的详细信息。
(3)购物车管理模块:用户可以把自己感兴趣的商品加入购物车,点击购物车查看购物车信息,可以的对购物车内的商品进行修改,用账号余额对购物车进行结算。
(4)订单功能模块:用户点击订单查看自己的所有订单信息,看到当前订单状态,对已完成的订单进行评价。
后台管理系统:
(5)用户管理模块:管理员可以对普通用户信息进行相应的增删改查操作。
(6)商城资讯管理:管理员可以对商品资讯进行相应的增删改查操作,向用户进行商品推荐。
(7)商品管理模块:管理员可以对商品的信息进行修改,增加新的商品,删除掉不用的商品。
(8)轮播图管理模块:管理员可以对轮播图的信息进行修改,增加新的轮播图,根据优惠在首页显示推荐商品轮播图,实时修改轮播图信息。
1.1.2 性能需求
本系统的主要使用对象为蛋糕商城系统管理员以及消费者,由于消费者主要为年轻人群体,所以对时间的要求不高,没有限制使用的时间。本系统在浏览器运行,需要保证隐私性要强。
时间性:新品蛋糕上架时,可能登录系统的用户较多,需要保证用户操作时服务器反应时间在5秒以内。
运行环境约束:系统可以在IE8以上浏览器平稳运行,可以在不同浏览器运行,对运行的环境要求较低。
易用性需求:本系统页面简介明了易操作,对于众多用户来说可用性较强,不需要进行培训等流程都可以操作。
本系统采用B/S架构进行设计,主要针对PC端用户使用的,不需要专门的客户端,只需要浏览器就能使用,所以对于其他架构来说方便就是它的优势。它是跨平台的,是基于网页语言的、操作系统对其没有太大的影响。系统架构设计图如下图4-1所示:
图2-1 系统架构设计图
2.2 主要功能设计
2.2.1 用户管理功能
用户管理功能主要有前台用户注册、用户账号登录、查看用户信息、修改用户的详细信息以及搜索用户。用户需要登录账号才可以对个人用户信息进行查看和修改,在输入账号密码时会进行信息的判断,数据传到服务器进行信息的验证,如果用户未注册,系统会提示用户账号或密码不正确;如果用户已注册输入的信息有误会提示用户输入正确的账号密码信息,如果信息无误则直接登录成功。用户登录流程图如图2-2所示,用户注册流程图如图2-3所示,用户管理流程图如图2-4所示。
图2-2 用户登录流程图
图2-3 用户注册流程图
图2-4 用户管理流程图
2.2.2 商品管理功能
商品管理功能主要包括了添加商品、修改商品信息、查看商品信息以及下架商品等操作。管理员只有在登录后才可以对商品信息进行操作,可以添加需要新增的商品信息,如果商品信息有误或商品促销时会降价,管理员可以手动修改商品的价格或商品的其他信息,管理员还可以对需要下架的商品进行删除操作。商品管理顺序图如图4-5所示。
图2-5 商品管理流程图
2.2.3 购物车管理功能
用户在登录账号后可以看到自己的购物车页面,用户可以选择将心仪的商品添加至购物车,在购物车页面进行商品的购买与结算,不再需要一单一结操作简单,为用户带来了便利。在购物车页面,用户也可以修改购物车内添加的商品数量。购物车管理顺序图如图2-6所示。
图2-6 购物车管理顺序图
2.2.4 订单管理功能
订单管理模块主要是用户点击订单查看自己的所有订单信息,看到当前订单状态,对已完成的订单进行评价。订单管理流程图如图4-7所示。
图2-7 订单管理流程图
2.2.5 轮播图管理功能
轮播图管理功能属于管理员登录后可以进行的操作,管理员可以按照需求添加新的轮播图信息,可以在原本设置好的轮播图信息上进行修改。轮播图管理功能流程图如图2-8所示。
图2-8 轮播图管理流程图
2.2.6 商品资讯管理功能
商品资讯管理功能属于管理员登录后可以进行的操作,管理员可以按照需求添加新的资讯信息,也可以对老旧的资讯进行删除和更新。商品资讯管理功能流程图如图2-9所示。
图2-9 商品资讯管理流程图
三,系统展示
系统前端
蛋糕分类查看
个人中心--可以使用沙箱支付宝在线充值
我的订单
在线下单
个人后台管理
商城后台管理
四,核心代码展示
package com.controller; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Map; import java.util.HashMap; import java.util.Iterator; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import com.utils.ValidatorUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.annotation.IgnoreAuth; import com.entity.AddressEntity; import com.entity.view.AddressView; import com.service.AddressService; import com.service.TokenService; import com.utils.PageUtils; import com.utils.R; import com.utils.MD5Util; import com.utils.MPUtil; import com.utils.CommonUtil; /** * 地址 * 后端接口 * @author * @email * @date 2023-11-13 12:49:52 */ @RestController @RequestMapping("/address") public class AddressController { @Autowired private AddressService addressService; /** * 后端列表 */ @RequestMapping("/page") public R page(@RequestParam Map<String, Object> params,AddressEntity address, HttpServletRequest request){ if(!request.getSession().getAttribute("role").toString().equals("管理员")) { address.setUserid((Long)request.getSession().getAttribute("userId")); } EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>(); PageUtils page = addressService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, address), params), params)); return R.ok().put("data", page); } /** * 前端列表 */ @RequestMapping("/list") public R list(@RequestParam Map<String, Object> params,AddressEntity address, HttpServletRequest request){ if(!request.getSession().getAttribute("role").toString().equals("管理员")) { address.setUserid((Long)request.getSession().getAttribute("userId")); } EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>(); PageUtils page = addressService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, address), params), params)); return R.ok().put("data", page); } /** * 列表 */ @RequestMapping("/lists") public R list( AddressEntity address){ EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>(); ew.allEq(MPUtil.allEQMapPre( address, "address")); return R.ok().put("data", addressService.selectListView(ew)); } /** * 查询 */ @RequestMapping("/query") public R query(AddressEntity address){ EntityWrapper< AddressEntity> ew = new EntityWrapper< AddressEntity>(); ew.allEq(MPUtil.allEQMapPre( address, "address")); AddressView addressView = addressService.selectView(ew); return R.ok("查询地址成功").put("data", addressView); } /** * 后端详情 */ @RequestMapping("/info/{id}") public R info(@PathVariable("id") Long id){ AddressEntity address = addressService.selectById(id); return R.ok().put("data", address); } /** * 前端详情 */ @RequestMapping("/detail/{id}") public R detail(@PathVariable("id") Long id){ AddressEntity address = addressService.selectById(id); return R.ok().put("data", address); } /** * 后端保存 */ @RequestMapping("/save") public R save(@RequestBody AddressEntity address, HttpServletRequest request){ address.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue()); //ValidatorUtils.validateEntity(address); address.setUserid((Long)request.getSession().getAttribute("userId")); Long userId = (Long)request.getSession().getAttribute("userId"); if(address.getIsdefault().equals("是")) { addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", userId)); } address.setUserid(userId); addressService.insert(address); return R.ok(); } /** * 前端保存 */ @RequestMapping("/add") public R add(@RequestBody AddressEntity address, HttpServletRequest request){ address.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue()); //ValidatorUtils.validateEntity(address); address.setUserid((Long)request.getSession().getAttribute("userId")); Long userId = (Long)request.getSession().getAttribute("userId"); if(address.getIsdefault().equals("是")) { addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", userId)); } address.setUserid(userId); addressService.insert(address); return R.ok(); } /** * 修改 */ @RequestMapping("/update") public R update(@RequestBody AddressEntity address, HttpServletRequest request){ //ValidatorUtils.validateEntity(address); if(address.getIsdefault().equals("是")) { addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", request.getSession().getAttribute("userId"))); } addressService.updateById(address);//全部更新 return R.ok(); } /** * 获取默认地址 */ @RequestMapping("/default") public R defaultAddress(HttpServletRequest request){ Wrapper<AddressEntity> wrapper = new EntityWrapper<AddressEntity>().eq("isdefault", "是").eq("userid", request.getSession().getAttribute("userId")); AddressEntity address = addressService.selectOne(wrapper); return R.ok().put("data", address); } /** * 删除 */ @RequestMapping("/delete") public R delete(@RequestBody Long[] ids){ addressService.deleteBatchIds(Arrays.asList(ids)); return R.ok(); } /** * 提醒接口 */ @RequestMapping("/remind/{columnName}/{type}") public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) { map.put("column", columnName); map.put("type", type); if(type.equals("2")) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); Date remindStartDate = null; Date remindEndDate = null; if(map.get("remindstart")!=null) { Integer remindStart = Integer.parseInt(map.get("remindstart").toString()); c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart); remindStartDate = c.getTime(); map.put("remindstart", sdf.format(remindStartDate)); } if(map.get("remindend")!=null) { Integer remindEnd = Integer.parseInt(map.get("remindend").toString()); c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindEnd); remindEndDate = c.getTime(); map.put("remindend", sdf.format(remindEndDate)); } } Wrapper<AddressEntity> wrapper = new EntityWrapper<AddressEntity>(); if(map.get("remindstart")!=null) { wrapper.ge(columnName, map.get("remindstart")); } if(map.get("remindend")!=null) { wrapper.le(columnName, map.get("remindend")); } if(!request.getSession().getAttribute("role").toString().equals("管理员")) { wrapper.eq("userid", (Long)request.getSession().getAttribute("userId")); } int count = addressService.selectCount(wrapper); return R.ok().put("count", count); } }
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统