Przeglądaj źródła

feat: 库存 & 商品单价查询

xdd 2 tygodni temu
rodzic
commit
1617f2260b

+ 63 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtBarcodeDto.java

@@ -0,0 +1,63 @@
+package com.fs.erp.dto.wdt;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 条码信息 DTO
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtBarcodeDto {
+
+    /**
+     * 货品ID
+     */
+    @JsonProperty("goods_id")
+    private String goodsId;
+
+    /**
+     * 规格ID
+     */
+    @JsonProperty("spec_id")
+    private String specId;
+
+    /**
+     * 条码信息
+     */
+    @JsonProperty("barcode")
+    private String barcode;
+
+    /**
+     * target_id的类型 1普通规格 2组合装
+     */
+    @JsonProperty("type")
+    private String type;
+
+    /**
+     * 是否为主条码 0 否 1 是
+     */
+    @JsonProperty("is_master")
+    private String isMaster;
+
+    /**
+     * 扫码一次对应出库数量
+     */
+    @JsonProperty("out_target_num")
+    private String outTargetNum;
+
+    /**
+     * 扫码一次对应入库货品数量
+     */
+    @JsonProperty("target_num")
+    private String targetNum;
+
+    /**
+     * 最后修改时间
+     */
+    @JsonProperty("modified")
+    private String modified;
+}

+ 43 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtBaseResponseDTO.java

@@ -0,0 +1,43 @@
+package com.fs.erp.dto.wdt;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * Base API Response Structure
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtBaseResponseDTO {
+
+    /**
+     * 状态码:0表示成功,其他表示失败
+     */
+    @JsonProperty("code")
+    private Integer code;
+
+    /**
+     * 错误描述
+     */
+    @JsonProperty("message")
+    private String message;
+
+    /**
+     * 符合条件的数据条数,用来分页 当page_no = 0时返回
+     */
+    @JsonProperty("total_count")
+    private Integer totalCount;
+
+    /**
+     * 货品节点列表
+     */
+    @JsonProperty("goods_list")
+    private List<ErpWdtGoodsDto> goodsList;
+
+}

+ 227 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtGoodsDto.java

@@ -0,0 +1,227 @@
+package com.fs.erp.dto.wdt;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 货品节点 (SPU) DTO
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtGoodsDto {
+
+    /**
+     * 货品ID (货品表主键)
+     */
+    @JsonProperty("goods_id")
+    private Integer goodsId;
+
+    /**
+     * 货品编号 (代表SPU所有属性的唯一编号)
+     */
+    @JsonProperty("goods_no")
+    private String goodsNo;
+
+    /**
+     * 货品名称
+     */
+    @JsonProperty("goods_name")
+    private String goodsName;
+
+    /**
+     * 简称
+     */
+    @JsonProperty("short_name")
+    private String shortName;
+
+    /**
+     * 货品别名
+     */
+    @JsonProperty("alias")
+    private String alias;
+
+    /**
+     * 货品类别 0:其它, 1:销售货品, 2:原材料, 3:包装物, 4:周转材料, 5:虚拟商品, 6:固定资产,7:保修配件 8:虚拟代发货品
+     */
+    @JsonProperty("goods_type")
+    private Integer goodsType; // tinyint mapped to Integer
+
+    /**
+     * 规格数
+     */
+    @JsonProperty("spec_count")
+    private Integer specCount;
+
+    /**
+     * 拼音
+     */
+    @JsonProperty("pinyin")
+    private String pinyin;
+
+    /**
+     * 品牌编号
+     */
+    @JsonProperty("brand_no")
+    private String brandNo;
+
+    /**
+     * 品牌名称
+     */
+    @JsonProperty("brand_name")
+    private String brandName;
+
+    /**
+     * 备注
+     */
+    @JsonProperty("remark")
+    private String remark;
+
+    /**
+     * 自定义属性1
+     */
+    @JsonProperty("prop1")
+    private String prop1;
+
+    /**
+     * 自定义属性2
+     */
+    @JsonProperty("prop2")
+    private String prop2;
+
+    /**
+     * 自定义属性3
+     */
+    @JsonProperty("prop3")
+    private String prop3;
+
+    /**
+     * 自定义属性4
+     */
+    @JsonProperty("prop4")
+    private String prop4;
+
+    /**
+     * 自定义属性5
+     */
+    @JsonProperty("prop5")
+    private String prop5;
+
+    /**
+     * 自定义属性6
+     */
+    @JsonProperty("prop6")
+    private String prop6;
+
+    /**
+     * 产地
+     */
+    @JsonProperty("origin")
+    private String origin;
+
+    /**
+     * 分类id
+     */
+    @JsonProperty("class_id")
+    private String classId;
+
+    /**
+     * 分类名称
+     */
+    @JsonProperty("class_name")
+    private String className;
+
+    /**
+     * 品牌ID
+     */
+    @JsonProperty("brand_id")
+    private String brandId;
+
+    /**
+     * 基本单位id
+     */
+    @JsonProperty("unit")
+    private String unit;
+
+    /**
+     * 辅助单位id
+     */
+    @JsonProperty("aux_unit")
+    private String auxUnit;
+
+    /**
+     * 标记
+     */
+    @JsonProperty("flag_id")
+    private String flagId;
+
+    /**
+     * 属性
+     */
+    @JsonProperty("properties")
+    private String properties;
+
+    /**
+     * 版本号,用来检查同时修改的
+     */
+    @JsonProperty("version_id")
+    private String versionId;
+
+    /**
+     * 最后修改时间 格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("modified")
+    private String modified; // Keep as String for direct mapping
+
+    /**
+     * 创建时间 格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("created")
+    private String created; // Keep as String for direct mapping
+
+    /**
+     * 基本单位名称
+     */
+    @JsonProperty("unit_name")
+    private String unitName;
+
+    /**
+     * 辅助单位名称
+     */
+    @JsonProperty("aux_unit_name")
+    private String auxUnitName;
+
+    /**
+     * 标记名称
+     */
+    @JsonProperty("flag_name")
+    private String flagName;
+
+    /**
+     * 创建时间 (ERP客户端需升级至V2.3.8.6及以上版本可获取此字段) 格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("goods_created")
+    private String goodsCreated; // Keep as String
+
+    /**
+     * 最后修改时间 格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("goods_modified")
+    private String goodsModified; // Keep as String
+
+    /**
+     * 是否已删除: 0:未删除 >0代表已删除
+     */
+    @JsonProperty("deleted")
+    private Integer deleted;
+
+    /**
+     * 单品节点列表 (SKU)
+     */
+    @JsonProperty("spec_list")
+    private List<ErpWdtSpecDto> specList;
+}

