java商城实践购物车功能是最常见的功能也是相对来说比较复杂,在这里你可能用到session,cookie以及redis技术,还要区分用户未登录添加商品到购物车,以及用户登录了添加购物车的功能,未登录和登录用户购物车合并,频繁的操作不适合存储在数据库中。用户选中购物车商品以及取消移除购物车商品。
1购物车功能演示
在这里插入图片描述2购物车功能模块分析
2.1购物车流程
-
用户未登录点击加入购物车功能按钮,则提示用户登录,让用户强行登录,
根据用户ID,将货品ID以及货品数量和货品价格添加到购物车数据库表中。 -
用户选中购物车商品,以及取消选中购物车商品,是根据购物车每一条数据中的是否被选中字段控制。
-
用户移除购物车商品,根据购物车商品ID,进行删除购物车数据
-
用户全选购物车商品,则更新购物车数据的选中字段
-
用户取消选中购物车商品,则更新购物车选中字段为取消
-
购物车中用户总价需要后台提供一个实时计算的接口,根据用户选中的记录,判断用户选择商品的数量和单价,从而计算出来总价
2.2 数据库表分析
在这里插入图片描述表名:tb_cart
字段 | 中文名 |
---|---|
user_id | 用户ID |
product_id | 商品ID |
quantity | 商品数量 |
checked | 是否选中 |
create_time | 创建时间 |
update_time | 更新时间 |
2.3购物车接口分析
- 购物车添加接口::add 将选择的商品添加到购物车表中
- 获取用户购物车产品列表信息接口
- 全选购物车接口
- 全不选购物车接口
- 单个选中购物车接口
- 单个不选购物车接口
- 删除购物车商品接口: delete
- 获取用户购物车商品数量接口
2.4关键代码分析
@RestController
@RequestMapping("api")
@CrossOrigin(allowCredentials="true")
public class CartController {
@Autowired
private CartService cartService;
/*****
*用户将商品加入购物车
*/
@RequestMapping("/cart/add")
public CommonResult addCart(TbCart tbCart, HttpServletRequest request){
HttpSession session= request.getSession();
System.out.println("seesionID"+session.getId());
TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);
String w= (String) session.getAttribute("a");
System.out.println("w"+w);
if(tbMember==null){
//未登录返回0 啊
return CommonResult.failed(ResultCode.UNAUTHORIZED);
}
/***
* 暂时不写判断用户是否登录默认 21
*/
tbCart.setUserId(tbMember.getId().intValue());
int result= cartService.addCart(tbCart);
if(result>0){
return CommonResult.success(result);
}
return CommonResult.failed();
}
@RequestMapping("/cart/list")
public CommonResult<CartVo> addCart(HttpSession session){
TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);
if(tbMember==null){
//未登录返回0 啊
return CommonResult.failed(ResultCode.UNAUTHORIZED);
}
/***
* 暂时不写判断用户是否登录默认 21
*/
CartVo cartvo= cartService.queryUserCartlist(tbMember.getId().intValue());
return CommonResult.success(cartvo);
}
/****
* 按照商品和登录用户更新
*/
@RequestMapping("/cart/productchecked")
public CommonResult<CartVo> productchecked(Integer productId,HttpSession session){
TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);
if(tbMember==null){
//未登录返回0 啊
return CommonResult.failed(ResultCode.UNAUTHORIZED);
}
CartVo cartvo= cartService.productOrchecked(Constant.CartCHECKED,productId,tbMember.getId().intValue());
//由于前台重新渲染
return CommonResult.success(cartvo);
}
@RequestMapping("/cart/productunchecked")
public CommonResult<CartVo> productunchecked(Integer productId,HttpSession session){
TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);
if(tbMember==null){
//未登录返回0 啊
return CommonResult.failed(ResultCode.UNAUTHORIZED);
}
CartVo cartvo= cartService.productOrchecked(Constant.CartUNCHECKED,productId,tbMember.getId().intValue());
//由于前台重新渲染
return CommonResult.success(cartvo);
}
@RequestMapping("/cart/checkedall")
public CommonResult<CartVo> checkedall(HttpSession session){
TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);
if(tbMember==null){
//未登录返回0 啊
return CommonResult.failed(ResultCode.UNAUTHORIZED);
}
CartVo cartvo= cartService.productOrchecked(Constant.CartCHECKED,null,tbMember.getId().intValue());
//由于前台重新渲染
return CommonResult.success(cartvo);
}
@RequestMapping("/cart/uncheckedall")
public CommonResult<CartVo> uncheckedall(HttpSession session){
TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);
if(tbMember==null){
//未登录返回0 啊
return CommonResult.failed(ResultCode.UNAUTHORIZED);
}
CartVo cartvo= cartService.productOrchecked(Constant.CartUNCHECKED,null,tbMember.getId().intValue());
//由于前台重新渲染
return CommonResult.success(cartvo);
}
/**
* 删除商品
* @return
*/
@RequestMapping("/cart/deleteproduct")
/***
* 为了前后端接收到一个数组,全改了
*/
public CommonResult<CartVo> deleteProduct(@RequestBody CartProductReq req,HttpSession session){
TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);
if(tbMember==null){
//未登录返回0 啊
return CommonResult.failed(ResultCode.UNAUTHORIZED);
}
CartVo cartvo= cartService.deleteProduct(req,tbMember.getId().intValue());
//由于前台重新渲染
return CommonResult.success(cartvo);
}
/***
*
* 根据ID 更新表中的数量
*/
@RequestMapping("/cart/updateproductcount")
public CommonResult<CartVo> updateproductcount(Integer productId,Integer count,HttpSession session){
TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);
if(tbMember==null){
//未登录返回0 啊
return CommonResult.failed(ResultCode.UNAUTHORIZED);
}
CartVo cartvo= cartService.updateproductcount(productId,count,tbMember.getId().intValue());
//由于前台重新渲染
return CommonResult.success(cartvo);
}
/*****
* 获取购物车数量
*/
@RequestMapping("/cart/getcartcount")
public CommonResult getcartcount(HttpSession session){
TbMember tbMember= (TbMember) session.getAttribute(Constant.CURRENT_LOGIN_USER);
if(tbMember==null){
//未登录返回0 啊
return CommonResult.success(0);
}
Integer count= cartService.getcartcount(tbMember.getId().intValue());
//由于前台重新渲染
return CommonResult.success(count);
}
3个人总结
在这次商城实战项目开发中,我学到了,前后端分离项目开发的流程,以及如何使用ajax调用后台java spring boot开发的接口,掌握了数据如何传递以及交互,
掌握了spring boot如何开发项目
掌握了后台运营管理系统如何开发
掌握了商城案例程序的开发业务流程
掌握了支付宝支付,如果对接支付宝支付
掌握了前端跨域问题,以及如何解决跨域
掌握了,刚开始连linux什么都不会,学到了如何购买阿里云服务器以及如何搭建自己的个人博客
学习了如何使用linux安装jdk、mysql、tomcat。
以及学会了使用nginx进行反向代理映射二级域名访问二级域名网站
学会了利用linux监控命令监控服务器异常情况,分析tomcat 宕机原因。
学会了如何监控nginx、tomcat的运行情况,linux定时发现tomcat软件宕机则自启动服务。等等
4个人说明
经验是由一点一点积累的,思维也是由一天一天训练出来的。
5[我的个人网站]
持续更新分享此项目
网友评论