【微服务】Day10(购物车续、新增订单、Leaf)

本文介绍了微服务架构下购物车功能的开发,包括续新增SKU到购物车、查询购物车、删除/清空购物车以及修改购物车商品数量的业务逻辑、控制层和持久层实现。接着讲解了新增订单的业务流程和技术选型,涉及库存减少、购物车商品删除、订单创建及订单项新增。最后,文章探讨了美团开源的Leaf分布式序列号生成系统,阐述了其在分布式环境中的重要性和工作原理。
摘要由CSDN通过智能技术生成

续开发购物车功能

续新增sku到购物车

开发业务逻辑层

上次课完成了持久层的代码

下面开发业务逻辑层

创建OmsCartServiceImpl类实现IOmsCartService接口

实现其中方法,先实现新增购物车的方法即可

在编写业务逻辑层具体代码前,先在该类中编写一个从SpringSecurity上下文中获取用户信息的方法

@Service
@Slf4j
public class OmsCartServiceImpl implements IOmsCartService {
   

    // 装配Mapper操作数据
    @Autowired
    private OmsCartMapper omsCartMapper;

    @Override
    public void addCart(CartAddDTO cartDTO) {
   
        // 在查询购物车中是否有商品之前,必须先明确用户身份,也就是用户ID
        Long userId=getUserId();
        // 根据用户ID和skuId检查当前用户购物车中是否已经存在该商品
        OmsCart omsCart=omsCartMapper.selectExistsCart(userId,cartDTO.getSkuId());
        // 判断omsCart是不是null
        if(omsCart==null){
   
            // 如果omsCart为null,表示当前用户没有添加过这个商品,所以执行新增操作
            // 因为新增操作方法的参数是一个OmsCart类型的对象,所以我们要先实例化出来
            OmsCart newCart=new OmsCart();
            // 将参数CartAddDTO对象的同名属性赋值给newCart
            BeanUtils.copyProperties(cartDTO,newCart);
            // CartAddDTO没有userId属性,需要单独赋值
            newCart.setUserId(userId);
            // 执行新增
            omsCartMapper.saveCart(newCart);
        }else{
   
            // 如果omsCart不是null,表示当前用户之前已经将该sku添加到购物车中了
            // 这种情况下,我们需要做的就是修改购物车中该sku的数量即可
            // 是要在原有的商品数量基础上,再加本次新增商品的数量
            // mapper中直接将值赋给数据库,所有在java代码里要将这个数量计算完成
            omsCart.setQuantity(omsCart.getQuantity()+cartDTO.getQuantity());
            // 然后调用修改购物车数量的方法
            omsCartMapper.updateQuantityById(omsCart);
        }
    }

    @Override
    public JsonPage<CartStandardVO> listCarts(Integer page, Integer pageSize) {
   
        return null;
    }

    @Override
    public void removeCart(Long[] ids) {
   

    }

    @Override
    public void removeAllCarts() {
   

    }

    @Override
    public void removeUserCarts(OmsCart omsCart) {
   

    }

    @Override
    public void updateQuantity(CartUpdateDTO cartUpdateDTO) {
   

    }

    // 业务逻辑层中有获得当前登录用户信息的需求
    // 我们的程序在控制器方法运行前执行的过滤器,过滤器中解析了请求头中包含的JWT
    // 解析获得JWT的用户信息后保存到了SpringSecurity的上下文中
    // 所以我们可以从SpringSecurity的上下文中获得用户信息
    public CsmallAuthenticationInfo getUserInfo(){
   
        // 编码获得SpringSecurity上下文中保存的权限
        UsernamePasswordAuthenticationToken authenticationToken=
                (UsernamePasswordAuthenticationToken)
                        SecurityContextHolder.getContext().getAuthentication();
        // 为了保险起见,判断一下从SpringSecurity中获得的信息是不是null
        if(authenticationToken == null){
   
            throw new CoolSharkServiceException(ResponseCode.UNAUTHORIZED,
                    "请您先登录!");
        }
        // 上下文信息确定存在后,获取其中的用户信息
        // 这个信息就是有JWT解析获得的
        CsmallAuthenticationInfo csmallAuthenticationInfo=
                (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值