소스 검색

3/7 完成产品类别的增删改查

chendayu 2 년 전
부모
커밋
4c8912eef2
19개의 변경된 파일973개의 추가작업 그리고 2개의 파일을 삭제
  1. 54 0
      PAS/src/main/java/cn/cslg/pas/common/JsonPage.java
  2. 38 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/PageDTO2.java
  3. 27 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/ProductCategoryAddNewDTO.java
  4. 23 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/ProductCategoryPictureDTO.java
  5. 28 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/ProductCategoryQueryPageDTO.java
  6. 36 0
      PAS/src/main/java/cn/cslg/pas/common/model/dto/ProductCategoryUpdateDTO.java
  7. 23 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductCategoryPictureVO.java
  8. 44 0
      PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductCategoryVO.java
  9. 90 0
      PAS/src/main/java/cn/cslg/pas/controller/ProductCategoryController.java
  10. 1 1
      PAS/src/main/java/cn/cslg/pas/domain/ProductCategory.java
  11. 1 1
      PAS/src/main/java/cn/cslg/pas/domain/asso/AssoProductCategoryPicture.java
  12. 15 0
      PAS/src/main/java/cn/cslg/pas/exception/XiaoShiException.java
  13. 65 0
      PAS/src/main/java/cn/cslg/pas/mapper/AssoProductCategoryPictureMapper.java
  14. 66 0
      PAS/src/main/java/cn/cslg/pas/mapper/ProductCategoryMapper.java
  15. 16 0
      PAS/src/main/java/cn/cslg/pas/mapper/ReportMapper.java
  16. 52 0
      PAS/src/main/java/cn/cslg/pas/service/IProductCategoryService.java
  17. 234 0
      PAS/src/main/java/cn/cslg/pas/service/impl/ProductCategoryServiceImpl.java
  18. 63 0
      PAS/src/main/resources/mapper/AssoProductCategoryPictureMapper.xml
  19. 97 0
      PAS/src/main/resources/mapper/ProductCategoryMapper.xml

+ 54 - 0
PAS/src/main/java/cn/cslg/pas/common/JsonPage.java

@@ -0,0 +1,54 @@
+package cn.cslg.pas.common;
+
+import com.github.pagehelper.PageInfo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 把封装着分页查询结果和分页信息的PageInfo类转换为本类并返回给前端(本类应和Page\PageInfo一样,既包含分页查询结果又包含分页信息)
+ *
+ * @Author chenyu
+ * @Date 2023/2/16
+ */
+@Data
+public class JsonPage implements Serializable {
+    /**
+     * 总页数
+     */
+    private Integer totalCurrents;
+    /**
+     * 总条数
+     */
+    private Long totalSizes;
+    /**
+     * 当前页 (页码)
+     */
+    private Integer current;
+    /**
+     * 每页条数
+     */
+    private Integer size;
+    /**
+     * 分页查询结果
+     */
+    private List<Object> list;
+
+    // 下面要编写一个能够将PageInfo类型对象转换为JsonPage类型对象的方法
+    // 如果需要将其他类型对象转换为JsonPage(例如SpringData的Page类型),另外编写方法即可
+    public static JsonPage restPage(PageInfo pageInfo) {
+        // 所谓转换的意思就是将pageInfo对象中的信息,赋值给JsonPage类型
+        JsonPage result = new JsonPage();
+        // 因为PageInfo和JsonPage同名属性较少,所以手动赋值
+        result.setTotalSizes(pageInfo.getTotal());
+        result.setTotalCurrents(pageInfo.getPages());
+        result.setCurrent(pageInfo.getPageNum());
+        result.setSize(pageInfo.getPageSize());
+        // 别忘了最后的分页数据
+        result.setList(pageInfo.getList());
+        // 最后返回JsonPage类型对象result
+        return result;
+    }
+
+}

+ 38 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/PageDTO2.java

