黑马苍穹外卖-微信小程序C端实现删除购物车中一个商品补充

该文章详细介绍了如何在电商系统中实现删除购物车商品的功能。通过业务分析,控制器,服务层和Mapper接口的代码展示,说明了根据dishId或setmealId以及用户ID来查询和操作数据库,实现商品数量减1或完全删除的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、业务分析

二、ShoppingCartController部分代码实现

三、ShoppingCartService接口及实现类ShoppingCartServiceImpl代码实现

四、ShoppingCartMapper代码实现


一、业务分析

接口地址:https://yapi.pro/project/37454/interface/api/1046508https://yapi.pro/project/37454/interface/api/1046508

分析:删除购物车中的一个商品,我们需要看到的效果是购物车页面商品数量减1或者商品被删除了。

 从请求参数中可以看到,C端传递给服务端的数据有dishId、setmealId,我们可以通过dishId+userId(当前使用者)或者setmealId+userId去查询数据库购物车表。

二、ShoppingCartController部分代码实现

 /**
     * 删除购物车中的一个商品
     * @param shoppingCartDTO
     * @return
     */
    @PostMapping("/sub")
    @ApiOperation("删除购物车中的一个商品")
    public Result subtract(@RequestBody ShoppingCartDTO shoppingCartDTO){
        shoppingCartService.subtract(shoppingCartDTO);
        return Result.success();
    }

三、ShoppingCartService接口及实现类ShoppingCartServiceImpl代码实现

ShoppingCartService接口

/**
     * 删除购物车中的一个商品
     * @param shoppingCartDTO
     */
    void subtract(ShoppingCartDTO shoppingCartDTO);

ShoppingCartServiceImpl

    /**
     * 删除购物车中的一个商品
     * @param shoppingCartDTO
     */
    @Override
    public void subtract(ShoppingCartDTO shoppingCartDTO) {
        //获取当前微信用户id
        Long userId = BaseContext.getCurrentId();
        //根据dishId或者setmealId查询购物车
        Long dishId = shoppingCartDTO.getDishId();
        ShoppingCart shoppingCart = new ShoppingCart();
        BeanUtils.copyProperties(shoppingCartDTO,shoppingCart);
        shoppingCart.setUserId(userId);

        if(shoppingCart.getDishId() != null){
            //当前商品为菜品
            ShoppingCart cart = shoppingCartMapper.getByUserIdAndDishId(shoppingCart);
            //如果购物车中商品数量大于1 则对应商品数量减少1
            cart.setNumber(cart.getNumber() - 1);

            if(cart.getNumber() == 0){
                //如果减少后购物车中商品数量等于0 则删除购物车中的商品数据
                shoppingCartMapper.deleteByShoppingId(cart.getId());
            }else {
                //如果减少后购物车中商品数量>=1 则跟新购物车中的商品数据
                shoppingCartMapper.updateNumberById(cart);
            }
        }else {
            //当前商品为套餐
            ShoppingCart cart = shoppingCartMapper.getByUserIdAndSetmealId(shoppingCart);
            //如果购物车中商品数量大于1 则对应商品数量减少1
            cart.setNumber(cart.getNumber() - 1);

            if(cart.getNumber() == 0){
                //如果减少后购物车中商品数量等于0 则删除购物车中的商品数据
                shoppingCartMapper.deleteByShoppingId(cart.getId());
            }else {
                //如果减少后购物车中商品数量>=1 则跟新购物车中的商品数据
                shoppingCartMapper.updateNumberById(cart);
            }
        }
    }

四、ShoppingCartMapper代码实现

/**
     * 根据菜品id查询购物车数据
     * @param shoppingCart
     * @return
     */
    @Select("select * from shopping_cart where user_id = #{userId} and dish_id = #{dishId}")
    ShoppingCart getByUserIdAndDishId(ShoppingCart shoppingCart);


/**
     * 根据商品的套餐id查询购物车数据
     * @param shoppingCart
     * @return
     */
    @Select("select * from shopping_cart where user_id = #{userId} and setmeal_id = #{setmealId}")
    ShoppingCart getByUserIdAndSetmealId(ShoppingCart shoppingCart);

 /**
     * 根据商品id删除购物车数据
     * @param id
     */
    @Delete("delete from shopping_cart where id = #{id}")
    void deleteByShoppingId(Long id);

/**
     * 根据id修改商品数量
     * @param shoppingCart
     */
    @Update("update shopping_cart set number = #{number} where id = #{id}")
    void updateNumberById(ShoppingCart shoppingCart);

### 黑马苍穹外卖微信小程序概述 黑马苍穹外卖微信小程序一个综合性的餐饮服务平台,主要提供在线订餐、支付以及配送服务等功能。此类应用通常基于微信公众平台开发,并遵循官方提供的指南和API接口[^1]。 #### 小程序注册与环境搭建 对于想要创建类似项目的开发者来说,第一步是在微信公众平台上完成账号注册并登录到管理后台进行相应设置。之后可以利用微信提供的开发者工具来构建应用程序原型,在本地环境中测试各项功能是否正常运作。 ```bash # 下载安装微信开发者工具 wget https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html ``` #### 应用架构设计 一个典型的外卖微信小程序会采用分层式的文件夹结构以便于管理和扩展: - `pages` 文件夹下放置各个页面组件; - `utils` 存放公共函数库; - `components` 收集可复用的小部件; - 配置和服务逻辑则分别位于根目录下的特定位置[^3]。 #### 功能模块分析 该类型的项目往往涉及多个核心业务流程,包括但不限于用户认证授权、菜单浏览选购、订单提交跟踪等环节。为了确保良好的用户体验,还需要特别关注性能优化方面的工作,比如图片懒加载机制的应用、网络请求次数的有效控制等等。 #### 技术选型建议 考虑到数据缓存的需求,可以选择合适的第三方库如Jedis/Lettuce/Spring Data Redis作为Redis客户解决方案之一;而在前后端交互过程中,则推荐RESTful API风格的设计模式以简化通信协议[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值