zoukankan      html  css  js  c++  java
  • shop--10.商品--商品编辑(后端)--Service层

    主要步骤如下:

    1. 如用户上传了缩略图,则将原有的缩略图删除(磁盘上删除),并更新tb_product表的img_addr字段,否则不做任何处理。

    2. 如果用户上传了新的商品详情图片,则将原有的属于该productId下的全部的商品详情图删除(磁盘上删除),同时删除productId对应的tb_product_img中的全部数据。

    3. 更新tb_product的信息

    Service层新增两个接口

     1     /**
     2      * 通过商品Id查询唯一的商品信息
     3      * @param productId
     4      * @return
     5      */
     6     Product getProductById(long productId);
     7     
     8     /**
     9      * 修改商品信息以及图片处理
    10      * @param product
    11      * @param thumbnail
    12      * @param productImgHolderList
    13      * @return
    14      * @throws ProductOperationException
    15      */
    16     ProductExecution modifyProduct(Product product,ImageHolder thumbnail,List<ImageHolder> productImgHolderList)
    17     throws ProductOperationException;

    实现类

     1     @Override
     2     public Product getProductById(long productId) {
     3         return productDao.queryProductById(productId);
     4     }
     5 
     6 
     7     /**
     8      * 注意事务控制@Transactional
     9      */
    10     @Override
    11     @Transactional
    12     //1.若缩略图参数有值,则处理缩略图,
    13     //若原先存在缩略图则先删除在添加新图,之后获取缩略图相对路径并赋值给product
    14     //2.若商品详情图列表参数有值,对商品详情图片列表进行同样的操作
    15     //3.将tb_product_img下面的该商品原来的商品详情图记录全部删除
    16     //4.更新tb_product_img以及tb_product的信息
    17     public ProductExecution modifyProduct(Product product, ImageHolder thumbnail, List<ImageHolder> productImgHolderList) throws ProductOperationException {
    18         //空值判断
    19         if (product != null && product.getShop() != null && product.getShop().getShopId() != null && product.getProductCategory().getProductCategoryId() != null) {
    20             // 设置默认的属性
    21             product.setLastEditTime(new Date());
    22 
    23             // Step1. 处理缩略图
    24             if (thumbnail != null) {
    25                 //先获取一遍原有信息,因为原来的信息里有原图片地址
    26                 Product tempProduct = productDao.queryProductById(product.getProductId());
    27                 // 1.1 删除旧的缩略图
    28                 if (tempProduct.getImgAddr() != null) {
    29                     ImageUtil.deleteFileOrPath(tempProduct.getImgAddr());
    30                 }
    31                 // 1.2 添加新的缩略图
    32                 addThumbnail(product, thumbnail);
    33             }
    34 
    35             // Step2. 处理商品详情
    36 
    37             // 如果添加商品成功,继续处理商品详情图片,并写入tb_product_img
    38             if (productImgHolderList != null && productImgHolderList.size() > 0) {
    39                 // 2.1 删除库表中productId对应的tb_product_img的信息
    40                 deleteProductImgList(product.getProductId());
    41                 // 2.2 处理商品详情图片,并写入tb_product_img
    42                 addProductImgList(product, productImgHolderList);
    43             }
    44             try {
    45                 // Step3.更新tb_product
    46                 int effectNum = productDao.updateProduct(product);
    47                 if (effectNum <= 0) {
    48                     throw new ProductOperationException("商品更新失败");
    49                 }
    50                 return new ProductExecution(ProductStateEnum.SUCCESS, product);
    51             } catch (Exception e) {
    52                 throw new ProductOperationException("商品更新失败:" + e.getMessage());
    53             }
    54 
    55         } else {
    56             return new ProductExecution(ProductStateEnum.NULL_PRODUCT);
    57         }
    58     }
    59 
    60     private void deleteProductImgList(long productId) {
    61         // 获取该商铺下对应的productImg信息
    62         List<ProductImg> productImgList = productImgDao.queryProductImgList(productId);
    63         // 遍历删除该目录下的全部文件
    64         for (ProductImg productImg : productImgList) {
    65             ImageUtil.deleteFileOrPath(productImg.getImgAddr());
    66         }
    67         // 删除tb_product_img中该productId对应的记录
    68         productImgDao.deleteProductImgByProductId(productId);
    69 
    70     }

    问题: 发现不能删除磁盘上的文件

    一看文件名都是有.JEPG 不对啊,传入的后缀名都是.jpg的

    后来一看是ImageUtil里的getExtension在之前的字符串越界问题上在后面+1了改回来就可以了

  • 相关阅读:
    Gradle学习系列之二——创建Task的多种方法
    Gradle学习系列之一——Gradle快速入门
    iOS8 定位失败问题
    IOS 项目release版本中关闭NSlog的打印
    iOS中使用block进行网络请求回调
    调用系统的loading界面
    iOS 调用地图导航
    转向ARC的说明
    ZipArchive(解压文件)
    ios background task
  • 原文地址:https://www.cnblogs.com/windbag7/p/9414017.html
Copyright © 2011-2022 走看看