基于javaweb的SpringBoot网上家具商城平台设计和实现(java+springboot+mysql+jpa+thymeleaf+html+maven)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

282024123108

前台用户

440023032402

450023032402

460023032402

481824310203

后台管理员

470023032402

480023032402

490023032402

基于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 品类别、商品价格、库存数量、商品描述等内容。

④删除商品:删除商品。  

给大家截一部分效果图吧

系统客户端首页:

登录注册以及后台用户管理:

后台商品信息管理:

功能选择:

用户信息管理修改:

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
*/
//@ResponseBody
@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");
}

/**
* 退出登录
* @param request
* @param response
* @throws IOException
*/
@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


/**
* WEB层日志切面,用来记录请求信息
*/
@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");
}

/**
* 确认收货
*
* @param orderId
*/
@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);
}

/**
* 查找用户的订单列表
*
* @param request
* @return
*/
@Override
public List<Order> findUserOrder(HttpServletRequest request) {
//从session中获取登录用户的id,查找他的订单
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;
}

/**
* 支付
*
* @param orderId
*/
@Override
public void pay(int orderId) {
//具体逻辑就不实现了,直接更改状态为 待发货
Order order = orderDao.findOne(orderId);
if (order == null)
throw new RuntimeException("订单不存在");
orderDao.updateState(STATE_WAITE_SEND,order.getId());
}

/**
* 提交订单
*
* @param name
* @param phone
* @param addr
* @param request
* @param response
*/
@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";
}

/**
* 获取所有用户列表
*
* @param pageindex
* @return
*/
@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;

/**
* 确认收货
* @param orderId
*/
void receive(int orderId);
}
package priv.jesse.mall.web.admin;



@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminUserService adminUserService;

/**
* 访问首页
*
* @return
*/
@RequestMapping("/toIndex.html")
public String toIndex() {
return "admin/index";
}

/**
* 访问登录页面
*
* @return
*/


项目链接:
https://javayms.github.io?id=321422292105200fe
https://javayms.pages.dev?id=321422292105200fe