Jelajahi Sumber

下单流程优化(判断库存),新增junit单元测试

lhm 3 tahun lalu
induk
melakukan
68d9c38c9b

+ 9 - 0
kmall-admin/src/main/java/com/kmall/admin/dao/GoodsDao.java

@@ -3,6 +3,7 @@ package com.kmall.admin.dao;
 import com.kmall.admin.dto.GoodsDetailsDto;
 import com.kmall.admin.dto.GoodsPanoramaDto;
 import com.kmall.admin.entity.GoodsEntity;
+import com.kmall.admin.haikong.vo.QueryGoodsVo;
 import com.kmall.api.entity.exportpdf.PDFGoodsDto;
 import com.kmall.manager.dao.BaseDao;
 import org.apache.ibatis.annotations.Param;
@@ -105,4 +106,12 @@ public interface GoodsDao extends BaseDao<GoodsEntity> {
      * @return              sku的信息
      */
     GoodsEntity queryGoodsStockByBarcodeAndStoreIdAndSku(@Param("prodBarcode") String prodBarcode, @Param("storeId") Integer storeId, @Param("sku") String sku);
+
+    /**
+     * 查询库存及sku的信息,查询出来的库存是门店的库存
+     *
+     * @param queryGoodsVoList 查询条件,包含商品条码、sku、门店id
+     * @return 商品信息
+     */
+    List<GoodsEntity> queryGoodsStockByQueryGoodsVoList(List<QueryGoodsVo> queryGoodsVoList);
 }

+ 34 - 3
kmall-admin/src/main/java/com/kmall/admin/entity/GoodsEntity.java

@@ -1,10 +1,11 @@
 package com.kmall.admin.entity;
 
+import com.kmall.admin.haikong.vo.QueryGoodsVo;
+import org.springframework.beans.BeanUtils;
+
 import java.io.Serializable;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 
 /**
@@ -273,6 +274,12 @@ public class GoodsEntity implements Serializable {
 
     private Integer toBeRestored;
 
+    public GoodsEntity() {
+    }
+
+    public GoodsEntity(QueryGoodsVo queryGoodsVo) {
+        BeanUtils.copyProperties(this, queryGoodsVo);
+    }
 
     public BigDecimal getCosmThresholdValue() {
         return cosmThresholdValue;
@@ -1260,4 +1267,28 @@ public class GoodsEntity implements Serializable {
     public void setExitRegionNumber(Integer exitRegionNumber) {
         this.exitRegionNumber = exitRegionNumber;
     }
+
+    /**
+     * 重写hashCode方法,用作排序
+     */
+    @Override
+    public int hashCode() {
+        String s = this.prodBarcode + this.sku + this.storeId;
+        return s.hashCode();
+    }
+
+    /**
+     * 重写equals
+     * @param obj   需要对比的对象
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (Objects.isNull(obj)) {
+            return false;
+        }
+        if (obj instanceof GoodsEntity) {
+            return this.hashCode() == obj.hashCode();
+        }
+        return false;
+    }
 }

+ 28 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/utils/ListUtils.java

@@ -0,0 +1,28 @@
+package com.kmall.admin.haikong.utils;
+
+import org.springframework.beans.BeanUtils;
+
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @author lhm
+ * @createDate 2021-11-15
+ */
+public class ListUtils<T, E> {
+
+    public void copyList (List<T> source, List<E> target) {
+        if (Objects.nonNull(source) && Objects.nonNull(target)) {
+            source = source.stream().sorted(Comparator.comparingInt(Object::hashCode)).collect(Collectors.toList());
+            target = target.stream().sorted(Comparator.comparingInt(Object::hashCode)).collect(Collectors.toList());
+            for (int i = 0; i < source.size(); i++) {
+                T o = source.get(i);
+                E t = target.get(i);
+                BeanUtils.copyProperties(o, t);
+            }
+        }
+    }
+
+}

+ 350 - 0
kmall-admin/src/main/java/com/kmall/admin/haikong/vo/QueryGoodsVo.java

