浏览代码

产品管理相关

yzc 2 年之前
父节点
当前提交
bed05f93c5
共有 20 个文件被更改,包括 644 次插入83 次删除
  1. 5 0
      pom.xml
  2. 5 0
      sckw-common/sckw-common-core/pom.xml
  3. 36 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/config/MybatisPlusConfig.java
  4. 3 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/vo/TableStatisticRes.java
  5. 2 1
      sckw-common/sckw-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  6. 6 11
      sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java
  7. 43 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/enums/GoodsStatusEnum.java
  8. 2 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/GoodsListExport.java
  9. 1 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/AddGoodsParam.java
  10. 25 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/ExportGoodsListParam.java
  11. 1 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/GoodsImages.java
  12. 3 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/GoodsListParam.java
  13. 3 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/SelectGoodsListParam.java
  14. 108 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/GoodsList.java
  15. 36 3
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsAddressService.java
  16. 16 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsAttributeService.java
  17. 16 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsImageService.java
  18. 32 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsPriceRangeService.java
  19. 300 62
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  20. 1 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsSkuService.java

+ 5 - 0
pom.xml

@@ -244,6 +244,11 @@
                 <artifactId>mybatis-plus-annotation</artifactId>
                 <version>${mybatis-plus.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-extension</artifactId>
+                <version>${mybatis-plus.version}</version>
+            </dependency>
             <!--多数据源-->
             <dependency>
                 <groupId>com.baomidou</groupId>

+ 5 - 0
sckw-common/sckw-common-core/pom.xml

@@ -165,5 +165,10 @@
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-annotation</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-extension</artifactId>
+        </dependency>
+
     </dependencies>
 </project>

+ 36 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/config/MybatisPlusConfig.java

@@ -0,0 +1,36 @@
+package com.sckw.core.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Collections;
+
+/**
+ * @desc: MybatisPlus配置
+ * @author: yzc
+ * @date: 2023-07-07 8:46
+ */
+@Configuration
+public class MybatisPlusConfig {
+    @Bean
+    public PaginationInnerInterceptor paginationInnerInterceptor() {
+        PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
+        // 设置最大单页限制数量,默认 500 条,-1 不受限制
+        paginationInterceptor.setMaxLimit(-1L);
+        paginationInterceptor.setDbType(DbType.MYSQL);
+        // 开启 count 的 join 优化,只针对部分 left join
+        paginationInterceptor.setOptimizeJoin(true);
+        return paginationInterceptor;
+    }
+
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
+        mybatisPlusInterceptor.setInterceptors(Collections.singletonList(paginationInnerInterceptor()));
+        return mybatisPlusInterceptor;
+    }
+}
+

+ 3 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/vo/TableStatisticRes.java

@@ -5,6 +5,8 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.util.List;
+
 /**
  * @desc: 表格统计对象
  * @author: yzc
@@ -19,7 +21,7 @@ public class TableStatisticRes {
     /**
      * 表格顶部对象
      */