@@ -0,0 +1,38 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 分页查询前端传输DTO类
+ *
+ * @Author chenyu
+ * @Data 2023/2/16
+ */
+@Accessors(chain = true)
+@Data
+public class PageDTO2 implements Serializable {
+    /**
+     * 当前页数
+     */
+    private Integer current;
+    /**
+     * 每页条数
+     */
+    private Integer size;
+    /**
+     * 模糊查询检索条件
+     */
+    private String likeName;
+    /**
+     * 排序名称
+     */
+    private String orderBy;
+    /**
+     * 排序类型
+     */
+    private String orderType;
+
+}

+ 27 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/ProductCategoryAddNewDTO.java

@@ -0,0 +1,27 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 产品类别的新增产品类别DTO类
+ */
+@Accessors(chain = true)
+@Data
+public class ProductCategoryAddNewDTO implements Serializable {
+    /**
+     * 产品类别名称
+     */
+    private String productCategoryName;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 许可费率
+     */
+    private Double licenseRate;
+
+}

+ 23 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/ProductCategoryPictureDTO.java

@@ -0,0 +1,23 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 产品类别的新增图片DTO类
+ */
+@Accessors(chain = true)
+@Data
+public class ProductCategoryPictureDTO implements Serializable {
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 图片路径
+     */
+    private String picture;
+
+}

+ 28 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/ProductCategoryQueryPageDTO.java

@@ -0,0 +1,28 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 产品类别和图片的标准查询DTO类
+ *
+ * @Author chenyu
+ * @Date 2023/3/7
+ */
+@Accessors(chain = true)
+@Data
+public class ProductCategoryQueryPageDTO extends PageDTO2 {
+    /**
+     * 模糊查询-产品类别名称
+     */
+    private String productCategoryName;
+//    /**
+//     * 模糊查询-产品名称
+//     */
+//    private String productName;
+    /**
+     * 模糊查询-创建人名称
+     */
+    private String createPersonName;
+
+}

+ 36 - 0
PAS/src/main/java/cn/cslg/pas/common/model/dto/ProductCategoryUpdateDTO.java

@@ -0,0 +1,36 @@
+package cn.cslg.pas.common.model.dto;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 产品类别的修改产品类别DTO类
+ */
+@Accessors(chain = true)
+@Data
+public class ProductCategoryUpdateDTO implements Serializable {
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 产品类别名称
+     */
+    private String productCategoryName;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 许可费率
+     */
+    private Double licenseRate;
+    /**
+     * 图片
+     */
+    List<ProductCategoryPictureDTO> pictures;
+
+}

+ 23 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductCategoryPictureVO.java

@@ -0,0 +1,23 @@
+package cn.cslg.pas.common.model.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * 产品类别的图片标准查询VO类
+ */
+@Accessors(chain = true)
+@Data
+public class ProductCategoryPictureVO implements Serializable {
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 图片路径
+     */
+    private String picture;
+
+}

+ 44 - 0
PAS/src/main/java/cn/cslg/pas/common/model/vo/ProductCategoryVO.java

@@ -0,0 +1,44 @@
+package cn.cslg.pas.common.model.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 产品类别标准查询VO类
+ */
+@Accessors(chain = true)
+@Data
+public class ProductCategoryVO implements Serializable {
+    /**
+     * ID
+     */
+    private Integer id;
+    /**
+     * 产品类别名称
+     */
+    private String productCategoryName;
+    /**
+     * 备注
+     */
+    private String remark;
+    /**
+     * 许可费率
+     */
+    private Double licenseRate;
+    /**
+     * 创建人名称
+     */
+    private String createPersonName;
+    /**
+     * 图片
+     */
+    private List<ProductCategoryPictureVO> pictures;
+
+}

+ 90 - 0
PAS/src/main/java/cn/cslg/pas/controller/ProductCategoryController.java

