Browse Source

SKU(商品管理)和物料管理查询、添加、修改、导入接口添加以及修改。

jiao.zhou 3 years ago
parent
commit
2cee309105
20 changed files with 454 additions and 31 deletions
  1. 3 0
      abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/excel/preperties/MaterialProperty.java
  2. 24 0
      abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/excel/preperties/SkuProperty.java
  3. 31 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/console/SkuController.java
  4. 17 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/mapper/BaseSkuMapper.java
  5. 47 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/BaseSkuVO.java
  6. 4 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/MaterialVO.java
  7. 4 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/AddMaterialReq.java
  8. 3 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ListMaterialReq.java
  9. 16 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ListSkuForSelectReq.java
  10. 8 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ListSkuReq.java
  11. 2 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/UpdateMaterialReq.java
  12. 3 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/GetMaterialRes.java
  13. 3 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListMaterialRes.java
  14. 44 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListSkuForSelectRes.java
  15. 7 4
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListSkuRes.java
  16. 22 0
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/SkuService.java
  17. 31 8
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/MaterialServiceImpl.java
  18. 127 17
      abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/SkuServiceImpl.java
  19. 6 2
      abi-cloud-qr-platform-server/src/main/resources/dao/mapper/BaseMaterialMapper.xml
  20. 52 0
      abi-cloud-qr-platform-server/src/main/resources/dao/mapper/BaseSkuMapper.xml

+ 3 - 0
abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/excel/preperties/MaterialProperty.java

@@ -22,6 +22,9 @@ public class MaterialProperty implements AbstractExcelProperty {
     @ExcelHeadAlias(value = "物料名称(必填)")
     private String materialName;
 
+    @ExcelHeadAlias(value = "SKU名称 (必填)")
+    private String skuName;
+
     @ExcelHeadAlias(value = "描述")
     private String description;
 

+ 24 - 0
abi-cloud-qr-platform-common/src/main/java/com/abi/task/common/excel/preperties/SkuProperty.java

@@ -0,0 +1,24 @@
+package com.abi.task.common.excel.preperties;
+
+
+import com.abi.task.common.excel.common.AbstractExcelProperty;
+import com.abi.task.common.excel.common.ExcelHeadAlias;
+import lombok.Data;
+
+/**
+ * SKU模板
+ * @author Andy.Tan
+ */
+@Data
+public class SkuProperty implements AbstractExcelProperty {
+
+    @ExcelHeadAlias(value = "商品编号(即页面上手输的skuid)(必填)")
+    private String skuCode;
+
+    @ExcelHeadAlias(value = "sku名称(必填)")
+    private String skuName;
+
+    @ExcelHeadAlias(value = "子品牌名称(必填)")
+    private String subBrandName;
+
+}

+ 31 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/controller/console/SkuController.java

@@ -1,16 +1,21 @@
 package com.abi.qms.platform.controller.console;
 
 import com.abi.qms.platform.dto.req.*;
+import com.abi.qms.platform.dto.res.ExcelImportRes;
 import com.abi.qms.platform.dto.res.GetSkuRes;
+import com.abi.qms.platform.dto.res.ListSkuForSelectRes;
 import com.abi.qms.platform.dto.res.ListSkuRes;
 import com.abi.qms.platform.service.SkuService;
 import com.abi.task.common.api.base.BaseResponse;
+import com.abi.task.common.excel.ExcelInputFactory;
+import com.abi.task.common.excel.preperties.SkuProperty;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
@@ -86,6 +91,32 @@ public class SkuController {
         return BaseResponse.create();
     }
 
+    @ApiOperation("下拉选SKU列表")
+    @GetMapping("listSkuForSelect")
+    public BaseResponse<ListSkuForSelectRes> listSkuForSelect(@Validated ListSkuForSelectReq listSkuForSelectReq) throws Exception{
+        //下拉选择物料列表
+        ListSkuForSelectRes  result = skuService.listSkuForSelect(listSkuForSelectReq);
+        //包装出参
+        return BaseResponse.create(result);
+    }
+
+    @ResponseBody
+    @ApiOperation(value = "导出模板")
+    @GetMapping("downloadExcelModel")
+    public void downloadExcelModel(HttpServletResponse response) throws Exception {
+        ExcelInputFactory.downloadExcelModel("SKU模板", response, SkuProperty.class);
+    }
+
+    @ApiOperation("excel批量导入")
+    @PostMapping("skuExcelImport")
+    public BaseResponse<ExcelImportRes> skuExcelImport(@RequestParam("file") MultipartFile file) throws Exception {
+        List<SkuProperty> skuPropertyList = ExcelInputFactory.getExcelPojoList(file, SkuProperty.class);
+        //excel批量导入
+        ExcelImportRes result = skuService.skulExcelImport(skuPropertyList);
+        //包装出参
+        return BaseResponse.create(result);
+    }
+
 }
 
 