+ 408 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtSpecDto.java

@@ -0,0 +1,408 @@
+package com.fs.erp.dto.wdt;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 单品节点 (SKU) DTO
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ErpWdtSpecDto {
+
+    /**
+     * 规格ID
+     */
+    @JsonProperty("spec_id")
+    private String specId;
+
+    /**
+     * 商家编码 (代表单品(SKU)所有属性的唯一编号)
+     */
+    @JsonProperty("spec_no")
+    private String specNo;
+
+    /**
+     * 规格码
+     */
+    @JsonProperty("spec_code")
+    private String specCode;
+
+    /**
+     * 主条码,单品下如果有多个条码,会随机返回其中一条条码
+     */
+    @JsonProperty("barcode")
+    private String barcode;
+
+    /**
+     * 规格名称
+     */
+    @JsonProperty("spec_name")
+    private String specName;
+
+    /**
+     * 货品ID
+     */
+    @JsonProperty("goods_id")
+    private Integer goodsId;
+
+    /**
+     * 最低价
+     */
+    @JsonProperty("lowest_price")
+    private BigDecimal lowestPrice;
+
+    /**
+     * 零售价
+     */
+    @JsonProperty("retail_price")
+    private BigDecimal retailPrice;
+
+    /**
+     * 批发价
+     */
+    @JsonProperty("wholesale_price")
+    private BigDecimal wholesalePrice;
+
+    /**
+     * 会员价
+     */
+    @JsonProperty("member_price")
+    private BigDecimal memberPrice;
+
+    /**
+     * 市场价
+     */
+    @JsonProperty("market_price")
+    private BigDecimal marketPrice;
+
+    /**
+     * 自定义价格1
+     */
+    @JsonProperty("custom_price1")
+    private BigDecimal customPrice1;
+
+    /**
+     * 自定义价格2
+     */
+    @JsonProperty("custom_price2")
+    private BigDecimal customPrice2;
+
+    /**
+     * 销售积分
+     */
+    @JsonProperty("sale_score")
+    private Integer saleScore;
+
+    /**
+     * 打包积分
+     */
+    @JsonProperty("pack_score")
+    private Integer packScore;
+
+    /**
+     * 拣货积分
+     */
+    @JsonProperty("pick_score")
+    private Integer pickScore;
+
+    /**
+     * 有效期天数 (保质期)
+     */
+    @JsonProperty("validity_days")
+    private Integer validityDays;
+
+    /**
+     * 最佳销售天数
+     */
+    @JsonProperty("sales_days")
+    private Integer salesDays;
+
+    /**
+     * 最佳收获天数
+     */
+    @JsonProperty("receive_days")
+    private Integer receiveDays;
+
+    /**
+     * 重量
+     */
+    @JsonProperty("weight")
+    private BigDecimal weight;
+
+    /**
+     * 长(CM)
+     */
+    @JsonProperty("length")
+    private BigDecimal length;
+
+    /**
+     * 宽(CM)
+     */
+    @JsonProperty("width")
+    private BigDecimal width;
+
+    /**
+     * 高(CM)
+     */
+    @JsonProperty("height")
+    private BigDecimal height;
+
+    /**
+     * 是否启用序列号 0不启用序列号 1强序列号 2弱序列号
+     */
+    @JsonProperty("is_sn_enable")
+    private Integer isSnEnable; // tinyint mapped to Integer
+
+    /**
+     * 是否允许负库存 0(不允许负库存);1(允许负库存)
+     */
+    @JsonProperty("is_allow_neg_stock")
+    private Integer isAllowNegStock; // tinyint mapped to Integer
+
+    /**
+     * 是否出库不验货 0(出库不验货);1(出库必须验货)
+     */
+    @JsonProperty("is_not_need_examine")
+    private Integer isNotNeedExamine; // tinyint mapped to Integer
+
+    /**
+     * 是否允许0成本 0(不允许0成本);1(允许0成本)
+     */
+    @JsonProperty("is_zero_cost")
+    private Integer isZeroCost; // tinyint mapped to Integer
+
+    /**
+     * 是否允许低于成本价 0(不允许低于成本价);1(允许低于成本价)
+     */
+    @JsonProperty("is_lower_cost")
+    private Integer isLowerCost; // tinyint mapped to Integer
+
+    /**
+     * 是否航空禁运 0(航空不禁运) 1(航空禁运)
+     */
+    @JsonProperty("is_not_use_air")
+    private Integer isNotUseAir; // tinyint mapped to Integer
+
+    /**
+     * 税率
+     */
+    @JsonProperty("tax_rate")
+    private BigDecimal taxRate;
+
+    /**
+     * 大件类别 0非大件1普通大件2独立大件
+     */
+    @JsonProperty("large_type")
+    private Integer largeType; // tinyint mapped to Integer
+
+    /**
+     * 备注
+     */
+    @JsonProperty("remark")
+    private String remark;
+
+    /**
+     * 创建时间 格式:YYYY-MM-DD HH:MM:SS
+     */
+    @JsonProperty("spec_created")
+    private String specCreated; // Keep as String
+
+    /**
+     * 最后修改时间 格式:YYYY-MM-DD HH:MM:SS
+     */
+    @JsonProperty("spec_modified")
+    private String specModified; // Keep as String
+
+    /**
+     * 自定义1
+     */
+    @JsonProperty("prop1")
+    private String prop1;
+
+    /**
+     * 自定义2
+     */
+    @JsonProperty("prop2")
+    private String prop2;
+
+    /**
+     * 自定义3
+     */
+    @JsonProperty("prop3")
+    private String prop3;
+
+    /**
+     * 自定义4
+     */
+    @JsonProperty("prop4")
+    private String prop4;
+
+    /**
+     * 自定义5
+     */
+    @JsonProperty("prop5")
+    private String prop5;
+
+    /**
+     * 自定义6
+     */
+    @JsonProperty("prop6")
+    private String prop6;
+
+    /**
+     * 图片url
+     */
+    @JsonProperty("img_url")
+    private String imgUrl;
+
+    /**
+     * 关联税务表税务编码
+     */
+    @JsonProperty("tax_code_id")
+    private String taxCodeId;
+
+    /**
+     * 是否启用同一批次出库 0,不使用同一批次,1,使用同一批次
+     */
+    @JsonProperty("is_single_batch")
+    private Integer isSingleBatch; // tinyint mapped to Integer
+
+    /**
+     * 水洗标
+     */
+    @JsonProperty("washing_label")
+    private String washingLabel;
+
+    /**
+     * 基本单位
+     */
+    @JsonProperty("unit")
+    private String unit;
+
+    /**
+     * 辅助单位
+     */
+    @JsonProperty("aux_unit")
+    private String auxUnit;
+
+    /**
+     * 标记
+     */
+    @JsonProperty("flag_id")
+    private String flagId;
+
+    /**
+     * 图片在外部空间的key 比如说 云盘的一个 外链
+     */
+    @JsonProperty("img_key")
+    private String imgKey;
+
+    /**
+     * 条码个数
+     */
+    @JsonProperty("barcode_count")
+    private Integer barcodeCount; // smallint mapped to Integer
+
+    /**
+     * 平台货品数量(不包含删除的)
+     */
+    @JsonProperty("plat_spec_count")
+    private Integer platSpecCount; // smallint mapped to Integer
+
+    /**
+     * sn自增数
+     */
+    @JsonProperty("postfix_val")
+    private String postfixVal;
+
+    /**
+     * 最后日期 格式:yyyy-MM-dd
+     */
+    @JsonProperty("last_date")
+    private String lastDate; // Keep as String (Date type)
+
+    /**
+     * 补货方式 0持续补货 1不补货 2低于警戒库存补货
+     */
+    @JsonProperty("replenish_type")
+    private Integer replenishType;
+
+    /**
+     * 是否畅销 0非畅销 1畅销
+     */
+    @JsonProperty("is_popular")
+    private Integer isPopular;
+
+    /**
+     * 备注换货匹配码
+     */
+    @JsonProperty("replace_no")
+    private String replaceNo;
+
+    /**
+     * 单品标记二进制位 1同款备注换货虚拟规格 2是否在备注换货界面展示 4递交自动生成货品
+     */
+    @JsonProperty("spec_mask")
+    private String specMask;
+
+    /**
+     * 同款备注换货--虚拟货品换货比例
+     */
+    @JsonProperty("replace_proportion")
+    private String replaceProportion;
+
+    /**
+     * 扩展字段
+     */
+    @JsonProperty("extra_3")
+    private String extra3;
+
+    /**
+     * 税务编码
+     */
+    @JsonProperty("tax_code")
+    private String taxCode;
+
+    /**
+     * 最后修改时间 格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("modified")
+    private String modified; // Keep as String
+
+    /**
+     * 创建时间 格式:yyyy-MM-dd HH:mm:ss
+     */
+    @JsonProperty("created")
+    private String created; // Keep as String
+
+    /**
+     * 基本单位名称
+     */
+    @JsonProperty("spec_unit_name")
+    private String specUnitName;
+
+    /**
+     * 辅助单位名称
+     */
+    @JsonProperty("spec_aux_unit_name")
+    private String specAuxUnitName;
+
+    /**
+     * 是否已删除:0:未删除 >0代表已删除
+     */
+    @JsonProperty("deleted")
+    private Integer deleted;
+
+    /**
+     * 条码列表
+     */
+    @JsonProperty("barcode_list")
+    private List<ErpWdtBarcodeDto> barcodeList;
+}