@@ -0,0 +1,90 @@
+package cn.cslg.pas.controller;
+
+import cn.cslg.pas.common.JsonPage;
+import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.dto.ProductCategoryAddNewDTO;
+import cn.cslg.pas.common.model.dto.ProductCategoryQueryPageDTO;
+import cn.cslg.pas.common.model.dto.ProductCategoryUpdateDTO;
+import cn.cslg.pas.common.model.vo.ProductCategoryVO;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.service.IProductCategoryService;
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageInfo;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 产品类别的Controller层
+ *
+ * @Author chenyu
+ * @Date 2023/3/7
+ */
+@Tag(name = "产品类别管理模块")
+@RequiredArgsConstructor
+@Slf4j
+@RequestMapping(Constants.API_VERSION_V2 + "/productCategorys")
+@RestController
+public class ProductCategoryController {
+    private final IProductCategoryService productCategoryService;
+
+    @Operation(summary = "新增产品类别")
+    @PostMapping("/addNew")
+    public String addNew(String jsons, List<MultipartFile> files) {
+        if (jsons != null) {
+            ProductCategoryAddNewDTO productCategoryAddNewDTO = JSONObject.parseObject(jsons, ProductCategoryAddNewDTO.class);
+            log.info("开始处理【新增产品类别】的请求,请求参数为:{}, {}", productCategoryAddNewDTO, files);
+            try {
+                productCategoryService.addNew(productCategoryAddNewDTO, files);
+            } catch (XiaoShiException e) {
+                return Response.error(e.getMessage());
+            }
+            return Response.success("新增产品类别完成");
+        }
+        return Response.error("请求参数为null");
+    }
+
+    @Operation(summary = "分页查询产品类别")
+    @PostMapping("/query")
+    public String query(@RequestBody ProductCategoryQueryPageDTO productCategoryQueryPageDTO) {
+        log.info("开始处理【分页查询产品类别】的请求,请求参数为:{}", productCategoryQueryPageDTO);
+        JsonPage jsonPage = productCategoryService.query(productCategoryQueryPageDTO);
+        return Response.success(jsonPage);
+    }
+
+    @Operation(summary = "修改产品类别")
+    @PostMapping("/update")
+    public String update(String jsons, List<MultipartFile> files) {
+        if (jsons != null) {
+            ProductCategoryUpdateDTO productCategoryUpdateDTO = JSONObject.parseObject(jsons, ProductCategoryUpdateDTO.class);
+            log.info("开始处理【修改产品类别】的请求,请求参数为:{}, {}", productCategoryUpdateDTO, files);
+            try {
+                productCategoryService.update(productCategoryUpdateDTO, files);
+            } catch (XiaoShiException e) {
+                return Response.error(e.getMessage());
+            }
+            return Response.success("修改产品类别完成");
+        }
+        return Response.error("请求参数为null");
+    }
+
+    @Operation(summary = "删除产品类别")
+    @GetMapping("/delete")
+    public String delete(Integer id) {
+        log.info("开始处理【删除产品类别】的业务,参数为:{}", id);
+        try {
+            productCategoryService.delete(id);
+        } catch (XiaoShiException e) {
+            return Response.error(e.getMessage());
+        }
+        return Response.success("删除产品类别完成");
+    }
+
+
+}

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/domain/ProductCategory.java