+ 17 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/mapper/BaseSkuMapper.java

@@ -1,7 +1,11 @@
 package com.abi.qms.platform.dao.mapper;
 
 import com.abi.qms.platform.dao.entity.BaseSku;
+import com.abi.qms.platform.dao.vo.result.BaseSkuVO;
+import com.abi.qms.platform.dto.req.ListSkuReq;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -12,4 +16,17 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface BaseSkuMapper extends BaseMapper<BaseSku> {
 
+    /**
+     * 分页查询商品信息
+     */
+    IPage<BaseSkuVO> listSku(IPage page, @Param(value = "param") ListSkuReq param);
+
+    /**
+     * 根据ID查询详情信息
+     *
+     * @param id
+     * @return
+     */
+    BaseSkuVO selectSkuById(@Param("id") Long id);
+
 }

+ 47 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/BaseSkuVO.java

@@ -0,0 +1,47 @@
+package com.abi.qms.platform.dao.vo.result;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * SKU商品查询出参
+ * @author KaiXiangGuo
+ */
+@Data
+@ApiModel
+public class BaseSkuVO {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+	@ApiModelProperty(value = "商品编号")
+    private String skuCode;
+
+	@ApiModelProperty(value = "sku名称")
+    private String skuName;
+
+    @ApiModelProperty(value = "品牌code")
+    private String brandCode;
+
+    @ApiModelProperty(value = "子品牌code")
+    private String subBrandCode;
+
+    @ApiModelProperty(value = "品牌名称")
+    private String brandName;
+
+    @ApiModelProperty(value = "子品牌名称")
+    private String subBrandName;
+
+    @ApiModelProperty(value = "是否有效 0-无效 1-有效")
+    private Integer valid;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+	@ApiModelProperty(value = "修改时间")
+    private LocalDateTime updateTime;
+
+}

+ 4 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dao/vo/result/MaterialVO.java

@@ -39,4 +39,8 @@ public class MaterialVO {
     @Schema(name = "修改时间")
     private LocalDateTime updateTime;
 
+    @Schema(name = "SKU名称")
+    private String skuName;
+
+
 }

+ 4 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/AddMaterialReq.java

@@ -30,4 +30,8 @@ public class AddMaterialReq implements Serializable {
     @Schema(name = "描述")
     private String description;
 
+    @NotNull
+    @Schema(name = "SKU商品Id")
+    private Long skuId;
+
 }

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ListMaterialReq.java

@@ -26,4 +26,7 @@ public class ListMaterialReq extends PageReq implements Serializable {
     @Schema(name = "是否有效 0-无效 1-有效")
     private Integer valid;
 
+    @Schema(name = "SKU商品名称")
+    private String skuName;
+
 }

+ 16 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ListSkuForSelectReq.java

@@ -0,0 +1,16 @@
+package com.abi.qms.platform.dto.req;
+
+import com.abi.task.common.api.base.PageReq;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author:Andy.Tan
+ * @Description: 下拉选择SKU列表入参
+ */
+@Data
+@Schema
+public class ListSkuForSelectReq implements Serializable {
+}

+ 8 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/ListSkuReq.java

@@ -13,4 +13,12 @@ import java.io.Serializable;
 @Schema
 public class ListSkuReq extends PageReq implements Serializable {
 
+    @Schema(name = "sku名称")
+    private String skuName;
+
+    @Schema(name = "品牌code")
+    private String brandCode;
+
+    @Schema(name = "是否有效 0-无效 1-有效")
+    private Integer valid;
 }

+ 2 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/req/UpdateMaterialReq.java