+ 19 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtStockDTO.java

@@ -0,0 +1,19 @@
+package com.fs.erp.dto.wdt;
+
+import lombok.Data;
+
+@Data
+public class ErpWdtStockDTO {
+    /**
+     * sku
+     */
+    private String sepc_no;
+    /**
+     * 库存量
+     */
+    private String stock_num;
+    /**
+     * 可用库存量
+     */
+    private String avaliable_num;
+}

+ 37 - 0
fs-service-system/src/main/java/com/fs/erp/dto/wdt/ErpWdtStockRespDTO.java

@@ -0,0 +1,37 @@
+package com.fs.erp.dto.wdt;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class ErpWdtStockRespDTO implements Serializable {
+    /**
+     * 错误码,状态码:0表示成功,其他表示失败
+     */
+    @JsonProperty("code")
+    @NotNull
+    private Integer code;
+
+    /**
+     * 错误描述
+     */
+    @JsonProperty("message")
+    @NotNull
+    private String message;
+
+    /**
+     * 数据条数,只有,page_no = 0 时才返回的符合条件的数据总条数,用来分页
+     */
+    @JsonProperty("total_count")
+    private Integer totalCount;
+
+    /**
+     * 订单列表节点,响应参数的1级数据节点,包含当前页的订单及其明细的数据节点
+     */
+    @JsonProperty("stocks")
+    private List<ErpWdtStockDTO> stocks;
+}

