程序员社区

【校园商铺SSM-24】商品编辑--Service层的实现

文章目录

      • 1. ProductService接口
      • 2. ProductServiceImpl实现类
      • 3. ProductServiceTest测试类

1. ProductService接口

 /**
     * 通过商品Id查询唯一的商品信息
     * @param productId
     * @return
     */
    Product getProductById(long productId);

    /**
     * 修改商品信息以及商品详情图处理
     * @param product
     * @param thumbnail
     * @param productImgHolderList
     * @return
     * @throws ProductOperationException
     */
    ProductExecution modifyProduct(Product product,
                                   ImageHolder thumbnail,
                                   List<ImageHolder> productImgHolderList)throws ProductOperationException;

2. ProductServiceImpl实现类

@Override
    public Product getProductById(long productId) {
        return productDao.queryProductById(productId);
    }

    /**
     * 1.如果缩略图参数有值,就处理缩略图
     * 如果原先存在缩略图,就先删除缩略图,之后获取缩略图相对路径并赋值给product
     * 2.如果商品详情图列表有值,对商品详情图片做同样的处理
     * 3.将tb_product_img下面的该商品原先的商品详情图记录全部清除
     * 4.更新tb_product的信息
     * @param product
     * @param thumbnail
     * @param productImgHolderList
     * @return
     * @throws ProductOperationException
     */
    @Override
    @Transactional
    public ProductExecution modifyProduct(Product product,
                                          ImageHolder thumbnail,
                                          List<ImageHolder> productImgHolderList) throws ProductOperationException {
        //空值判断
        if(product!=null && product.getShop()!=null && product.getShop().getShopId()!=null){
            //给商品设置上默认属性
            product.setLastEditTime(new Date());
            //如果商品缩略图不为空则删除原有缩略图并添加
            if(thumbnail!=null){
                //先获取一遍原有信息,因为原来的信息中有原有的图片地址
                Product tempProduct = productDao.queryProductById(product.getProductId());
                if(tempProduct.getImgAddr()!=null){
                    ImageUtil.deleteFileOrPath(tempProduct.getImgAddr());
                }
                addThumbnail(product,thumbnail);
            }
            //如果有新存入的商品详情图,就将原来的删除并添加新的图片
            if(productImgHolderList!=null && productImgHolderList.size()>0){
                deleteProductImgList(product.getProductId());
                addProductImgList(product,productImgHolderList);
            }

            //更新商品信息
            try {
                int effectedNum = productDao.updateProduct(product);
                if(effectedNum<0){
                    throw new ProductOperationException("更新图片信息失败");
                }
                return new ProductExecution(ProductStateEnum.SUCCESS,product);
            } catch (Exception e) {
                throw new ProductOperationException("更新图片信息失败:"+e.toString());
            }
        }else{
            return new ProductExecution(ProductStateEnum.EMPTY);
        }
    }

    /**
     * 删除某个商品下面的所有详情图
     * @param productId
     */
    private void deleteProductImgList(Long productId) {
        //根据productId获取原来的图片
        List<ProductImg> productImgList = productImgDao.queryProductImgList(productId);
        //删除原来的图片
        for(ProductImg productImg : productImgList){
            ImageUtil.deleteFileOrPath(productImg.getImgAddr());
        }
        //删除数据库里原有图片的信息
        productImgDao.deleteProductImgByProductId(productId);
    }

3. ProductServiceTest测试类

在这里插入图片描述

 @Test
    public void testModifyProduct() throws ShopOperationException, FileNotFoundException {
        Shop shop1 = new Shop();
        shop1.setShopId(143L);

        ProductCategory pc1 = new ProductCategory();
        pc1.setProductCategoryId(8L);

        Product product = new Product();
        product.setProductId(20L);
        product.setShop(shop1);
        product.setProductCategory(pc1);
        product.setProductName("正式商品");
        product.setProductDesc("正式商品");

        //创建缩略图文件流
        File thumbnailFile = new File("F:/XiaoYuanShangPu/xiaohuangren.jpg");
        InputStream is = new FileInputStream(thumbnailFile);
        ImageHolder thumbnail = new ImageHolder(thumbnailFile.getName(), is);

        //创建两个商品详情图片文件流并将它们添加到详情图列表中
        File productImg1 = new File("F:/XiaoYuanShangPu/xiaohuangren.jpg");
        InputStream is1 = new FileInputStream(productImg1);
        File productImg2 = new File("F:/XiaoYuanShangPu/dabai.jpg");
        InputStream is2 = new FileInputStream(productImg2);

        List<ImageHolder> productImgList = new ArrayList<>();
        productImgList.add(new ImageHolder(productImg1.getName(), is1));
        productImgList.add(new ImageHolder(productImg2.getName(), is2));

        //更新商品信息
        ProductExecution pe = productService.modifyProduct(product,thumbnail,productImgList);
        assertEquals(ProductStateEnum.SUCCESS.getState(),pe.getState());
    }

在这里插入图片描述

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 【校园商铺SSM-24】商品编辑--Service层的实现

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区