@@ -30,5 +30,7 @@ public class UpdateMaterialReq implements Serializable {
     @Schema(name = "是否有效 0-无效 1-有效")
     private Integer valid;
 
+    @Schema(name = "SKU商品Id")
+    private Long skuId;
 
 }

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/GetMaterialRes.java

@@ -35,6 +35,9 @@ public class GetMaterialRes implements Serializable {
     @Schema(name = "是否有效 0-无效 1-有效")
     private Integer valid;
 
+    @Schema(name = "SKU商品Id")
+    private Long skuId;
+
     @ApiModelProperty(value = "创建时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;

+ 3 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListMaterialRes.java

@@ -61,5 +61,8 @@ public class ListMaterialRes extends PageResp implements Serializable {
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
         private LocalDateTime updateTime;
 
+        @Schema(name = "SKU商品名称")
+        private String skuName;
+
     }
 }

+ 44 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListSkuForSelectRes.java

@@ -0,0 +1,44 @@
+package com.abi.qms.platform.dto.res;
+
+import com.abi.task.common.api.base.PageResp;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author:Andy.Tan
+ * @Description: 分页查询商品出参
+ */
+@Data
+@Schema
+public class ListSkuForSelectRes implements Serializable {
+
+    @Schema(name = "商品列表")
+    private List<SkuBean> skuBeanList;
+
+    /**
+     * 商品bean
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ToString
+    @ApiModel(value = "ListSkuForSelectRes_SkuBean")
+    public static class SkuBean implements Serializable {
+
+        @Schema(name = "id")
+        private Long id;
+
+        @Schema(name = "sku名称")
+        private String skuName;
+
+    }
+}

+ 7 - 4
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/dto/res/ListSkuRes.java

@@ -43,11 +43,14 @@ public class ListSkuRes extends PageResp implements Serializable {
         @Schema(name = "sku名称")
         private String skuName;
 
-        @Schema(name = "品牌code")
-        private String brandCode;
+        @Schema(name = "是否有效 0-无效 1-有效")
+        private Integer valid;
 
-        @Schema(name = "子品牌code")
-        private String subBrandCode;
+        @Schema(name = "品牌名称")
+        private String brandName;
+
+        @Schema(name = "子品牌名称")
+        private String subBrandName;
 
         @Schema(name = "创建时间")
         @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

+ 22 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/SkuService.java

@@ -2,8 +2,13 @@ package com.abi.qms.platform.service;
 
 
 import com.abi.qms.platform.dto.req.*;
+import com.abi.qms.platform.dto.res.ExcelImportRes;
 import com.abi.qms.platform.dto.res.GetSkuRes;
+import com.abi.qms.platform.dto.res.ListSkuForSelectRes;
 import com.abi.qms.platform.dto.res.ListSkuRes;
+import com.abi.task.common.excel.preperties.SkuProperty;
+
+import java.util.List;
 
 /**
  * <p>
@@ -54,4 +59,21 @@ public interface SkuService{
      */
     void disableSku(DisableSkuReq disableSkuReq);
 
+
+    /**
+     * 其他页面下拉选择SKU
+     * @param listSkuForSelectReq
+     * @return
+     * @throws Exception
+     */
+    ListSkuForSelectRes listSkuForSelect(ListSkuForSelectReq listSkuForSelectReq) throws Exception;
+
+    /**
+     * 批量导入SKU
+     * @param skuPropertyList
+     * @return
+     * @throws Exception
+     */
+    ExcelImportRes skulExcelImport(List<SkuProperty> skuPropertyList) throws Exception;
+
 }

+ 31 - 8
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/MaterialServiceImpl.java

@@ -1,11 +1,13 @@
 package com.abi.qms.platform.service.impl;
 
 import com.abi.qms.platform.dao.entity.BaseMaterial;
+import com.abi.qms.platform.dao.entity.BaseSku;
 import com.abi.qms.platform.dao.enums.FactoryTypeEnum;
 import com.abi.qms.platform.dao.enums.MaterialTypeEnum;
 import com.abi.qms.platform.dao.enums.ValidEnum;
 import com.abi.qms.platform.dao.mapper.BaseBrandMapper;
 import com.abi.qms.platform.dao.mapper.BaseMaterialMapper;
+import com.abi.qms.platform.dao.mapper.BaseSkuMapper;
 import com.abi.qms.platform.dao.vo.result.MaterialVO;
 import com.abi.qms.platform.dto.req.*;
 import com.abi.qms.platform.dto.res.ExcelImportRes;
@@ -21,13 +23,16 @@ import com.abi.task.common.excel.preperties.MaterialProperty;
 import com.abi.task.common.utils.PojoConverterUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.fasterxml.jackson.databind.util.JSONPObject;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -43,7 +48,7 @@ public class MaterialServiceImpl implements MaterialService {
     private BaseMaterialMapper baseMaterialMapper;
 
     @Autowired
-    private BaseBrandMapper baseBrandMapper;
+    private BaseSkuMapper baseSkuMapper;
 
     /**
      * 新增物料
@@ -72,6 +77,7 @@ public class MaterialServiceImpl implements MaterialService {
         material.setMaterialName(req.getMaterialName());
         material.setMaterialType(req.getMaterialType());
         material.setDescription(req.getDescription());
+        material.setSkuId(req.getSkuId());
         baseMaterialMapper.insert(material);
 
     }
@@ -91,6 +97,7 @@ public class MaterialServiceImpl implements MaterialService {
         material.setMaterialType(req.getMaterialType());
         material.setDescription(req.getDescription());
         material.setValid(req.getValid());
+        material.setSkuId(req.getSkuId());
         baseMaterialMapper.updateById(material);
 
     }
@@ -214,17 +221,19 @@ public class MaterialServiceImpl implements MaterialService {
             MaterialProperty materialProperty = materialPropertyList.get(i);
             try {
                 //1-校验必填与枚举
-                String errorMessage = checkMaterialProperty(materialProperty);
-                if (StringUtils.isNotBlank(errorMessage)) {
-                    throw new BusinessException(ErrorCodeEnum.ERROR_PARAM.getCode(), errorMessage);
+                Map<String, Object> returnMap = checkMaterialProperty(materialProperty);
+                String errotMessage = String.valueOf(returnMap.get("errorMessage"));
+                BaseSku baseSku = (BaseSku) returnMap.get("baseSku");
+                if (StringUtils.isNotBlank(errotMessage) || null == baseSku) {
+                    throw new BusinessException(ErrorCodeEnum.ERROR_PARAM.getCode(), errotMessage);
                 }
-
                 //2-调用业务代码新增
                 AddMaterialReq req = new AddMaterialReq();
                 req.setMaterialCode(materialProperty.getMaterialCode());
                 req.setMaterialName(materialProperty.getMaterialName());
                 req.setMaterialType(MaterialTypeEnum.getCode(materialProperty.getMaterialType()));
                 req.setDescription(materialProperty.getDescription());
+                req.setSkuId(baseSku.getId());
 
                 addMaterial(req);
             } catch (BusinessException e) {
@@ -241,7 +250,8 @@ public class MaterialServiceImpl implements MaterialService {
         return res;
     }
 
-    private String checkMaterialProperty(MaterialProperty materialProperty) {
+    private Map<String,Object> checkMaterialProperty(MaterialProperty materialProperty) {
+        Map<String,Object> returnMap = new HashMap<>();
         StringBuffer errorMessage = new StringBuffer();
         //逐个字段校验
         if (StringUtils.isBlank(materialProperty.getMaterialType())) {
@@ -260,8 +270,21 @@ public class MaterialServiceImpl implements MaterialService {
         if (StringUtils.isBlank(materialProperty.getDescription())) {
             errorMessage.append("描述").append("为空,");
         }
-
-        return errorMessage.toString();
+        if (StringUtils.isBlank(materialProperty.getSkuName())){
+            errorMessage.append("SKU名称").append("为空,");
+        }else {
+            //查询SKU是否存在
+            QueryWrapper<BaseSku> skuQw = new QueryWrapper<>();
+            skuQw.eq("sku_name",materialProperty.getSkuName());
+            BaseSku baseSku = baseSkuMapper.selectOne(skuQw);
+            //SKU不存在
+            if (null == baseSku){
+                errorMessage.append("该SKU").append("不存在");
+            }
+            returnMap.put("baseSku",baseSku);
+        }
+        returnMap.put("errorMessage",errorMessage.toString());
+        return returnMap;
     }
 
 

+ 127 - 17
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/SkuServiceImpl.java

@@ -1,23 +1,34 @@
 package com.abi.qms.platform.service.impl;
 
+import com.abi.qms.platform.dao.entity.BaseBrand;
 import com.abi.qms.platform.dao.entity.BaseSku;
 import com.abi.qms.platform.dao.enums.ValidEnum;
+import com.abi.qms.platform.dao.mapper.BaseBrandMapper;
 import com.abi.qms.platform.dao.mapper.BaseSkuMapper;
+import com.abi.qms.platform.dao.vo.result.BaseSkuVO;
 import com.abi.qms.platform.dto.req.*;
+import com.abi.qms.platform.dto.res.ExcelImportRes;
 import com.abi.qms.platform.dto.res.GetSkuRes;
+import com.abi.qms.platform.dto.res.ListSkuForSelectRes;
 import com.abi.qms.platform.dto.res.ListSkuRes;
 import com.abi.qms.platform.infrastructure.util.AssertUtil;
 import com.abi.qms.platform.infrastructure.util.PageUtil;
 import com.abi.qms.platform.service.SkuService;
+import com.abi.task.common.api.exception.BusinessException;
+import com.abi.task.common.api.exception.ErrorCodeEnum;
+import com.abi.task.common.excel.preperties.SkuProperty;
 import com.abi.task.common.utils.PojoConverterUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.apache.commons.lang.StringUtils;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -32,6 +43,8 @@ public class SkuServiceImpl implements SkuService {
     @Autowired
     private BaseSkuMapper baseSkuMapper;
 
+    @Autowired
+    private BaseBrandMapper baseBrandMapper;
 
     /**
      * 新增商品
@@ -40,6 +53,20 @@ public class SkuServiceImpl implements SkuService {
     public void addSku(AddSkuReq req){
         //校验入参
         //TODO
+        //查询是否存在商品编号
+        QueryWrapper<BaseSku> skuQw = new QueryWrapper<>();
+        skuQw.eq("sku_code",req.getSkuCode());
+        List<BaseSku> sqkList = baseSkuMapper.selectList(skuQw);
+        if(CollectionUtils.isNotEmpty(sqkList)){
+            throw new BusinessException("商品编号"+req.getSkuCode()+"已存在,请勿重复创建");
+        }
+        //查询是否存在商品名称
+        skuQw = new QueryWrapper<>();
+        skuQw.eq("sku_name",req.getSkuName());
+        sqkList = baseSkuMapper.selectList(skuQw);
+        if(CollectionUtils.isNotEmpty(sqkList)){
+            throw new BusinessException("商品名称"+req.getSkuName()+"已存在,请勿重复创建");
+        }
 
         //1-新增
         BaseSku sku = new BaseSku();
@@ -76,22 +103,15 @@ public class SkuServiceImpl implements SkuService {
     @Override
     public ListSkuRes listSku(ListSkuReq req){
 
-        //1-拼接条件
-        QueryWrapper<BaseSku> skuQw = new QueryWrapper<>();
-        //skuQw.like(StringUtils.isNotBlank(req.getXxx()), "xxx_xxx", "%" + req.getXxx() + "%");
-        //skuQw.eq(req.getXxx2() != null, "xxx_xxx2", req.getXxx2());
+        // 分页查询
+        IPage<BaseSkuVO> iPage = baseSkuMapper.listSku(PageUtil.createPage(req), req);
+        List<BaseSkuVO> qrFormatList = iPage.getRecords();
 
-        //2-分页查询
-        IPage<BaseSku> iPage = baseSkuMapper.selectPage(PageUtil.createPage(req), skuQw);
-        List<BaseSku> skuList = iPage.getRecords();
-
-        //封装出参
+        // 封装出参、放入分页信息
         ListSkuRes res = new ListSkuRes();
-        //放入分页信息
         PageUtil.copyPageInfo(res, iPage);
-        //放入出参列表
-        List<ListSkuRes.SkuBean> skuBeanList = PojoConverterUtils.copyList(skuList, ListSkuRes.SkuBean.class);
-        res.setSkuBeanList(skuBeanList);
+        List<ListSkuRes.SkuBean> qrFormatBeanList = PojoConverterUtils.copyList(qrFormatList, ListSkuRes.SkuBean.class);
+        res.setSkuBeanList(qrFormatBeanList);
 
         return res;
 
@@ -104,11 +124,11 @@ public class SkuServiceImpl implements SkuService {
     public GetSkuRes getSku(GetSkuReq req){
 
         //1-查询商品对象
-        BaseSku sku = baseSkuMapper.selectById(req.getId());
-        AssertUtil.isNull(sku, "商品不存在");
+        BaseSkuVO baseSkuVO = baseSkuMapper.selectSkuById(req.getId());
+        AssertUtil.isNull(baseSkuVO, "商品不存在");
 
         //转化出参
-        GetSkuRes res = PojoConverterUtils.copy(sku, GetSkuRes.class);
+        GetSkuRes res = PojoConverterUtils.copy(baseSkuVO, GetSkuRes.class);
 
         return res;
 
@@ -160,4 +180,94 @@ public class SkuServiceImpl implements SkuService {
         }
     }
 
+    /**
+     * 其他页面下拉选择SKU
+     * @param listSkuForSelectReq
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ListSkuForSelectRes listSkuForSelect(ListSkuForSelectReq listSkuForSelectReq) throws Exception {
+        //1-查询所有有效的物料
+        QueryWrapper<BaseSku> skuQw = new QueryWrapper<>();
+        skuQw.eq("valid",1);
+        skuQw.eq("is_delete",0);
+        List<BaseSku> baseSkuList = baseSkuMapper.selectList(skuQw);
+
+        //构造出参
+        List<ListSkuForSelectRes.SkuBean> skuBeanList = PojoConverterUtils.copyList(baseSkuList, ListSkuForSelectRes.SkuBean.class);
+        ListSkuForSelectRes res = new ListSkuForSelectRes();
+        res.setSkuBeanList(skuBeanList);
+
+        return res;
+    }
+
+    /**
+     * 批量导入SKU
+     * @param skuPropertiesList
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ExcelImportRes skulExcelImport(List<SkuProperty> skuPropertiesList) throws Exception {
+        List<ExcelImportRes.FailBean> failList = new ArrayList<>();
+
+        //1-循环导入,有异常则捕获
+        for (int i = 0; i < skuPropertiesList.size(); i++) {
+            SkuProperty skuProperty = skuPropertiesList.get(i);
+            try {
+                //1-校验必填与枚举
+                Map<String, Object> returnMap = checkSkuProperty(skuProperty);
+                String errotMessage = String.valueOf(returnMap.get("errorMessage"));
+                BaseBrand barseBrand = (BaseBrand) returnMap.get("baseBrand");
+                if (org.apache.commons.lang3.StringUtils.isNotBlank(errotMessage) || null == barseBrand) {
+                    throw new BusinessException(ErrorCodeEnum.ERROR_PARAM.getCode(), errotMessage);
+                }
+                AddSkuReq req = new AddSkuReq();
+                req.setSkuCode(skuProperty.getSkuCode());
+                req.setSkuName(skuProperty.getSkuName());
+                req.setBrandCode(barseBrand.getParentBrandCode());
+                req.setSubBrandCode(barseBrand.getBrandCode());
+
+                addSku(req);
+            } catch (BusinessException e) {
+                failList.add(new ExcelImportRes.FailBean(i + 2, e.getMessage()));
+            }
+        }
+
+        //2-返回导入结果
+        ExcelImportRes res = new ExcelImportRes();
+        res.setFailedCount(failList.size());
+        res.setSuccessCount(skuPropertiesList.size() - res.getFailedCount());
+        res.setFailBeanList(failList);
+
+        return res;
+    }
+
+    private Map<String,Object> checkSkuProperty(SkuProperty skuProperty) {
+        StringBuffer errorMessage = new StringBuffer();
+        Map<String,Object> returnMap = new HashMap<String,Object>();
+        //逐个字段校验
+        if (org.apache.commons.lang3.StringUtils.isBlank(skuProperty.getSkuCode())) {
+            errorMessage.append("SKUID").append("为空,");
+        }
+        if (org.apache.commons.lang3.StringUtils.isBlank(skuProperty.getSkuName())) {
+            errorMessage.append("SKU名称").append("为空,");
+        }
+        if (org.apache.commons.lang3.StringUtils.isBlank(skuProperty.getSubBrandName())) {
+            errorMessage.append("所属子品牌").append("为空,");
+        }else {
+            QueryWrapper<BaseBrand> brandQw = new QueryWrapper<>();
+            brandQw.eq("brand_name",skuProperty.getSubBrandName());
+            brandQw.eq("brand_level",2);
+            BaseBrand baseBrand = baseBrandMapper.selectOne(brandQw);
+            if (null == baseBrand){
+                errorMessage.append("该子品牌").append("不存在");
+            }
+            returnMap.put("baseBrand",baseBrand);
+        }
+        returnMap.put("errorMessage",errorMessage.toString());
+        return returnMap;
+    }
+
 }

+ 6 - 2
abi-cloud-qr-platform-server/src/main/resources/dao/mapper/BaseMaterialMapper.xml

@@ -25,10 +25,11 @@
 
     <select id="listMaterial" resultType="com.abi.qms.platform.dao.vo.result.MaterialVO">
         select
-            m.id, m.material_code, m.material_name, m.material_type, m.description,
-            m.valid,m.create_time,m.update_time
+        m.id, m.material_code, m.material_name, m.material_type, m.description,
+        m.valid,m.create_time,m.update_time,bs.sku_name
 
         from base_material m
+        left join base_sku bs on m.sku_id = bs.id
 
         <where>
             <if test="req.materialCode!=null and req.materialCode!=''">
@@ -40,6 +41,9 @@
             <if test="req.materialType!=null and req.materialType!=''">
                 and m.material_type = #{req.materialType}
             </if>
+            <if test="req.skuName != null and req.skuName != ''">
+                AND bs.sku_name LIKE CONCAT('%',#{req.skuName},'%')
+            </if>
             <if test="req.valid!=null and req.valid!=''">
                 and m.valid = #{req.valid}
             </if>

+ 52 - 0
abi-cloud-qr-platform-server/src/main/resources/dao/mapper/BaseSkuMapper.xml

@@ -22,4 +22,56 @@
         id, sku_code, sku_name, brand_code, sub_brand_code, valid, create_time, create_by, update_time, update_by, is_delete
     </sql>
 
+    <select id="listSku" resultType="com.abi.qms.platform.dao.vo.result.BaseSkuVO">
+        SELECT
+        bs.id,
+        bs.sku_code,
+        bs.sku_name,
+        bs.brand_code,
+        bs.sub_brand_code,
+        bs.create_time,
+        bs.create_by,
+        bs.update_time,
+        bs.update_by,
+        bs.valid,
+        bb.brand_name as brand_name,
+        bb1.brand_name as sub_brand_name
+        FROM `base_sku` bs
+        LEFT JOIN base_brand bb on bs.brand_code = bb.brand_code
+        LEFT JOIN base_brand bb1 on bs.sub_brand_code = bb1.brand_code
+        <where>
+            bs.is_delete = 0
+            <if test="param.skuName != null and param.skuName != ''">
+                AND bs.sku_name LIKE CONCAT('%',#{param.skuName},'%')
+            </if>
+            <if test="param.brandCode != null">
+                AND bs.brand_code = #{param.brandCode}
+            </if>
+            <if test="param.valid != null">
+                AND bs.valid = #{param.valid}
+            </if>
+        </where>
+        order by bs.update_time desc
+    </select>
+
+    <select id="selectSkuById" resultType="com.abi.qms.platform.dao.vo.result.BaseSkuVO">
+        SELECT
+        bs.id,
+        bs.sku_code,
+        bs.sku_name,
+        bs.brand_code,
+        bs.sub_brand_code,
+        bs.create_time,
+        bs.create_by,
+        bs.update_time,
+        bs.update_by,
+        bs.valid,
+        bb.brand_name as brand_name,
+        bb1.brand_name as sub_brand_name
+        FROM `base_sku` bs
+        LEFT JOIN base_brand bb on bs.brand_code = bb.brand_code
+        LEFT JOIN base_brand bb1 on bs.sub_brand_code = bb1.brand_code
+        where bs.id = #{id} and bs.is_delete = 0
+    </select>
+
 </mapper>