+ 115 - 0
fs-service-system/src/main/java/com/fs/erp/service/impl/WdtErpGoodsServiceImpl.java

@@ -0,0 +1,115 @@
+package com.fs.erp.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.PropertyNamingStrategy;
+import com.alibaba.fastjson.parser.ParserConfig;
+import com.fs.erp.domain.ErpGoods;
+import com.fs.erp.domain.ErpGoodsStock;
+import com.fs.erp.dto.*;
+import com.fs.erp.dto.sdk.wangdian.api.WdtClient;
+import com.fs.erp.dto.wdt.*;
+import com.fs.erp.service.IErpGoodsService;
+import com.hc.openapi.tool.util.ObjectUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+@Primary
+public class WdtErpGoodsServiceImpl implements IErpGoodsService {
+    @Autowired
+    private WdtClient client;
+
+    @Override
+    public BaseResponse addGoods(ErpGoods goods) {
+        return null;
+    }
+
+    @Override
+    public ErpGoodsQueryResponse getGoods(ErpGoodsQueryRequert param) {
+        Map<String,String> map = new HashMap<>();
+        map.put("spec_no",param.getCode());
+        try {
+            String response = client.execute("trade_push.php", map);
+            ParserConfig config = new ParserConfig();
+            config.propertyNamingStrategy = PropertyNamingStrategy.CamelCase;
+            ErpWdtBaseResponseDTO erpWdtBaseResponseDTO =
+                    JSON.parseObject(response, ErpWdtBaseResponseDTO.class, config);
+            if(ObjectUtils.equals(0, erpWdtBaseResponseDTO.getCode())){
+                List<ErpGoods> list = new ArrayList<>();
+
+                List<ErpWdtGoodsDto> goodsList = erpWdtBaseResponseDTO.getGoodsList();
+                for (ErpWdtGoodsDto goodsDto : goodsList) {
+                    ErpGoods erpGoods = new ErpGoods();
+                    erpGoods.setCode(param.getCode());
+                    erpGoods.setName(goodsDto.getGoodsName());
+                    erpGoods.setSimple_name(goodsDto.getShortName());
+                    erpGoods.setCategory_code(String.valueOf(goodsDto.getGoodsType()));
+                    List<ErpWdtSpecDto> specList = goodsDto.getSpecList();
+                    ErpWdtSpecDto erpWdtSpecDto = specList.get(0);
+
+                    // 市场价
+                    erpGoods.setCost_price(erpWdtSpecDto.getMarketPrice());
+                    // 零售价
+                    erpGoods.setSales_price(erpWdtSpecDto.getRetailPrice());
+                    list.add(erpGoods);
+                }
+
+                ErpGoodsQueryResponse erpGoodsQueryResponse = new ErpGoodsQueryResponse();
+                erpGoodsQueryResponse.setItems(list);
+                return erpGoodsQueryResponse;
+            } else {
+                log.info("获取erp商品失败! 错误原因: {}", JSON.toJSONString(erpWdtBaseResponseDTO));
+                throw new RuntimeException(erpWdtBaseResponseDTO.getMessage());
+            }
+
+        } catch (IOException e) {
+            log.info("获取erp商品失败! 错误原因: {}", ExceptionUtils.getStackTrace(e));
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    @Override
+    public ErpGoodsStockQueryResponse getGoodsStock(ErpGoodsStockQueryRequert param) {
+        String barcode = param.getBarcode();
+        Map<String,String> map = new HashMap<>();
+        map.put("spec_no",barcode);
+        try {
+            String response = client.execute("trade_push.php", map);
+            ParserConfig config = new ParserConfig();
+            config.propertyNamingStrategy = PropertyNamingStrategy.CamelCase;
+            ErpWdtStockRespDTO erpWdtStockRespDTO = JSON.parseObject(response, ErpWdtStockRespDTO.class,config);
+            List<ErpGoodsStock> list = new ArrayList<>();
+            if(ObjectUtils.equals(0,erpWdtStockRespDTO.getCode())){
+                List<ErpWdtStockDTO> stocks = erpWdtStockRespDTO.getStocks();
+                for (ErpWdtStockDTO stock : stocks) {
+                    ErpGoodsStock erpGoodsStock = new ErpGoodsStock();
+                    erpGoodsStock.setBarcode(barcode);
+                    erpGoodsStock.setQty(stock.getStock_num());
+                    erpGoodsStock.setSalable_qty(stock.getAvaliable_num());
+                    list.add(erpGoodsStock);
+                }
+            } else {
+                log.info("获取erp库存失败! 错误原因: {}", JSON.toJSONString(erpWdtStockRespDTO));
+                throw new RuntimeException(erpWdtStockRespDTO.getMessage());
+            }
+            ErpGoodsStockQueryResponse erpGoodsStockQueryResponse = new ErpGoodsStockQueryResponse();
+            erpGoodsStockQueryResponse.setStocks(list);
+            return erpGoodsStockQueryResponse;
+        } catch (IOException e) {
+            log.info("获取erp库存失败! 错误原因: {}", ExceptionUtils.getStackTrace(e));
+            throw new RuntimeException(e);
+        }
+    }
+}
+