1. 购物车功能分析
1.1 购物车流程
1.用户未登录点击加入购物车功能按钮,则提示用户登录,让用户强行登录,
根据用户ID,将货品ID以及货品数量和货品价格添加到购物车数据库表中。
2.用户选中购物车商品,以及取消选中购物车商品,是根据购物车每一条数据中的是否被选中字段控制。
3.用户移除购物车商品,根据购物车商品ID,进行删除购物车数据
4.用户全选购物车商品,则更新购物车数据的选中字段
5.用户取消选中购物车商品,则更新购物车选中字段为取消
6.购物车中用户总价需要后台提供一个实时计算的接口,根据用户选中的记录,判断用户选择商品的数量和单价,从而计算出来总价
1.2 数据库分析
表名:tb_cart
字段中文名user_id用户IDproduct_id商品IDquantity商品数量checked是否选中create_time创建时间update_time更新时间
1.3 购物车接口分析
1. 购物车添加接口::add 将选择的商品添加到购物车表中
2. 获取用户购物车产品列表信息接口
3. 全选购物车接口
4. 全不选购物车接口
5. 单个选中购物车接口
6. 单个不选购物车接口
7. 删除购物车商品接口: delete
8. 获取用户购物车商品数量接口
1.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);
}
2. 个人总结
在这次商城实战项目开发中,我学到了,前后端分离项目开发的流程,以及如何使用ajax调用后台java spring boot开发的接口,掌握了数据如何传递以及交互,
掌握了spring boot如何开发项目
掌握了后台运营管理系统如何开发
掌握了商城案例程序的开发业务流程
掌握了支付宝支付,如果对接支付宝支付
掌握了前端跨域问题,以及如何解决跨域
掌握了,刚开始连linux什么都不会,学到了如何购买阿里云服务器以及如何搭建自己的个人博客
学习了如何使用linux安装jdk、mysql、tomcat。
以及学会了使用nginx进行反向代理映射二级域名访问二级域名网站
学会了利用linux监控命令监控服务器异常情况,分析tomcat 宕机原因。
学会了如何监控nginx、tomcat的运行情况,linux定时发现tomcat软件宕机则自启动服务。等等
3. 个人说明
不积跬步,无以至千里;不积小流,无以成江海。