@@ -0,0 +1,350 @@
+package com.kmall.admin.haikong.vo;
+
+import java.math.BigDecimal;
+import java.util.Objects;
+
+/**
+ * 查询商品参数
+ * @author lhm
+ * @createDate 2021-11-15
+ */
+public class QueryGoodsVo {
+
+    /**
+     * 商品条码
+     */
+    private String prodBarcode;
+
+    /**
+     * sku
+     */
+    private String sku;
+
+    /**
+     * 门店id
+     */
+    private Integer storeId;
+
+    /**
+     * 销售数
+     */
+    private Integer sellVolume;
+
+    /**
+     * 订单金额(含税价)
+     */
+    private BigDecimal retailPrice;
+
+    /**
+     * 商品预估税
+     */
+    private BigDecimal goodstaxes;
+
+    /**
+     * 商品优惠金额
+     */
+    private BigDecimal disCountedPrice;
+
+    /**
+     * 商品总库存
+     */
+    private Integer goodsNumber;
+
+    /**
+     * 商品编码
+     */
+    private String goodsSn;
+
+    /**
+     * 商品名称
+     */
+    private String name;
+
+    /**
+     * 商品图片
+     */
+    private String listPicUrl;
+
+    /**
+     * 市场价
+     */
+    private BigDecimal storeMarketPrice;
+
+    /**
+     * 零售价
+     */
+    private BigDecimal storeRetailPrice;
+
+    /**
+     * 商品门店库存
+     */
+    private Integer stockNum;
+
+    /**
+     * 门店名称
+     */
+    private String storeName;
+
+    /**
+     * 商品税率
+     */
+    private BigDecimal goodsRate;
+
+    /**
+     * 海关备案编码
+     */
+    private String hsCode;
+
+    /**
+     * 第一法定单位数量
+     */
+    private BigDecimal legalUnit1Qty;
+
+    /**
+     * 第二法定单位数量
+     */
+    private BigDecimal legalUnit2Qty;
+
+    /**
+     * 国检规格型号
+     */
+    private String ciqProdModel;
+
+    /**
+     * 退款待恢复库存
+     */
+    private Integer toBeRestored;
+
+    /**
+     * 出区数
+     */
+    private Integer exitRegionNumber;
+
+    public String getProdBarcode() {
+        return prodBarcode;
+    }
+
+    public void setProdBarcode(String prodBarcode) {
+        this.prodBarcode = prodBarcode;
+    }
+
+    public String getSku() {
+        return sku;
+    }
+
+    public void setSku(String sku) {
+        this.sku = sku;
+    }
+
+    public Integer getStoreId() {
+        return storeId;
+    }
+
+    public void setStoreId(Integer storeId) {
+        this.storeId = storeId;
+    }
+
+    public Integer getSellVolume() {
+        return sellVolume;
+    }
+
+    public void setSellVolume(Integer sellVolume) {
+        this.sellVolume = sellVolume;
+    }
+
+    public BigDecimal getRetailPrice() {
+        return retailPrice;
+    }
+
+    public void setRetailPrice(BigDecimal retailPrice) {
+        this.retailPrice = retailPrice;
+    }
+
+    public BigDecimal getGoodstaxes() {
+        return goodstaxes;
+    }
+
+    public void setGoodstaxes(BigDecimal goodstaxes) {
+        this.goodstaxes = goodstaxes;
+    }
+
+    public BigDecimal getDisCountedPrice() {
+        return disCountedPrice;
+    }
+
+    public void setDisCountedPrice(BigDecimal disCountedPrice) {
+        this.disCountedPrice = disCountedPrice;
+    }
+
+    public Integer getGoodsNumber() {
+        return goodsNumber;
+    }
+
+    public void setGoodsNumber(Integer goodsNumber) {
+        this.goodsNumber = goodsNumber;
+    }
+
+    public String getGoodsSn() {
+        return goodsSn;
+    }
+
+    public void setGoodsSn(String goodsSn) {
+        this.goodsSn = goodsSn;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getListPicUrl() {
+        return listPicUrl;
+    }
+
+    public void setListPicUrl(String listPicUrl) {
+        this.listPicUrl = listPicUrl;
+    }
+
+    public BigDecimal getStoreMarketPrice() {
+        return storeMarketPrice;
+    }
+
+    public void setStoreMarketPrice(BigDecimal storeMarketPrice) {
+        this.storeMarketPrice = storeMarketPrice;
+    }
+
+    public BigDecimal getStoreRetailPrice() {
+        return storeRetailPrice;
+    }
+
+    public void setStoreRetailPrice(BigDecimal storeRetailPrice) {
+        this.storeRetailPrice = storeRetailPrice;
+    }
+
+    public Integer getStockNum() {
+        return stockNum;
+    }
+
+    public void setStockNum(Integer stockNum) {
+        this.stockNum = stockNum;
+    }
+
+    public String getStoreName() {
+        return storeName;
+    }
+
+    public void setStoreName(String storeName) {
+        this.storeName = storeName;
+    }
+
+    public BigDecimal getGoodsRate() {
+        return goodsRate;
+    }
+
+    public void setGoodsRate(BigDecimal goodsRate) {
+        this.goodsRate = goodsRate;
+    }
+
+    public String getHsCode() {
+        return hsCode;
+    }
+
+    public void setHsCode(String hsCode) {
+        this.hsCode = hsCode;
+    }
+
+    public BigDecimal getLegalUnit1Qty() {
+        return legalUnit1Qty;
+    }
+
+    public void setLegalUnit1Qty(BigDecimal legalUnit1Qty) {
+        this.legalUnit1Qty = legalUnit1Qty;
+    }
+
+    public BigDecimal getLegalUnit2Qty() {
+        return legalUnit2Qty;
+    }
+
+    public void setLegalUnit2Qty(BigDecimal legalUnit2Qty) {
+        this.legalUnit2Qty = legalUnit2Qty;
+    }
+
+    public String getCiqProdModel() {
+        return ciqProdModel;
+    }
+
+    public void setCiqProdModel(String ciqProdModel) {
+        this.ciqProdModel = ciqProdModel;
+    }
+
+    public Integer getToBeRestored() {
+        return toBeRestored;
+    }
+
+    public void setToBeRestored(Integer toBeRestored) {
+        this.toBeRestored = toBeRestored;
+    }
+
+    public Integer getExitRegionNumber() {
+        return exitRegionNumber;
+    }
+
+    public void setExitRegionNumber(Integer exitRegionNumber) {
+        this.exitRegionNumber = exitRegionNumber;
+    }
+
+    @Override
+    public String toString() {
+        return "QueryGoodsVo{" +
+                "prodBarcode='" + prodBarcode + '\'' +
+                ", sku='" + sku + '\'' +
+                ", storeId=" + storeId +
+                ", sellVolume=" + sellVolume +
+                ", retailPrice=" + retailPrice +
+                ", goodstaxes=" + goodstaxes +
+                ", disCountedPrice=" + disCountedPrice +
+                ", goodsNumber=" + goodsNumber +
+                ", goodsSn='" + goodsSn + '\'' +
+                ", name='" + name + '\'' +
+                ", listPicUrl='" + listPicUrl + '\'' +
+                ", storeMarketPrice=" + storeMarketPrice +
+                ", storeRetailPrice=" + storeRetailPrice +
+                ", stockNum=" + stockNum +
+                ", storeName='" + storeName + '\'' +
+                ", goodsRate=" + goodsRate +
+                ", hsCode='" + hsCode + '\'' +
+                ", legalUnit1Qty=" + legalUnit1Qty +
+                ", legalUnit2Qty=" + legalUnit2Qty +
+                ", ciqProdModel='" + ciqProdModel + '\'' +
+                ", toBeRestored=" + toBeRestored +
+                ", exitRegionNumber=" + exitRegionNumber +
+                '}';
+    }
+
+    /**
+     * 重写hashCode方法,用作排序
+     */
+    @Override
+    public int hashCode() {
+        String s = this.prodBarcode + this.sku + this.storeId;
+        return s.hashCode();
+    }
+
+    /**
+     * 重写equals
+     * @param obj   需要对比的对象
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (Objects.isNull(obj)) {
+            return false;
+        }
+        if (obj instanceof QueryGoodsVo) {
+            return this.hashCode() == obj.hashCode();
+        }
+        return false;
+    }
+}

+ 8 - 0
kmall-admin/src/main/java/com/kmall/admin/service/GoodsService.java

@@ -6,6 +6,7 @@ import com.kmall.admin.dto.GoodsPanoramaDto;
 import com.kmall.admin.entity.GoodsEntity;
 import com.kmall.admin.entity.TaxErrorRecordEntity;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.admin.haikong.vo.QueryGoodsVo;
 import com.kmall.api.entity.exportpdf.PDFGoodsDto;
 
 import java.util.List;
@@ -227,4 +228,11 @@ public interface GoodsService {
      * @return              商品信息
      */
     GoodsEntity queryGoodsStockByBarcodeAndStoreIdAndSku(String prodBarcode, Integer storeId, String sku);
+
+    /**
+     * 查询库存及sku的信息,查询出来的库存是门店的库存
+     * @param queryGoodsVoList 查询条件,包含商品条码、sku、门店id
+     * @return              商品信息
+     */
+    List<GoodsEntity> queryGoodsStockByQueryGoodsVoList(List<QueryGoodsVo> queryGoodsVoList);
 }

+ 12 - 1
kmall-admin/src/main/java/com/kmall/admin/service/impl/GoodsServiceImpl.java

@@ -13,6 +13,7 @@ import com.kmall.admin.entity.*;
 import com.kmall.admin.entity.kmall2eccs.KtoEccsEntity;
 import com.kmall.admin.entity.mk.MkActivitiesEntity;
 import com.kmall.admin.entity.shop.ShopErrorPriceRecordEntity;
+import com.kmall.admin.haikong.vo.QueryGoodsVo;
 import com.kmall.admin.service.*;
 import com.kmall.admin.service.kmall2eccs.KtoEccsService;
 import com.kmall.admin.service.mk.MkActivitiesService;
@@ -27,7 +28,6 @@ import com.kmall.common.constant.Dict;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
 import com.kmall.common.utils.*;
 import com.kmall.manager.manager.redis.JedisUtil;
-import io.swagger.models.auth.In;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -2412,6 +2412,17 @@ public class GoodsServiceImpl implements GoodsService {
     }
 
     /**
+     * 查询库存及sku的信息,查询出来的库存是门店的库存
+     *
+     * @param queryGoodsVoList 查询条件,包含商品条码、sku、门店id
+     * @return 商品信息
+     */
+    @Override
+    public List<GoodsEntity> queryGoodsStockByQueryGoodsVoList(List<QueryGoodsVo> queryGoodsVoList) {
+        return goodsDao.queryGoodsStockByQueryGoodsVoList(queryGoodsVoList);
+    }
+
+    /**
      * 选择拉取
      * @param ids
      */

+ 32 - 13
kmall-admin/src/main/java/com/kmall/admin/service/impl/OrderServiceImpl.java

@@ -29,11 +29,12 @@ import com.kmall.admin.entity.vip.Mall2MemberPointsEntity;
 import com.kmall.admin.entity.vip.Mall2PointsRulesEntity;
 import com.kmall.admin.fromcomm.dao.SysConfigDao;
 import com.kmall.admin.fromcomm.entity.SysUserEntity;
+import com.kmall.admin.haikong.utils.ListUtils;
+import com.kmall.admin.haikong.vo.QueryGoodsVo;
 import com.kmall.admin.haikong.client.HaiKongMemberTemplate;
 import com.kmall.admin.haikong.client.HaiKongWarehouseTemplate;
 import com.kmall.admin.haikong.config.HaiKongProperties;
 import com.kmall.admin.haikong.dto.MemberInfoDTO;
-import com.kmall.admin.haikong.task.MemberSysAccessTokenRefreshTask;
 import com.kmall.admin.haikong.utils.Response;
 import com.kmall.admin.service.*;
 import com.kmall.admin.service.kmall2eccs.KtoEccsService;
@@ -2046,29 +2047,46 @@ public class OrderServiceImpl implements OrderService {
         BigDecimal totalTax = BigDecimal.ZERO;
 
         List<OrderGoodsEntity> orderGoodsEntities = new ArrayList<>();
-        for (LinkedHashMap map : goodsList) {
+
+        // TODO 根据商品条码、sku、门店id查询相对应的商品信息,并组装成对象
+        List<QueryGoodsVo> queryGoodsVoList = new ArrayList<>();
+        goodsList.forEach(map -> {
+            QueryGoodsVo queryGoodsVo = new QueryGoodsVo();
+            queryGoodsVo.setProdBarcode((String) map.get("prodBarcode"));
+            queryGoodsVo.setSku((String) map.get("goodsSn"));
+            queryGoodsVo.setStoreId(storeId);
+            queryGoodsVo.setSellVolume((Integer) map.get("sellVolume"));
+            queryGoodsVo.setRetailPrice(new BigDecimal(String.valueOf(map.get("retailPrice"))));
+            queryGoodsVo.setGoodstaxes(new BigDecimal(String.valueOf(map.get("goodstaxes"))));
+            queryGoodsVo.setDisCountedPrice(new BigDecimal(String.valueOf(map.get("disCountedPrice"))));
+            queryGoodsVoList.add(queryGoodsVo);
+        });
+        // 将在循环中查询数据库改为一次性查询
+        List<GoodsEntity> goodsEntityList = goodsService.queryGoodsStockByQueryGoodsVoList(queryGoodsVoList);
+        // 复制集合数据
+        ListUtils listUtils = BeanUtils.instantiate(ListUtils.class);
+        listUtils.copyList(goodsEntityList, queryGoodsVoList);
+
+        for (QueryGoodsVo goodsEntity : queryGoodsVoList) {
             OrderGoodsEntity orderGoodsEntity = new OrderGoodsEntity();
             // 要购买的数量
-            Integer sellVolume = (Integer) map.get("sellVolume");
+            Integer sellVolume = goodsEntity.getSellVolume();
             // 条码
-            String prodBarcode = (String) map.get("prodBarcode");
+            String prodBarcode = goodsEntity.getProdBarcode();
             // 当前sku
-            String sku = (String) map.get("goodsSn");
+            String sku = goodsEntity.getSku();
             // 订单金额(含税价),订单总金额,用户支付的金额
-            BigDecimal retailPrice = new BigDecimal(String.valueOf(map.get("retailPrice")));
+            BigDecimal retailPrice = goodsEntity.getRetailPrice();
             // 商品预估税率
-            BigDecimal goodsTaxes = new BigDecimal(String.valueOf(map.get("goodstaxes")));
+            BigDecimal goodsTaxes = goodsEntity.getGoodstaxes();
             // 商品优惠金额
-            BigDecimal disCountedPrice = new BigDecimal(String.valueOf(map.get("disCountedPrice")));
+            BigDecimal disCountedPrice = goodsEntity.getDisCountedPrice();
             // 商品金额(不包含税的价格),推送海关电子订单需要
             goodsPrice = goodsPrice.add(retailPrice.subtract(goodsTaxes));
             // 累加订单价格(含税价)
             orderPrice = orderPrice.add(retailPrice);
             // 总税款
             totalTax = totalTax.add(goodsTaxes);
-
-            // 根据商品条码,门店id,sku查找库存,这里查询门店的库存
-            GoodsEntity goodsEntity = goodsService.queryGoodsStockByBarcodeAndStoreIdAndSku(prodBarcode, storeId, sku);
             // 当前sku
             String currentSku = goodsEntity.getSku();
             // TODO 判断库存。。
@@ -2081,7 +2099,7 @@ public class OrderServiceImpl implements OrderService {
             // 当前出区数
             Integer exitRegionNumber = goodsEntity.getExitRegionNumber();
             // 门店库存
-            Integer stockNum = Integer.parseInt(goodsEntity.getStockNum());
+            Integer stockNum = goodsEntity.getStockNum();
             // 保税仓库存 + 门店库存 - 出区数 >= 购买数
             if (!((warehouseStock + stockNum) - exitRegionNumber >= sellVolume)) {
                 // 库存不足
@@ -2089,7 +2107,8 @@ public class OrderServiceImpl implements OrderService {
                 throw new ServiceException(String.format("sku【%s】库存不足!商品条码:【%s】,门店库存:【%s】,保税仓库存:【%s】,当前出区数:【%s】", currentSku, prodBarcode, stockNum, warehouseStock, exitRegionNumber));
             }
             // 设置订单详情信息
-            orderGoodsEntity = wrapOrderGoods(orderGoodsEntity, goodsEntity);
+            GoodsEntity entity = new GoodsEntity(goodsEntity);
+            orderGoodsEntity = wrapOrderGoods(orderGoodsEntity, entity);
             orderGoodsEntities.add(orderGoodsEntity);
         }
         // 2. 校验是否是会员,调用会员系统查询会员信息,查询接口:

+ 17 - 0
kmall-admin/src/main/resources/mybatis/mapper/GoodsDao.xml

@@ -1140,5 +1140,22 @@
         and r.stock_num > 0 order by r.stock_num desc
     </select>
 
+    <select id="queryGoodsStockByQueryGoodsVoList" resultType="com.kmall.admin.entity.GoodsEntity">
+        SELECT
+            a.id,a.sku,a.goods_number,a.goods_sn,a.name,a.list_pic_url,a.prod_barcode,r.market_price storeMarketPrice,r.retail_price storeRetailPrice ,r.stock_num,s.store_name,r.product_id,s.id 'storeId',a.goods_rate as goodsRate,
+            a.hs_code as hsCode , a.legal_unit1_qty as legalUnit1Qty , a.legal_unit2_qty as legalUnit2Qty,a.ciq_prod_model as ciqProdModel,a.to_be_restored, r.stock_num, r.exit_region_number as exitRegionNumber
+        FROM
+            mall_goods a
+        LEFT JOIN mall_product_store_rela r ON r.goods_id = a.id
+        inner join mall_store s on r.store_id=s.id
+        where
+        a.is_on_sale = 1
+        and
+        <foreach collection="list" item="item" open="(" separator=" or " close=")">
+            (a.prod_barcode = #{item.prodBarcode}  and r.store_id = #{item.storeId} and a.sku = #{item.sku})
+        </foreach>
+        and r.stock_num > 0
+    </select>
+
 
 </mapper>

+ 65 - 0
kmall-admin/src/test/java/com/kmall/admin/Test.java

@@ -0,0 +1,65 @@
+package com.kmall.admin;
+
+import com.kmall.admin.entity.GoodsEntity;
+import com.kmall.admin.haikong.utils.ListUtils;
+import com.kmall.admin.haikong.vo.QueryGoodsVo;
+import com.kmall.admin.service.GoodsService;
+import org.junit.runner.RunWith;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author lhm
+ * @createDate 2021-11-15
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {
+        "classpath:spring/spring-main.xml",
+        "classpath:spring/spring-context.xml",
+        "classpath:spring/spring-mvc.xml",
+        "classpath:spring/spring-shiro.xml"
+})
+@WebAppConfiguration
+public class Test {
+
+    @Autowired
+    private GoodsService goodsService;
+
+
+    @org.junit.Test
+    public void testQueryGoodsStockByQueryGoodsVoList() {
+        ListUtils listUtils = BeanUtils.instantiate(ListUtils.class);
+
+        List<QueryGoodsVo> list = new ArrayList<>();
+
+        QueryGoodsVo queryGoodsVo = new QueryGoodsVo();
+        queryGoodsVo.setStoreId(171);
+        queryGoodsVo.setSku("ISZWCW50466");
+        queryGoodsVo.setProdBarcode("9421033250865");
+
+        QueryGoodsVo queryGoodsVo1 = new QueryGoodsVo();
+        queryGoodsVo1.setStoreId(163);
+        queryGoodsVo1.setSku("ISZWCW50466");
+        queryGoodsVo1.setProdBarcode("9421033250865");
+
+        list.add(queryGoodsVo);
+        list.add(queryGoodsVo1);
+
+        List<GoodsEntity> goodsEntityList = goodsService.queryGoodsStockByQueryGoodsVoList(list);
+
+        listUtils.copyList(goodsEntityList, list);
+
+        System.out.println(list);
+        System.out.println(goodsEntityList);
+
+
+
+    }
+
+}