-    private TableTop tableTop;
+    private List<TableTop> tableTops;
 
     /**
      * 表格底部对象

+ 2 - 1
sckw-common/sckw-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -3,4 +3,5 @@ com.sckw.core.exception.GlobalSystemExceptionHandler
 com.sckw.core.web.config.CustomConfig
 com.sckw.core.filter.LoginFilter
 com.sckw.core.web.config.WebMvcConfig
-#com.sckw.core.filter.ExceptionFilterConfig
+com.sckw.core.filter.ExceptionFilterConfig
+com.sckw.core.config.MybatisPlusConfig

+ 6 - 11
sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java

@@ -1,15 +1,13 @@
 package com.sckw.product.controller;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
-import com.sckw.core.model.vo.TableStatisticRes;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.product.model.vo.req.*;
 import com.sckw.product.model.vo.res.BuildingMaterialsMarketList;
-import com.sckw.product.model.vo.res.GoodsDetail;
-import com.sckw.product.model.vo.res.GoodsDropList;
 import com.sckw.product.model.vo.res.GoodsList;
 import com.sckw.product.service.KwpGoodsService;
 import lombok.RequiredArgsConstructor;
@@ -66,8 +64,7 @@ public class KwpGoodsController {
      */
     @GetMapping("/detail")
     public HttpResult detail(@RequestParam Long id) {
-        GoodsDetail goodsDetail = kwpGoodsService.detail(id);
-        return HttpResult.ok(goodsDetail);
+        return HttpResult.ok(kwpGoodsService.detail(id));
     }
 
     /**
@@ -94,7 +91,7 @@ public class KwpGoodsController {
     @PostMapping(value = "/select", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult select(@RequestBody SelectGoodsListParam params) {
         PageHelper.startPage(params.getPage(), params.getPageSize());
-        List<GoodsList> list = kwpGoodsService.select(params);
+        List<GoodsList> list = kwpGoodsService.select(BeanUtil.copyProperties(params, ExportGoodsListParam.class));
         PageResult result = PageHelperUtil.getPageResult(new PageInfo<>(list));
         return HttpResult.ok(result);
     }
@@ -108,8 +105,7 @@ public class KwpGoodsController {
      */
     @PostMapping(value = "/statistic", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult statistic(@RequestBody GoodsListParam params) {
-        TableStatisticRes tableStatisticRes = kwpGoodsService.statistic(params);
-        return HttpResult.ok(tableStatisticRes);
+        return HttpResult.ok(kwpGoodsService.statistic(params));
     }
 
     /**
@@ -120,7 +116,7 @@ public class KwpGoodsController {
      * @return: com.sckw.core.web.response.HttpResult
      */
     @PostMapping(value = "/export", produces = MediaType.APPLICATION_JSON_VALUE)
-    public void export(@RequestBody GoodsListParam params) {
+    public void export(@RequestBody ExportGoodsListParam params) {
         kwpGoodsService.export(params);
     }
 
@@ -188,8 +184,7 @@ public class KwpGoodsController {
      */
     @PostMapping(value = "/dropList", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult dropList(@RequestBody GoodsDropListReq params) {
-        List<GoodsDropList> list = kwpGoodsService.dropList(params);
-        return HttpResult.ok(list);
+        return HttpResult.ok(kwpGoodsService.dropList(params));
     }
 
 

+ 43 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/enums/GoodsStatusEnum.java

@@ -0,0 +1,43 @@
+package com.sckw.product.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.*;
+
+/**
+ * @desc: 产品状态枚举
+ * @author: yzc
+ * @date: 2023-07-06 13:53
+ */
+@AllArgsConstructor
+@Getter
+public enum GoodsStatusEnum {
+
+    /**
+     * 产品状态枚举
+     */
+    SAVED(0, "已保存"),
+    PUT_ON_SHELVES(1, "上架中"),
+    TAKE_OFF_SHELVES(2, "已下架");
+
+    private Integer code;
+    private String msg;
+
+
+    public static String getNameByCode(Integer code) {
+        GoodsStatusEnum[] enums = GoodsStatusEnum.values();
+        for (GoodsStatusEnum instance : enums) {
+            if (Objects.equals(instance.getCode(), code)) {
+                return instance.getMsg();
+            }
+        }
+        return null;
+    }
+
+    public static List<GoodsStatusEnum> getSortList() {
+        GoodsStatusEnum[] enums = GoodsStatusEnum.values();
+        return Arrays.stream(enums).sorted(Comparator.comparingInt(GoodsStatusEnum::getCode)).toList();
+    }
+
+}

+ 2 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/GoodsListExport.java

@@ -2,6 +2,7 @@ package com.sckw.product.model;
 
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 /**
  * @desc: 商品列表导出对象
@@ -9,6 +10,7 @@ import lombok.Data;
  * @date: 2023-07-06 9:15
  */
 @Data
+@Accessors(chain = true)
 public class GoodsListExport {
 
     @ExcelProperty(value = "上架状态", index = 0)

+ 1 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/AddGoodsParam.java

@@ -111,6 +111,7 @@ public class AddGoodsParam {
     /**
      * 商品缩略图
      */
+    @NotBlank(message = "商品缩略图不能为空")
     private String thumb;
 
     /**

+ 25 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/ExportGoodsListParam.java

@@ -0,0 +1,25 @@
+package com.sckw.product.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.List;
+
+/**
+ * @desc: 导出商品列表请求参数
+ * @author: yzc
+ * @date: 2023-07-05 11:52
+ */
+@Getter
+@Setter
+@ToString
+public class ExportGoodsListParam extends GoodsListParam {
+
+    /**
+     * 商品ids
+     */
+    private List<Long> ids;
+
+
+}

+ 1 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/GoodsImages.java

@@ -17,7 +17,7 @@ public class GoodsImages {
     /**
      * 图片地址
      */
-    private String url;
+    private String image;
 
     /**
      * 图片排序

+ 3 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/GoodsListParam.java

@@ -1,5 +1,6 @@
 package com.sckw.product.model.vo.req;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -25,11 +26,13 @@ public class GoodsListParam {
     /**
      * 创建时间开始(yyyy-MM-dd)
      */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date startCreateTime;
 
     /**
      * 创建时间结束(yyyy-MM-dd)
      */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date endCreateTime;
 
     /**

+ 3 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/SelectGoodsListParam.java

@@ -1,5 +1,6 @@
 package com.sckw.product.model.vo.req;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.sckw.core.model.page.PageRequest;
 import lombok.Getter;
 import lombok.Setter;
@@ -26,11 +27,13 @@ public class SelectGoodsListParam extends PageRequest {
     /**
      * 创建时间开始(yyyy-MM-dd)
      */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date startCreateTime;
 
     /**
      * 创建时间结束(yyyy-MM-dd)
      */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date endCreateTime;
 
     /**

+ 108 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/GoodsList.java

@@ -1,10 +1,14 @@
 package com.sckw.product.model.vo.res;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.math.BigDecimal;
+import java.util.Date;
+
 /**
  * @desc: 商品列表
  * @author: yzc
@@ -15,4 +19,108 @@ import lombok.experimental.Accessors;
 @ToString
 @Accessors(chain = true)
 public class GoodsList {
+
+    /**
+     * 商品id
+     */
+    private Long id;
+
+    /**
+     * 状态:0草稿/1上架/2下架
+     */
+    private Integer status;
+
+    /**
+     * 商品名称
+     */
+    private String name;
+
+    /**
+     * 商品类型id
+     */
+    private Long typeId;
+
+    /**
+     * 商品类型
+     */
+    private String type;
+
+    /**
+     * 计量单位(吨、方、件、箱、其他)
+     */
+    private String unit;
+
+    /**
+     * 尺寸大小
+     */
+    private String spec;
+
+    /**
+     * 发票税率(%)
+     */
+    private BigDecimal taxRate;
+
+    /**
+     * 库存数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 交易方式(合同采购、直接采购、预付款、货到付款、到款发货)
+     */
+    private String trading;
+
+    /**
+     * 最高单价
+     */
+    private BigDecimal highestPrice;
+
+    /**
+     * 最低单价
+     */
+    private BigDecimal lowestPrice;
+
+    /**
+     * 仓储地址
+     */
+    private String address;
+
+    /**
+     * 客户经理
+     */
+    private String manageName;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+    /**
+     * 上架时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date addedTime;
+
+    /**
+     * 下架时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date shelfTime;
+
+    /**
+     * 供应商
+     */
+    private String supplyEnt;
+
+    /**
+     * 创建人
+     */
+    private String createByName;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
 }

+ 36 - 3
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsAddressService.java

@@ -1,13 +1,17 @@
 package com.sckw.product.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.product.dao.KwpGoodsAddressMapper;
 import com.sckw.product.model.KwpGoodsAddress;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @desc: 商品地址信息service
  * @author: yzc
@@ -18,7 +22,7 @@ import org.springframework.stereotype.Service;
 @RequiredArgsConstructor
 public class KwpGoodsAddressService {
 
-    private KwpGoodsAddressMapper kwpGoodsAddressMapper;
+    private final KwpGoodsAddressMapper kwpGoodsAddressMapper;
 
     /**
      * @desc: 添加商品地址信息
@@ -31,16 +35,45 @@ public class KwpGoodsAddressService {
         kwpGoodsAddressMapper.insert(address);
     }
 
+
     /**
      * @desc: 通过商品id获取
      * @author: yzc
-     * @date: 2023-07-05 14:45
+     * @date: 2023-07-06 15:53
      * @Param goodsId:
-     * @return: java.util.List<com.sckw.product.model.KwpGoodsAddress>
+     * @return: com.sckw.product.model.KwpGoodsAddress
      */
     public KwpGoodsAddress getByGoodsId(Long goodsId) {
         LambdaQueryWrapper<KwpGoodsAddress> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(KwpGoodsAddress::getGoodsId, goodsId).eq(KwpGoodsAddress::getDelFlag, Global.NO).last("LIMIT 1");
         return kwpGoodsAddressMapper.selectOne(wrapper);
     }
+
+    /**
+     * @desc: 根据商品id删除
+     * @author: yzc
+     * @date: 2023-07-06 15:04
+     * @Param goodsId:
+     * @return: void
+     */
+    public void delByGoodsId(Long goodsId) {
+        LambdaUpdateWrapper<KwpGoodsAddress> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwpGoodsAddress::getGoodsId, goodsId).eq(KwpGoodsAddress::getDelFlag, Global.NO)
+                .set(KwpGoodsAddress::getDelFlag, Global.YES);
+        kwpGoodsAddressMapper.update(null, wrapper);
+    }
+
+    /**
+     * @desc: 通过商品ids获取
+     * @author: yzc
+     * @date: 2023-07-05 14:45
+     * @Param goodsId:
+     * @return: java.util.List<com.sckw.product.model.KwpGoodsAddress>
+     */
+    public List<KwpGoodsAddress> getByGoodsIds(List<Long> goodsIds) {
+        LambdaQueryWrapper<KwpGoodsAddress> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(KwpGoodsAddress::getGoodsId, goodsIds).eq(KwpGoodsAddress::getDelFlag, Global.NO);
+        List<KwpGoodsAddress> list = kwpGoodsAddressMapper.selectList(wrapper);
+        return CollectionUtils.emptyIfNull(list);
+    }
 }

+ 16 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsAttributeService.java

@@ -1,6 +1,7 @@
 package com.sckw.product.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.model.constant.Global;
 import com.sckw.product.dao.KwpGoodsAttributeMapper;
 import com.sckw.product.model.KwpGoodsAttribute;
@@ -20,7 +21,7 @@ import java.util.List;
 @RequiredArgsConstructor
 public class KwpGoodsAttributeService {
 
-    private KwpGoodsAttributeMapper kwpGoodsAttributeMapper;
+    private final KwpGoodsAttributeMapper kwpGoodsAttributeMapper;
 
     /**
      * @desc: 批量插入
@@ -45,4 +46,18 @@ public class KwpGoodsAttributeService {
         wrapper.eq(KwpGoodsAttribute::getGoodsId, goodsId).eq(KwpGoodsAttribute::getDelFlag, Global.NO);
         return kwpGoodsAttributeMapper.selectList(wrapper);
     }
+
+    /**
+     * @desc: 删除商品相关属性
+     * @author: yzc
+     * @date: 2023-07-06 15:00
+     * @Param goodsId:
+     * @return: void
+     */
+    public void delByGoodsId(Long goodsId) {
+        LambdaUpdateWrapper<KwpGoodsAttribute> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwpGoodsAttribute::getGoodsId, goodsId).eq(KwpGoodsAttribute::getDelFlag, Global.NO)
+                .set(KwpGoodsAttribute::getDelFlag, Global.YES);
+        kwpGoodsAttributeMapper.update(null, wrapper);
+    }
 }

+ 16 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsImageService.java

@@ -1,6 +1,7 @@
 package com.sckw.product.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.model.constant.Global;
 import com.sckw.product.dao.KwpGoodsImageMapper;
 import com.sckw.product.model.KwpGoodsImage;
@@ -20,7 +21,7 @@ import java.util.List;
 @RequiredArgsConstructor
 public class KwpGoodsImageService {
 
-    private KwpGoodsImageMapper kwpGoodsImageMapper;
+    private final KwpGoodsImageMapper kwpGoodsImageMapper;
 
     /**
      * @desc: 批量插入
@@ -46,4 +47,18 @@ public class KwpGoodsImageService {
                 .orderByAsc(KwpGoodsImage::getSort);
         return kwpGoodsImageMapper.selectList(wrapper);
     }
+
+    /**
+     * @desc: 根据商品id删除
+     * @author: yzc
+     * @date: 2023-07-06 15:04
+     * @Param goodsId:
+     * @return: void
+     */
+    public void delByGoodsId(Long goodsId) {
+        LambdaUpdateWrapper<KwpGoodsImage> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwpGoodsImage::getGoodsId, goodsId).eq(KwpGoodsImage::getDelFlag, Global.NO)
+                .set(KwpGoodsImage::getDelFlag, Global.YES);
+        kwpGoodsImageMapper.update(null, wrapper);
+    }
 }

+ 32 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsPriceRangeService.java

@@ -1,7 +1,9 @@
 package com.sckw.product.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.CollectionUtils;
 import com.sckw.product.dao.KwpGoodsPriceRangeMapper;
 import com.sckw.product.model.KwpGoodsPriceRange;
 import lombok.RequiredArgsConstructor;
@@ -20,7 +22,7 @@ import java.util.List;
 @RequiredArgsConstructor
 public class KwpGoodsPriceRangeService {
 
-    private KwpGoodsPriceRangeMapper kwpGoodsPriceRangeMapper;
+    private final KwpGoodsPriceRangeMapper kwpGoodsPriceRangeMapper;
 
     /**
      * @desc: 批量插入
@@ -46,4 +48,33 @@ public class KwpGoodsPriceRangeService {
                 .orderByAsc(KwpGoodsPriceRange::getSort);
         return kwpGoodsPriceRangeMapper.selectList(wrapper);
     }
+
+    /**
+     * @desc: 根据商品id删除
+     * @author: yzc
+     * @date: 2023-07-06 15:04
+     * @Param goodsId:
+     * @return: void
+     */
+    public void delByGoodsId(Long goodsId) {
+        LambdaUpdateWrapper<KwpGoodsPriceRange> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwpGoodsPriceRange::getGoodsId, goodsId).eq(KwpGoodsPriceRange::getDelFlag, Global.NO)
+                .set(KwpGoodsPriceRange::getDelFlag, Global.YES);
+        kwpGoodsPriceRangeMapper.update(null, wrapper);
+    }
+
+    /**
+     * @desc: 通过商品ids获取
+     * @author: yzc
+     * @date: 2023-07-06 15:59
+     * @Param goodsIds:
+     * @return: java.util.List<com.sckw.product.model.KwpGoodsPriceRange>
+     */
+    public List<KwpGoodsPriceRange> getByGoodsIds(List<Long> goodsIds) {
+        LambdaQueryWrapper<KwpGoodsPriceRange> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(KwpGoodsPriceRange::getGoodsId, goodsIds).eq(KwpGoodsPriceRange::getDelFlag, Global.NO)
+                .orderByAsc(KwpGoodsPriceRange::getPrice);
+        List<KwpGoodsPriceRange> list = kwpGoodsPriceRangeMapper.selectList(wrapper);
+        return CollectionUtils.emptyIfNull(list);
+    }
 }

+ 300 - 62
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -1,14 +1,20 @@
 package com.sckw.product.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.vo.TableBottom;
 import com.sckw.core.model.vo.TableStatisticRes;
+import com.sckw.core.model.vo.TableTop;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.excel.utils.DateUtil;
 import com.sckw.excel.utils.EasyExcelUtil;
 import com.sckw.product.dao.KwpGoodsMapper;
+import com.sckw.product.enums.GoodsStatusEnum;
 import com.sckw.product.model.*;
 import com.sckw.product.model.vo.req.*;
 import com.sckw.product.model.vo.res.BuildingMaterialsMarketList;
@@ -21,10 +27,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @desc: 商品service
@@ -54,7 +58,7 @@ public class KwpGoodsService {
         Long entId = LoginUserHolder.getEntId();
         //添加商品信息
         KwpGoods goods = BeanUtils.copyProperties(addGoodsParam, KwpGoods.class);
-        goods.setEntId(entId).setStatus(0);
+        goods.setEntId(entId).setStatus(GoodsStatusEnum.TAKE_OFF_SHELVES.getCode());
         kwpGoodsMapper.insert(goods);
         addGoodsOtherInfo(goods.getId(), addGoodsParam);
     }
@@ -71,7 +75,7 @@ public class KwpGoodsService {
         Long entId = LoginUserHolder.getEntId();
         //添加商品信息
         KwpGoods goods = BeanUtils.copyProperties(addGoodsParam, KwpGoods.class);
-        goods.setEntId(entId).setShelfTime(new Date()).setStatus(1);
+        goods.setEntId(entId).setShelfTime(new Date()).setStatus(GoodsStatusEnum.PUT_ON_SHELVES.getCode());
         kwpGoodsMapper.insert(goods);
         addGoodsOtherInfo(goods.getId(), addGoodsParam);
     }
@@ -132,25 +136,21 @@ public class KwpGoodsService {
      * @return: com.sckw.product.model.vo.res.GoodsDetail
      */
     public GoodsDetail detail(Long id) {
-        Long entId = LoginUserHolder.getEntId();
-        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(KwpGoods::getId, id);
-        KwpGoods goods = getGoods(wrapper);
+        KwpGoods goods = getGoodsById(id);
         if (Objects.isNull(goods)) {
             throw new BusinessException("当前商品信息为空!");
         }
         GoodsDetail detail = BeanUtils.copyProperties(goods, GoodsDetail.class);
-
-
+        //商品图片信息
         List<KwpGoodsImage> goodsImages = kwpGoodsImageService.getByGoodsId(id);
         List<GoodsImages> images = BeanUtils.copyToList(goodsImages, GoodsImages.class);
-
+        //商品价格段信息
         List<KwpGoodsPriceRange> priceRanges = kwpGoodsPriceRangeService.getByGoodsId(id);
         List<GoodsPriceRanges> ranges = BeanUtils.copyToList(priceRanges, GoodsPriceRanges.class);
-
+        //商品属性信息
         List<KwpGoodsAttribute> attributesList = kwpGoodsAttributeService.getByGoodsId(id);
         List<GoodsAttributes> attributes = BeanUtils.copyToList(attributesList, GoodsAttributes.class);
-
+        //商品地址信息
         KwpGoodsAddress goodsAddress = kwpGoodsAddressService.getByGoodsId(id);
         AddressInfo addressInfo = BeanUtils.copyProperties(goodsAddress, AddressInfo.class);
 
@@ -159,61 +159,244 @@ public class KwpGoodsService {
         return detail;
     }
 
+
     /**
-     * @desc: 分页查询商品信息
+     * @desc: 更新商品信息
      * @author: yzc
-     * @date: 2023-07-05 11:58
-     * @Param params:
-     * @return: java.util.List<com.sckw.product.model.vo.res.GoodsList>
+     * @date: 2023-07-06 8:50
+     * @Param param:
+     * @return: void
      */
-    public List<GoodsList> select(SelectGoodsListParam params) {
-        return null;
+    @Transactional(rollbackFor = Exception.class)
+    public void update(UpdateGoodsParam param) {
+        if (Objects.equals(param.getStatus(), GoodsStatusEnum.PUT_ON_SHELVES.getCode())) {
+            judgeParameters(param);
+        }
+        KwpGoods kwpGoods = getGoodsById(param.getId());
+        if (Objects.isNull(kwpGoods)) {
+            throw new BusinessException("当前商品不存在!");
+        }
+        if (Objects.equals(kwpGoods.getStatus(), GoodsStatusEnum.PUT_ON_SHELVES.getCode())) {
+            throw new BusinessException("当前商品为上架状态,不可修改!");
+        }
+        KwpGoods goods = BeanUtils.copyProperties(param, KwpGoods.class);
+        if (Objects.equals(param.getStatus(), GoodsStatusEnum.PUT_ON_SHELVES.getCode())) {
+            goods.setShelfTime(new Date());
+        }
+        kwpGoodsMapper.updateById(goods);
+        updateGoodsOtherInfo(param);
     }
 
     /**
-     * @desc: 统计查询
+     * @desc: 更新商品其他信息
      * @author: yzc
-     * @date: 2023-07-05 17:55
+     * @date: 2023-07-06 14:53
+     * @Param param:
+     * @return: void
+     */
+    private void updateGoodsOtherInfo(UpdateGoodsParam param) {
+        Long goodsId = param.getId();
+        //更新商品地址信息
+        kwpGoodsAddressService.delByGoodsId(goodsId);
+        KwpGoodsAddress address = BeanUtils.copyProperties(param.getAddressInfo(), KwpGoodsAddress.class);
+        address.setGoodsId(goodsId);
+        kwpGoodsAddressService.insert(address);
+
+        //更新商品属性信息
+        kwpGoodsAttributeService.delByGoodsId(goodsId);
+        if (CollectionUtils.isNotEmpty(param.getAttributes())) {
+            List<KwpGoodsAttribute> list = new ArrayList<>(param.getAttributes().size());
+            param.getAttributes().forEach(e -> {
+                KwpGoodsAttribute attribute = BeanUtils.copyProperties(e, KwpGoodsAttribute.class);
+                attribute.setGoodsId(goodsId);
+                list.add(attribute);
+            });
+            kwpGoodsAttributeService.insertBatch(list);
+        }
+
+        //更新商品图片信息
+        kwpGoodsImageService.delByGoodsId(goodsId);
+        if (CollectionUtils.isNotEmpty(param.getImages())) {
+            List<KwpGoodsImage> list = new ArrayList<>(param.getImages().size());
+            param.getImages().forEach(e -> {
+                KwpGoodsImage image = BeanUtils.copyProperties(e, KwpGoodsImage.class);
+                image.setGoodsId(goodsId);
+                list.add(image);
+            });
+            kwpGoodsImageService.insertBatch(list);
+        }
+
+        //更新商品价格梯度信息
+        kwpGoodsPriceRangeService.delByGoodsId(goodsId);
+        if (CollectionUtils.isNotEmpty(param.getPriceRanges())) {
+            List<KwpGoodsPriceRange> list = new ArrayList<>(param.getPriceRanges().size());
+            param.getPriceRanges().forEach(e -> {
+                KwpGoodsPriceRange priceRange = BeanUtils.copyProperties(e, KwpGoodsPriceRange.class);
+                priceRange.setGoodsId(goodsId);
+                list.add(priceRange);
+            });
+            kwpGoodsPriceRangeService.insertBatch(list);
+        }
+    }
+
+    /**
+     * @desc: 参数校验
+     * @author: yzc
+     * @date: 2023-07-06 14:33
+     * @Param param:
+     * @return: void
+     */
+    private void judgeParameters(UpdateGoodsParam param) {
+        if (StringUtils.isBlank(param.getName())) {
+            throw new BusinessException("商品名称不能为空!");
+        }
+        if (Objects.isNull(param.getTypeId())) {
+            throw new BusinessException("商品类型不能为空!");
+        }
+        if (StringUtils.isBlank(param.getUnit())) {
+            throw new BusinessException("计量单位不能为空!");
+        }
+        if (StringUtils.isBlank(param.getSpec())) {
+            throw new BusinessException("规格尺寸不能为空!");
+        }
+        if (Objects.isNull(param.getAmount())) {
+            throw new BusinessException("库存数量不能为空!");
+        }
+        if (Objects.isNull(param.getTaxRate())) {
+            throw new BusinessException("发票税率不能为空!");
+        }
+        if (Objects.isNull(param.getTrading())) {
+            throw new BusinessException("交易方式不能为空!");
+        }
+        if (CollectionUtils.isEmpty(param.getPriceRanges())) {
+            throw new BusinessException("价格梯度不能为空!");
+        }
+        if (Objects.isNull(param.getSupplyEntId())) {
+            throw new BusinessException("供应企业不能为空!");
+        }
+        if (Objects.isNull(param.getAddressInfo())) {
+            throw new BusinessException("地址信息不能为空!");
+        }
+        if (Objects.isNull(param.getManager())) {
+            throw new BusinessException("客户经理不能为空!");
+        }
+        if (StringUtils.isBlank(param.getAmount())) {
+            throw new BusinessException("商品缩略图不能为空!");
+        }
+
+    }
+
+    /**
+     * @desc: 分页查询商品信息
+     * @author: yzc
+     * @date: 2023-07-05 11:58
      * @Param params:
-     * @return: com.sckw.core.model.vo.TableRes
+     * @return: java.util.List<com.sckw.product.model.vo.res.GoodsList>
      */
-    public TableStatisticRes statistic(GoodsListParam params) {
-        return null;
+    public List<GoodsList> select(ExportGoodsListParam params) {
+        List<Long> ids = params.getIds();
+        List<KwpGoods> goodsLists;
+        if (CollectionUtils.isEmpty(ids)) {
+            goodsLists = getGoodsLists(params);
+        } else {
+            LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+            wrapper.in(KwpGoods::getId, ids).eq(KwpGoods::getEntId, LoginUserHolder.getEntId()).eq(KwpGoods::getDelFlag, Global.NO);
+            goodsLists = kwpGoodsMapper.selectList(wrapper);
+        }
+        if (CollectionUtils.isEmpty(goodsLists)) {
+            return Collections.emptyList();
+        }
+        List<GoodsList> result = new ArrayList<>(goodsLists.size());
+        List<Long> goodsIds = goodsLists.stream().map(KwpGoods::getId).toList();
+        //地址信息
+        Map<Long, KwpGoodsAddress> addressMap = kwpGoodsAddressService.getByGoodsIds(goodsIds)
+                .stream().collect(Collectors.toMap(KwpGoodsAddress::getGoodsId, e -> e, (k1, k2) -> k1));
+        //价格梯度信息
+        Map<Long, List<KwpGoodsPriceRange>> priceRangeMap = kwpGoodsPriceRangeService.getByGoodsIds(goodsIds)
+                .stream().collect(Collectors.groupingBy(KwpGoodsPriceRange::getGoodsId));
+
+        goodsLists.forEach(e -> {
+            Long id = e.getId();
+            GoodsList goodsList = BeanUtils.copyProperties(e, GoodsList.class);
+            goodsList.setAddress(Objects.isNull(addressMap.get(id)) ? null : addressMap.get(id).getDetailAddress());
+            List<KwpGoodsPriceRange> priceRanges = priceRangeMap.get(id);
+            goodsList.setHighestPrice(CollectionUtils.isEmpty(priceRanges) ? null : priceRanges.get(priceRanges.size() - 1).getPrice());
+            goodsList.setLowestPrice(CollectionUtils.isEmpty(priceRanges) ? null : priceRanges.get(0).getPrice());
+            result.add(goodsList);
+        });
+        return result;
     }
 
     /**
-     * @desc: 条件获取商品信息
+     * @desc: 商品表格列表查询
      * @author: yzc
-     * @date: 2023-07-05 14:25
-     * @Param wrapper:
-     * @return: com.sckw.product.model.KwpGoods
+     * @date: 2023-07-07 9:09
+     * @Param params:
+     * @return: java.util.List<com.sckw.product.model.KwpGoods>
      */
-    public KwpGoods getGoods(LambdaQueryWrapper<KwpGoods> wrapper) {
-        LambdaQueryWrapper<KwpGoods> last = wrapper.eq(KwpGoods::getEntId, LoginUserHolder.getEntId())
-                .eq(KwpGoods::getDelFlag, Global.NO).last("LIMIT 1");
-        return kwpGoodsMapper.selectOne(last);
+    private List<KwpGoods> getGoodsLists(GoodsListParam params) {
+        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(StringUtils.isNotBlank(params.getKeywords()), KwpGoods::getName, params.getKeywords())
+                .ge(Objects.nonNull(params.getStartCreateTime()), KwpGoods::getCreateTime, params.getStartCreateTime())
+                .le(Objects.nonNull(params.getEndCreateTime()), KwpGoods::getCreateTime, params.getEndCreateTime())
+                .in(CollectionUtils.isNotEmpty(params.getTradings()), KwpGoods::getTrading, params.getTradings())
+                .in(CollectionUtils.isNotEmpty(params.getTypeIds()), KwpGoods::getTypeId, params.getTypeIds())
+                .in(CollectionUtils.isNotEmpty(params.getStatus()), KwpGoods::getStatus, params.getStatus())
+                .eq(KwpGoods::getEntId, LoginUserHolder.getEntId()).eq(KwpGoods::getDelFlag, Global.NO).orderByDesc(KwpGoods::getCreateTime);
+        List<KwpGoods> list = kwpGoodsMapper.selectList(wrapper);
+        return CollectionUtils.emptyIfNull(list);
     }
 
+
     /**
-     * @desc: 商品下拉列表
+     * @desc: 统计查询
      * @author: yzc
-     * @date: 2023-07-06 8:45
+     * @date: 2023-07-05 17:55
      * @Param params:
-     * @return: java.util.List<com.sckw.product.model.vo.res.GoodsDropList>
+     * @return: com.sckw.core.model.vo.TableRes
      */
-    public List<GoodsDropList> dropList(GoodsDropListReq params) {
-        return null;
+    public TableStatisticRes statistic(GoodsListParam params) {
+        TableStatisticRes res = new TableStatisticRes();
+        List<KwpGoods> goodsList = getGoodsLists(params);
+        Map<Integer, List<KwpGoods>> map = goodsList.stream().collect(Collectors.groupingBy(KwpGoods::getStatus));
+        List<TableTop> tableTops = new ArrayList<>();
+        GoodsStatusEnum.getSortList().forEach(e -> {
+            List<KwpGoods> list = map.get(e.getCode());
+            int total = CollectionUtils.isEmpty(list) ? 0 : list.size();
+            TableTop tableTop = new TableTop();
+            tableTop.setName(e.getMsg()).setValue(e.getCode()).setTotal(total);
+            tableTops.add(tableTop);
+        });
+        TableBottom tableBottom = new TableBottom();
+        tableBottom.setTotal(CollectionUtils.isEmpty(goodsList) ? 0 : goodsList.size());
+        res.setTableTops(tableTops).setTableBottom(tableBottom);
+        return res;
     }
 
     /**
-     * @desc: 更新商品信息
+     * @desc: 导出
      * @author: yzc
-     * @date: 2023-07-06 8:50
-     * @Param updateGoodsParam:
+     * @date: 2023-07-06 9:07
+     * @Param params:
      * @return: void
      */
-    public void update(UpdateGoodsParam updateGoodsParam) {
-
+    public void export(ExportGoodsListParam params) {
+        List<GoodsList> goodsLists = select(params);
+        List<GoodsListExport> list = new ArrayList<>();
+        goodsLists.forEach(e -> {
+            GoodsListExport export = BeanUtils.copyProperties(e, GoodsListExport.class);
+            export.setStatus(GoodsStatusEnum.getNameByCode(e.getStatus()))
+                    .setType("砂石").setTaxRate(String.valueOf(e.getTaxRate())).setAmount(String.valueOf(e.getAmount()))
+                    .setTrading("线下付款").setHighestPrice(String.valueOf(e.getHighestPrice()))
+                    .setLowestPrice(String.valueOf(e.getLowestPrice())).setAddedTime(DateUtil.getDateTime(e.getAddedTime()))
+                    .setShelfTime(DateUtil.getDateTime(e.getShelfTime()));
+            list.add(export);
+        });
+        try {
+            EasyExcelUtil.writeSingleExcel("商品列表信息", "sheet1", list, GoodsListExport.class);
+        } catch (IOException e) {
+            throw new BusinessException("导出商品列表异常", e.getMessage());
+        }
     }
 
     /**
@@ -224,7 +407,17 @@ public class KwpGoodsService {
      * @return: void
      */
     public void batchPutOnShelves(List<Long> ids) {
-
+        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(KwpGoods::getId, ids).in(KwpGoods::getStatus, 0, 2)
+                .eq(KwpGoods::getEntId, LoginUserHolder.getEntId()).eq(KwpGoods::getDelFlag, Global.NO);
+        List<KwpGoods> list = kwpGoodsMapper.selectList(wrapper);
+        if (!Objects.equals(ids.size(), list.size())) {
+            throw new BusinessException("上架操作仅针对“已下架”“草稿”状态的单据");
+        }
+        LambdaUpdateWrapper<KwpGoods> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(KwpGoods::getStatus, GoodsStatusEnum.PUT_ON_SHELVES.getCode()).set(KwpGoods::getAddedTime, new Date())
+                .in(KwpGoods::getId, ids);
+        kwpGoodsMapper.update(null, updateWrapper);
     }
 
     /**
@@ -235,7 +428,17 @@ public class KwpGoodsService {
      * @return: void
      */
     public void batchTakeOffShelves(List<Long> ids) {
-
+        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(KwpGoods::getId, ids).eq(KwpGoods::getStatus, GoodsStatusEnum.PUT_ON_SHELVES.getCode())
+                .eq(KwpGoods::getEntId, LoginUserHolder.getEntId()).eq(KwpGoods::getDelFlag, Global.NO);
+        List<KwpGoods> list = kwpGoodsMapper.selectList(wrapper);
+        if (!Objects.equals(ids.size(), list.size())) {
+            throw new BusinessException("下架操作仅针对“已上架”状态的单据");
+        }
+        LambdaUpdateWrapper<KwpGoods> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(KwpGoods::getStatus, GoodsStatusEnum.TAKE_OFF_SHELVES.getCode()).set(KwpGoods::getShelfTime, new Date())
+                .in(KwpGoods::getId, ids);
+        kwpGoodsMapper.update(null, updateWrapper);
     }
 
     /**
@@ -246,34 +449,69 @@ public class KwpGoodsService {
      * @return: void
      */
     public void batchDelete(List<Long> ids) {
-
+        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(KwpGoods::getId, ids).in(KwpGoods::getStatus, 0, 2)
+                .eq(KwpGoods::getEntId, LoginUserHolder.getEntId()).eq(KwpGoods::getDelFlag, Global.NO);
+        List<KwpGoods> list = kwpGoodsMapper.selectList(wrapper);
+        if (!Objects.equals(ids.size(), list.size())) {
+            throw new BusinessException("删除操作仅针对“已下架”“草稿”状态的单据");
+        }
+        LambdaUpdateWrapper<KwpGoods> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(KwpGoods::getDelFlag, Global.YES).in(KwpGoods::getId, ids);
+        kwpGoodsMapper.update(null, updateWrapper);
     }
 
+
     /**
-     * @desc: 导出
+     * @desc: 建材市场分页查询
      * @author: yzc
-     * @date: 2023-07-06 9:07
+     * @date: 2023-07-06 9:38
      * @Param params:
-     * @return: void
+     * @return: java.util.List<com.sckw.product.model.vo.res.BuildingMaterialsMarketList>
      */
-    public void export(GoodsListParam params) {
+    public List<BuildingMaterialsMarketList> buildingMaterialsMarketList(BuildingMaterialsMarketListParam params) {
 
-        List<GoodsListExport> list = new ArrayList<>();
-        try {
-            EasyExcelUtil.writeSingleExcel("商品列表信息", "sheet1", list, GoodsListExport.class);
-        } catch (IOException e) {
-            throw new BusinessException("导出商品列表异常", e.getMessage());
-        }
+
+        return null;
     }
 
+
     /**
-     * @desc: 建材市场分页查询
+     * @desc: 商品下拉列表
      * @author: yzc
-     * @date: 2023-07-06 9:38
+     * @date: 2023-07-06 8:45
      * @Param params:
-     * @return: java.util.List<com.sckw.product.model.vo.res.BuildingMaterialsMarketList>
+     * @return: java.util.List<com.sckw.product.model.vo.res.GoodsDropList>
      */
-    public List<BuildingMaterialsMarketList> buildingMaterialsMarketList(BuildingMaterialsMarketListParam params) {
-        return null;
+    public List<GoodsDropList> dropList(GoodsDropListReq params) {
+        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(StringUtils.isNotBlank(params.getName()),KwpGoods::getName, params.getName())
+                .eq(KwpGoods::getStatus, GoodsStatusEnum.PUT_ON_SHELVES.getCode())
+                .eq(KwpGoods::getDelFlag, Global.NO).orderByDesc(KwpGoods::getAddedTime);
+        List<KwpGoods> list = kwpGoodsMapper.selectList(wrapper);
+        if (CollectionUtils.isEmpty(list)) {
+            return Collections.emptyList();
+        }
+        List<GoodsDropList> result = new ArrayList<>();
+        list.forEach(e->{
+            GoodsDropList goodsDropList = BeanUtils.copyProperties(e, GoodsDropList.class);
+            goodsDropList.setSupplyEnt("供应企业");
+            result.add(goodsDropList);
+        });
+        return result;
+    }
+
+    /**
+     * @desc: 根据商品id获取商品信息
+     * @author: yzc
+     * @date: 2023-07-05 14:25
+     * @Param id:
+     * @return: com.sckw.product.model.KwpGoods
+     */
+    public KwpGoods getGoodsById(Long id) {
+        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+        LambdaQueryWrapper<KwpGoods> last = wrapper.eq(KwpGoods::getId, id).eq(KwpGoods::getEntId, LoginUserHolder.getEntId())
+                .eq(KwpGoods::getDelFlag, Global.NO).last("LIMIT 1");
+        return kwpGoodsMapper.selectOne(last);
     }
 }

+ 1 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsSkuService.java

@@ -15,6 +15,6 @@ import org.springframework.stereotype.Service;
 @RequiredArgsConstructor
 public class KwpGoodsSkuService {
 
-    private KwpGoodsSkuMapper kwpGoodsSkuMapper;
+    private final KwpGoodsSkuMapper kwpGoodsSkuMapper;
 
 }