@@ -41,7 +41,7 @@ public class ProductCategory implements Serializable {
     /**
      * 创建人名称
      */
-    private Integer createPersonName;
+    private String createPersonName;
     /**
      * 创建时间
      */

+ 1 - 1
PAS/src/main/java/cn/cslg/pas/domain/asso/AssoProductCategoryPicture.java

@@ -7,7 +7,7 @@ import lombok.experimental.Accessors;
 import java.io.Serializable;
 
 /**
- * 产品类别图片关联表
+ * 产品类别图片关联表实体类
  */
 @Accessors(chain = true)
 @Data

+ 15 - 0
PAS/src/main/java/cn/cslg/pas/exception/XiaoShiException.java

@@ -0,0 +1,15 @@
+package cn.cslg.pas.exception;
+
+/**
+ * 整个项目通用异常类
+ *
+ * @Author chenyu
+ * @Date 2023/3/7
+ */
+public class XiaoShiException extends RuntimeException {
+
+    public XiaoShiException(String message) {
+        super(message);
+    }
+
+}

+ 65 - 0
PAS/src/main/java/cn/cslg/pas/mapper/AssoProductCategoryPictureMapper.java

@@ -0,0 +1,65 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.common.model.vo.ProductCategoryPictureVO;
+import cn.cslg.pas.domain.asso.AssoProductCategoryPicture;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 产品图片关联表的Mapper层接口
+ *
+ * @Author chenyu
+ * @Date 2023/3/7
+ */
+@Repository
+public interface AssoProductCategoryPictureMapper {
+    /**
+     * 插入数据
+     *
+     * @param assoProductCategoryPicture 产品类别图片数据对象
+     * @return 返回受影响的行数
+     */
+    int insert(AssoProductCategoryPicture assoProductCategoryPicture);
+
+    /**
+     * 批量插入数据
+     *
+     * @param assoProductCategoryPictures 产品类别图片数据对象集合
+     * @return 返回受影响的行数
+     */
+    int insertBatch(List<AssoProductCategoryPicture> assoProductCategoryPictures);
+
+    /**
+     * 根据产品类别productCategoryId删除数据
+     *
+     * @param productCategoryId 产品类别id
+     * @return 返回受影响的行数
+     */
+    int deleteByProductCategoryId(Integer productCategoryId);
+
+    /**
+     * 根据id批量删除数据
+     *
+     * @param ids id集合
+     * @return 返回受影响的行数
+     */
+    int deleteByIds(List<Integer> ids);
+
+    /**
+     * 根据产品类别id查询数据
+     *
+     * @param productCategoryId 产品类别id
+     * @return 返回查询到的数据
+     */
+    List<ProductCategoryPictureVO> queryListByProductCategoryId(Integer productCategoryId);
+
+    /**
+     * 根据产品类别id统计数量
+     *
+     * @param productCategoryId 产品类别id
+     * @return 返回查询到的数据
+     */
+    int countByProductCategoryId(Integer productCategoryId);
+
+}

+ 66 - 0
PAS/src/main/java/cn/cslg/pas/mapper/ProductCategoryMapper.java

@@ -0,0 +1,66 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.common.model.dto.ProductCategoryQueryPageDTO;
+import cn.cslg.pas.common.model.vo.ProductCategoryVO;
+import cn.cslg.pas.domain.ProductCategory;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 产品表的Mapper层接口
+ *
+ * @Author chenyu
+ * @Date 2023/3/7
+ */
+@Repository
+public interface ProductCategoryMapper {
+    /**
+     * 插入数据
+     *
+     * @param productCategory 产品类别数据对象
+     * @return 返回受影响的行数
+     */
+    int insert(ProductCategory productCategory);
+
+    /**
+     * 根据id删除数据
+     *
+     * @param id 产品类别id
+     * @return 返回受影响的行数
+     */
+    int deleteById(Integer id);
+
+    /**
+     * 根据id修改数据
+     *
+     * @param productCategory 产品类别数据对象
+     * @return 返回受影响的行数
+     */
+    int updateById(ProductCategory productCategory);
+
+    /**
+     * 根据产品类别名称统计数量
+     *
+     * @param productCategoryName 产品类别名称
+     * @return 返回受影响的行数
+     */
+    int countByProductCategoryName(String productCategoryName);
+
+    /**
+     * 根据id统计数量
+     *
+     * @param id 产品类别id
+     * @return 返回受影响的行数
+     */
+    int countById(Integer id);
+
+    /**
+     * 分页查询产品类别和图片
+     *
+     * @param productCategoryQueryPageDTO 分页信息
+     * @return 返回查询到的数据
+     */
+    List<ProductCategoryVO> query(ProductCategoryQueryPageDTO productCategoryQueryPageDTO);
+
+}

+ 16 - 0
PAS/src/main/java/cn/cslg/pas/mapper/ReportMapper.java

@@ -0,0 +1,16 @@
+package cn.cslg.pas.mapper;
+
+import cn.cslg.pas.domain.Report;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 报告表 Mapper 接口
+ * </p>
+ *
+ * @author 王岩
+ * @since 2021-12-27
+ */
+public interface ReportMapper extends BaseMapper<Report> {
+
+}

+ 52 - 0
PAS/src/main/java/cn/cslg/pas/service/IProductCategoryService.java

@@ -0,0 +1,52 @@
+package cn.cslg.pas.service;
+
+import cn.cslg.pas.common.JsonPage;
+import cn.cslg.pas.common.model.dto.ProductCategoryAddNewDTO;
+import cn.cslg.pas.common.model.dto.ProductCategoryQueryPageDTO;
+import cn.cslg.pas.common.model.dto.ProductCategoryUpdateDTO;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 产品类别的Service层接口
+ *
+ * @Author chenyu
+ * @Date 2023/3/7
+ */
+public interface IProductCategoryService {
+    /**
+     * 新增产品类别
+     *
+     * @param productCategoryAddNewDTO 产品类别数据对象
+     * @param files                    产品类别图片
+     */
+    @Transactional
+    void addNew(ProductCategoryAddNewDTO productCategoryAddNewDTO, List<MultipartFile> files);
+
+    /**
+     * 分页查询产品类别
+     *
+     * @param productCategoryQueryPageDTO 产品类别分页信息数据对象
+     */
+    JsonPage query(ProductCategoryQueryPageDTO productCategoryQueryPageDTO);
+
+    /**
+     * 修改产品类别
+     *
+     * @param productCategoryUpdateDTO 产品类别数据对象
+     * @param files                    产品类别图片
+     */
+    @Transactional
+    void update(ProductCategoryUpdateDTO productCategoryUpdateDTO, List<MultipartFile> files);
+
+    /**
+     * 删除产品类别
+     *
+     * @param id 产品类别id
+     */
+    @Transactional
+    void delete(Integer id);
+
+}

+ 234 - 0
PAS/src/main/java/cn/cslg/pas/service/impl/ProductCategoryServiceImpl.java

@@ -0,0 +1,234 @@
+package cn.cslg.pas.service.impl;
+
+import cn.cslg.pas.common.JsonPage;
+import cn.cslg.pas.common.model.PersonnelVO;
+import cn.cslg.pas.common.model.dto.*;
+import cn.cslg.pas.common.model.vo.ProductCategoryPictureVO;
+import cn.cslg.pas.common.model.vo.ProductCategoryVO;
+import cn.cslg.pas.common.utils.CacheUtils;
+import cn.cslg.pas.common.utils.FileUtils;
+import cn.cslg.pas.common.utils.Response;
+import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
+import cn.cslg.pas.domain.ProductCategory;
+import cn.cslg.pas.domain.asso.AssoProductCategoryPicture;
+import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.AssoProductCategoryPictureMapper;
+import cn.cslg.pas.mapper.ProductCategoryMapper;
+import cn.cslg.pas.service.IProductCategoryService;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 产品类别的Service层接口实现类
+ *
+ * @Author chenyu
+ * @Date 2023/3/7
+ */
+@RequiredArgsConstructor
+@Slf4j
+@Service
+public class ProductCategoryServiceImpl implements IProductCategoryService {
+    private final ProductCategoryMapper productCategoryMapper;
+    private final AssoProductCategoryPictureMapper assoProductCategoryPictureMapper;
+    private final CacheUtils cacheUtils;
+    private final LoginUtils loginUtils;
+    private final FileUtils fileUtils;
+
+    /**
+     * 新增产品类别
+     *
+     * @param productCategoryAddNewDTO 产品类别数据对象
+     * @param files                    产品类别图片
+     */
+    @Override
+    public void addNew(ProductCategoryAddNewDTO productCategoryAddNewDTO, List<MultipartFile> files) {
+        log.info("开始处理【新增产品类别】的业务,参数为:{}, {}", productCategoryAddNewDTO, files);
+
+        //检查产品类别名称是否被占用
+        String productCategoryName = productCategoryAddNewDTO.getProductCategoryName();
+        log.info("检查产品类别名称是否被占用");
+        int count = productCategoryMapper.countByProductCategoryName(productCategoryName);
+        if (count > 0) {
+            String message = "新增产品类别失败,产品类别名称【" + productCategoryName + "】已存在,请尝试更换名称";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
+        //新增产品类别DTO对象赋值给产品类别表实体类
+        ProductCategory productCategory = new ProductCategory();
+        BeanUtils.copyProperties(productCategoryAddNewDTO, productCategory);
+        //获取当前登陆人信息
+        PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
+        productCategory
+                .setCreatePersonId(personnelVO.getId())
+                .setCreatePersonName(personnelVO.getName());
+        //数据入产品类别表
+        log.info("数据入产品类别表");
+        int rows = productCategoryMapper.insert(productCategory);
+        if (rows != 1) {
+            String message = "新增产品类别失败,数据入产品类别表失败,服务器忙请稍后再次尝试";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
+        //如果有图片,图片文件上传至服务器,后获取url地址,赋值给产品类别图片关联表实体类
+        if (files != null) {
+            ArrayList<AssoProductCategoryPicture> assoProductCategoryPictures = new ArrayList<>();
+            for (MultipartFile file : files) {
+                //图片文件上传至服务器
+                UploadFileDTO fileDTO = fileUtils.uploadFile(file);
+                //获取图片文件的url地址
+                String picturePath = fileDTO.getPath();
+                AssoProductCategoryPicture assoProductCategoryPicture = new AssoProductCategoryPicture()
+                        .setProductCategoryId(productCategory.getId())
+                        .setPicture(picturePath);
+                assoProductCategoryPictures.add(assoProductCategoryPicture);
+            }
+
+            log.info("数据入产品类别图片关联表");
+            rows = assoProductCategoryPictureMapper.insertBatch(assoProductCategoryPictures);
+            if (rows != assoProductCategoryPictures.size()) {
+                String message = "新增产品类别失败,数据入产品类别图片关联表失败,服务器忙请稍后再次尝试";
+                log.info("{}", message);
+                throw new XiaoShiException(message);
+            }
+        }
+
+        log.info("新增产品类别完成");
+
+    }
+
+    @Override
+    public JsonPage query(ProductCategoryQueryPageDTO productCategoryQueryPageDTO) {
+        log.info("开始处理【分页查询产品类别】的业务,参数为:{}", productCategoryQueryPageDTO);
+
+        Integer current = productCategoryQueryPageDTO.getCurrent();
+        Integer size = productCategoryQueryPageDTO.getSize();
+        if (current != null && size != null) {
+            PageHelper.startPage(current, size);
+        }
+        List<ProductCategoryVO> queryResults = productCategoryMapper.query(productCategoryQueryPageDTO);
+        return JsonPage.restPage(new PageInfo<>(queryResults));
+    }
+
+    /**
+     * 修改产品类别
+     *
+     * @param productCategoryUpdateDTO 产品类别数据对象
+     * @param files                    产品类别图片
+     */
+    @Override
+    public void update(ProductCategoryUpdateDTO productCategoryUpdateDTO, List<MultipartFile> files) {
+        log.info("开始处理【修改产品类别】的业务,参数为:{}, {}", productCategoryUpdateDTO, files);
+
+        //检查尝试修改的数据是否存在
+        Integer productCategoryId = productCategoryUpdateDTO.getId();
+        log.info("检查尝试修改的数据是否存在");
+        int count = productCategoryMapper.countById(productCategoryId);
+        if (count == 0) {
+            String message = "修改产品类别失败,尝试访问的数据已不存在";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
+        //产品类别DTO对象赋值给实体类
+        ProductCategory productCategory = new ProductCategory();
+        BeanUtils.copyProperties(productCategoryUpdateDTO, productCategory);
+        //修改产品类别
+        log.info("修改产品类别");
+        int rows = productCategoryMapper.updateById(productCategory);
+        if (rows != 1) {
+            String message = "修改产品类别失败,服务器忙请稍后再次尝试!";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
+        //先通过产品类别id查询出所有原来的图片文件
+        ArrayList<Integer> oldPictureIds = new ArrayList<>();
+        List<ProductCategoryPictureVO> productCategoryPictureVOS = assoProductCategoryPictureMapper.queryListByProductCategoryId(productCategoryId);
+        for (ProductCategoryPictureVO productCategoryPictureVO : productCategoryPictureVOS) {
+            Integer oldPictureId = productCategoryPictureVO.getId();
+            oldPictureIds.add(oldPictureId);
+        }
+        ArrayList<Integer> newOldPictureIds = new ArrayList<>();
+        List<ProductCategoryPictureDTO> productCategoryPictureDTOS = productCategoryUpdateDTO.getPictures();
+        System.out.println(productCategoryPictureDTOS);
+        for (ProductCategoryPictureDTO productCategoryPictureDTO : productCategoryPictureDTOS) {
+            Integer newOldPictureId = productCategoryPictureDTO.getId();
+            newOldPictureIds.add(newOldPictureId);
+        }
+        //集合去重,去重后留下的数据即为被删除的原有图片
+        oldPictureIds.removeAll(newOldPictureIds);
+
+        if (oldPictureIds.size() != 0) {
+            log.info("产品类别图片关联表删除原有图片");
+            assoProductCategoryPictureMapper.deleteByIds(oldPictureIds);
+        }
+
+        ArrayList<AssoProductCategoryPicture> assoProductCategoryPictures = new ArrayList<>();
+        if (files != null) {
+            for (MultipartFile file : files) {
+                UploadFileDTO fileDTO = fileUtils.uploadFile(file);
+                String picturePath = fileDTO.getPath();
+                AssoProductCategoryPicture assoProductCategoryPicture = new AssoProductCategoryPicture()
+                        .setProductCategoryId(productCategoryId)
+                        .setPicture(picturePath);
+                assoProductCategoryPictures.add(assoProductCategoryPicture);
+            }
+
+            //新数据入产品类别图片关联表
+            log.info("新数据入产品类别图片关联表");
+            assoProductCategoryPictureMapper.insertBatch(assoProductCategoryPictures);
+        }
+
+        log.info("修改产品类别完成");
+
+    }
+
+    @Override
+    public void delete(Integer id) {
+        log.info("开始处理【删除产品类别】的业务,参数为:{}", id);
+
+        //检查尝试删除的数据是否存在
+        log.info("检查尝试删除的数据是否存在");
+        int count = productCategoryMapper.countById(id);
+        if (count == 0) {
+            String message = "删除产品类别失败,尝试访问的数据不存在";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
+        //删除产品类别
+        log.info("删除产品类别");
+        int rows = productCategoryMapper.deleteById(id);
+        if (rows != 1) {
+            String message = "删除产品类别失败,服务器忙请稍后再试!";
+            log.info("{}", message);
+            throw new XiaoShiException(message);
+        }
+
+        //检查该产品类别是否有图片
+        count = assoProductCategoryPictureMapper.countByProductCategoryId(id);
+        if (count != 0) {
+            log.info("产品类别图片关联表删除数据");
+            rows = assoProductCategoryPictureMapper.deleteByProductCategoryId(id);
+            if (rows != count) {
+                String message = "删除产品类别失败,产品类别图片关联表删除数据失败,服务器忙请稍后再试!";
+                log.info("{}", message);
+                throw new XiaoShiException(message);
+            }
+        }
+
+        log.info("删除产品类别完成");
+
+    }
+
+}

+ 63 - 0
PAS/src/main/resources/mapper/AssoProductCategoryPictureMapper.xml

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="cn.cslg.pas.mapper.AssoProductCategoryPictureMapper">
+    <!--插入数据-->
+    <!--int insert(AssoProductCategoryPicture assoProductCategoryPicture);-->
+    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
+        insert into asso_product_category_picture (product_category_id, picture)
+        values (#{productCategoryId}, #{picture})
+    </insert>
+
+    <!--批量插入数据-->
+    <!--int insertBatch(List<AssoProductCategoryPicture> assoProductCategoryPictures);-->
+    <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
+        insert into asso_product_category_picture (product_category_id, picture)
+        values
+        <foreach collection="list" item="n" separator=",">
+            (#{n.productCategoryId}, #{n.picture})
+        </foreach>
+    </insert>
+
+    <!--根据产品类别productCategoryId删除数据-->
+    <!--int deleteByProductCategoryId(Integer productCategoryId);-->
+    <delete id="deleteByProductCategoryId">
+        delete
+        from asso_product_category_picture
+        where product_category_id = #{productCategoryId}
+    </delete>
+
+    <!--根据id批量删除数据-->
+    <!--int deleteByIds(List<Integer> ids);-->
+    <delete id="deleteByIds">
+        delete
+        from asso_product_category_picture
+        where id in (
+        <foreach collection="list" item="n" separator=",">
+            #{n}
+        </foreach>
+        )
+    </delete>
+
+    <!--根据产品类别id查询数据-->
+    <!--List<ProductCategoryPictureVO> queryListByProductCategoryId(Integer productCategoryId);-->
+    <select id="queryListByProductCategoryId" resultMap="getStandardByProductCategoryIdMap">
+        select id, picture
+        from asso_product_category_picture
+        where product_category_id = #{productCategoryId}
+    </select>
+
+    <resultMap id="getStandardByProductCategoryIdMap" type="cn.cslg.pas.common.model.vo.ProductCategoryPictureVO">
+        <id column="id" property="id"/>
+        <result column="picture" property="picture"/>
+    </resultMap>
+
+    <!--根据产品类别id统计数量-->
+    <!--int countByProductCategoryId(Integer productCategoryId);-->
+    <select id="countByProductCategoryId" resultType="int">
+        select count(*)
+        from asso_product_category_picture
+        where product_category_id = #{productCategoryId}
+    </select>
+
+</mapper>

+ 97 - 0
PAS/src/main/resources/mapper/ProductCategoryMapper.xml

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="cn.cslg.pas.mapper.ProductCategoryMapper">
+    <!--插入数据-->
+    <!--int insert(ProductCategory productCategory);-->
+    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
+        insert into product_category (product_category_name, remark, license_rate, create_person_id, create_person_name)
+        values (#{productCategoryName}, #{remark}, #{licenseRate}, #{createPersonId}, #{createPersonName})
+    </insert>
+
+    <!--根据id删除数据-->
+    <!--int deleteById(Integer id);-->
+    <delete id="deleteById">
+        delete
+        from product_category
+        where id = #{id}
+    </delete>
+
+    <!--根据id修改数据-->
+    <!--int updateById(ProductCategory productCategory);-->
+    <update id="updateById">
+        update product_category
+        <set>
+            <if test="productCategoryName != null">
+                product_category_name = #{productCategoryName},
+            </if>
+            <if test="remark != null">
+                remark = #{productCategoryName},
+            </if>
+            <if test="licenseRate != null">
+                license_rate = #{licenseRate},
+            </if>
+        </set>
+        where id = #{id}
+    </update>
+
+    <!--根据产品类别名称统计数量-->
+    <!--int countByProductCategoryName(String productCategoryName);-->
+    <select id="countByProductCategoryName" resultType="int">
+        select count(*)
+        from product_category
+        where product_category_name = #{productCategoryName}
+    </select>
+
+    <!--根据id统计数量-->
+    <!--int countById(Integer id);-->
+    <select id="countById" resultType="int">
+        select count(*)
+        from product_category
+        where id = #{id}
+    </select>
+
+    <!--分页查询产品类别和图片-->
+    <!--List<ProductCategoryVO> query(ProductCategoryQueryPageDTO productCategoryQueryPageDTO);-->
+    <select id="query" resultMap="queryMap">
+        select
+        id pc_id,
+        product_category_name,
+        remark,
+        license_rate,
+        create_person_name
+        from product_category
+        <where>
+            <if test="productCategoryName != null">
+                and product_category_name like '%${productCategoryName}%'
+            </if>
+            <if test="createPersonName != null">
+                and create_person_name like '%${createPersonName}%'
+            </if>
+        </where>
+        order by pc_id
+    </select>
+
+    <resultMap id="queryMap" type="cn.cslg.pas.common.model.vo.ProductCategoryVO">
+        <id column="pc_id" property="id"/>
+        <result column="product_category_name" property="productCategoryName"/>
+        <result column="remark" property="remark"/>
+        <result column="license_rate" property="licenseRate"/>
+        <result column="create_person_name" property="createPersonName"/>
+        <collection property="pictures" ofType="cn.cslg.pas.common.model.vo.ProductCategoryPictureVO"
+                    select="query2" column="pc_id">
+        </collection>
+    </resultMap>
+
+    <select id="query2" resultMap="queryMap2">
+        select id, picture
+        from asso_product_category_picture
+        where product_category_id = #{pc_id}
+    </select>
+
+    <resultMap id="queryMap2" type="cn.cslg.pas.common.model.vo.ProductCategoryPictureVO">
+        <id column="id" property="id"/>
+        <result column="picture" property="picture"/>
+    </resultMap>
+
+</mapper>