springboot+vue项目之实现商品上下架

一、实现逻辑

  前端通过向Controller层发出请求到后端,后端接收到请求后调用Service层的方法,实现对应的单个商品上下架或者多个商品批量上下架。

二、具体实现之基础准备

1、商品上下架操作请求模型 ProductUpOrDownReq.java

@Getter
@Setter
public class ProductUpOrDownReq {
    @NotNull(message = "主键不能为空")
    private Long id;

    /**
     * 商家id
     */
    @NotNull(message = "商家id不能为空")
    private Long merchantId;


    /**
     * 是否上架 1:上架 ,0:没上架
     */
    @NotBlank(message = "是否上架不能为空")
    private String isgrounding;
}

2、商品上下架批量操作请求模型 BatchUpOrDownReq.java

@Getter
@Setter
public class BatchUpOrDownReq {
    @NotBlank(message = "状态不能为空")
    private String isgrounding;

    @NotNull(message = "商品id的值不能为空")
    private Long[] ids;
}

三、具体实现

1、Controller层  ProductController.java

1)单个商品上下架

    @SaMerchandiserCheckLogin
    @ApiOperation(value = "单个商品上下架")
    @PostMapping(value = "/upordown")
    public R upOrDown(@RequestBody @Valid ProductUpOrDownReq req){
        boolean result=this.productService.upOrDown(req);
        return result?R.ok():R.build(AckCode.DATABASE_ERROR);
    }

2)批量上下架商品

    @SaMerchandiserCheckLogin
    @ApiOperation(value = "上下架批量操作")
    @PostMapping(value = "/batchUpOrDown")
    public R batchUporDown(@RequestBody @Valid BatchUpOrDownReq req){
        boolean result=this.productService.batchUpOrDown(req);
        return result?R.ok():R.build(AckCode.DATABASE_ERROR);
    }

2、Service层

1)单个商品上下架  ProductService.java

    /**
     * 单个商品上下架
     * @param req
     * @return
     */
    boolean upOrDown(ProductUpOrDownReq req);

具体实现ProductServiceImpl.java:

实现逻辑主要是判断选中的数据是否是该商家的数据,判断商家是否有权限,然后再进行更新操作。单个商品上下架只需要更新一列数据,通过获取请求数据的id对其状态进行更改,从而减少数据库的操作。

    @Override
    public boolean upOrDown(ProductUpOrDownReq req) {
        //先判断是否是该商家的数据
        if (StpMerchandiserUtil.getLoginIdAsLong()!=req.getMerchantId().longValue()){
            throw new ServiceException(AckCode.PERMISSION_NOT_ACCESS_CATEGORY);
        }
        Product db = this.getById(req.getId());
        if (Objects.isNull(db)){
            throw new ServiceException(AckCode.NOT_FOUND_DATA);
        }

        //只更新某一列 Isgrounding
        Product entity = new Product();
        entity.setId(req.getId());
        entity.setIsgrounding(req.getIsgrounding());
        entity.setUpdateTime(new Date());
        entity.setUpdateBy(this.currentNameRedisCacheUtil.getMerchandiserCurrentName());
        return this.updateById(entity);
    }

2)批量上下架商品 ProductService.java

    /**
     * 批量上下架
     * @param req
     * @return
     */
    boolean batchUpOrDown(BatchUpOrDownReq req);

具体实现ProductServiceImpl.java:

实现逻辑主要是判断选中的数据是否是该商家的数据,也就是判断该商家是否有权利对数据进行操作,再构建一个专门的集合,存放修改的商品集合,从而实现商品的批量上下架操作。

    @Override
    public boolean batchUpOrDown(BatchUpOrDownReq req) {
        //先判断是不是该商家的数据
        long currentId = StpMerchandiserUtil.getLoginIdAsLong();
        LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(Product::getId,req.getIds());
        queryWrapper.eq(Product::getMerchantId,currentId);
        long count = this.count(queryWrapper);
        //有些商品不是这个商家的
        if (count!=req.getIds().length){
            throw new ServiceException(AckCode.PERMISSION_NOT_ACCESS_CATEGORY);
        }

        //构建一个集合
        List<Product> list=new ArrayList<>();
        for (Long id : req.getIds()) {
            Product product = new Product();
            product.setId(id);
            product.setIsgrounding(req.getIsgrounding());
            product.setUpdateTime(new Date());
            product.setUpdateBy(currentNameRedisCacheUtil.getMerchandiserCurrentName());
            list.add(product);
        }
        return this.saveOrUpdateBatch(list);
    }

四、总结

  该文章主要介绍了通过前端向Controller层发送请求,Controller接收请求并调用方法,从而实现的对商品的简单操作---单个商品的上下架和多个商品的批量上下架。其中要主要的是权限的设置,操作只能由商家进行,同时注意区别单个和多个商品上下架操作的不同之处,以及如何思考设计批量上下架的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值