尚品汇-选中状态缓存变更、删除缓存购物车(三十八)

目录:

(1)选中状态的变更

(2)删除购物车

(3)流程总结

(1)选中状态的变更

用户每次勾选购物车的多选框,都要把当前状态保存起来。由于可能会涉及更频繁的操作,所以这个勾选状态不必存储到数据库中。保留在缓存状态即可。

编写业务接口:CartService:

复制代码
接口
/**
 * 更新选中状态
 *
 * @param userId
 * @param isChecked
 * @param skuId
 */
void checkCart(String userId, Integer isChecked, Long skuId);

实现类

复制代码
@Override
public void checkCart(String userId, Integer isChecked, Long skuId) {
    String cartKey = this.getCartKey(userId);
    BoundHashOperations<String, String, CartInfo> boundHashOps = this.redisTemplate.boundHashOps(cartKey);
    CartInfo cartInfo = boundHashOps.get(skuId.toString());
    if(null != cartInfo) {
        cartInfo.setIsChecked(isChecked);
        boundHashOps.put(skuId.toString(), cartInfo);
    }
}

继续编写控制器CartApiController:

复制代码
//  选中状态
@GetMapping("checkCart/{skuId}/{isChecked}")
public Result checkCart(@PathVariable Long skuId,
                        @PathVariable Integer isChecked,
                        HttpServletRequest request){

    String userId = AuthContextHolder.getUserId(request);
    //  判断
    if (StringUtils.isEmpty(userId)){
        userId = AuthContextHolder.getUserTempId(request);
    }
    //  调用服务层方法
    cartService.checkCart(userId,isChecked,skuId);
    return Result.ok();
}

刷新页面,会存到缓存,装态实现保留

取消选中第三条:

(2)删除购物车

封装业务接口CartService

复制代码
接口
void deleteCart(Long skuId, String userId);

实现类

复制代码
@Override
public void deleteCart(Long skuId, String userId) {
    BoundHashOperations<String, String, CartInfo> boundHashOps = this.redisTemplate.boundHashOps(this.getCartKey(userId));
    //  判断购物车中是否有该商品!
    if (boundHashOps.hasKey(skuId.toString())){
        boundHashOps.delete(skuId.toString());
    }
}

继续编写控制器CartApiController

复制代码
/**
 * 删除
 *
 * @param skuId
 * @param request
 * @return
 */
@DeleteMapping("deleteCart/{skuId}")
public Result deleteCart(@PathVariable("skuId") Long skuId,
                         HttpServletRequest request) {
    // 如何获取userId
    String userId = AuthContextHolder.getUserId(request);
    if (StringUtils.isEmpty(userId)) {
        // 获取临时用户Id
        userId = AuthContextHolder.getUserTempId(request);
    }
    cartService.deleteCart(skuId, userId);
    return Result.ok();
}

删除2个没选中的:

Redis只剩下一条选中的

显示跳转加入购物车的页面:

(3)流程总结

成功添加跳转到:

点击去购物车结算跳转购物车页面:

相关推荐
KIDULT°4 小时前
MySQL系列 (1):数据库原理
运维·数据库·mysql·云计算
我不是程序员三三5 小时前
透明加密软件偶发解密异常排错实录:文件时能打开时乱码
数据库·域智盾
snhna5 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
天行健,君子而铎5 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
网络·数据库·安全
别动我齐刘海5 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
牛战士coding5 小时前
MySQL 读写分离完整链路:主从复制、多数据源与 @DS 路由
数据库·mysql
goehou6 小时前
MCP 查数实战:让 LLM 安全地查数据库(只读账号、SQL 校验、参数漂移)
数据库·ai·llm·教程·mcp·function calling
code2cat6 小时前
Java进阶篇之AtomicLongFieldUpdater:把累计额度留在对象字段中
java·cas·并发编程
WeiXin_DZbishe7 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计
我不会插花弄玉7 小时前
7.函数【由浅入深-MySQL】
android·数据库·mysql