Browse Source

Merge branch 'feature/eccs-upgrade' of lvjian/eccs into feature/eccs-upgrade

吕健 2 years ago
parent
commit
7e681313db

+ 21 - 0
eccs-biz/src/main/java/com/emato/biz/domain/mall/InventoryDataDTO.java

@@ -0,0 +1,21 @@
+package com.emato.biz.domain.mall;
+
+/**
+ * 库存数据 DTO
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/4/21 14:18
+ */
+public class InventoryDataDTO extends InventoryDataPushVo {
+
+    private String sku;
+
+    public String getSku() {
+        return sku;
+    }
+
+    public void setSku(String sku) {
+        this.sku = sku;
+    }
+}

+ 10 - 1
eccs-biz/src/main/java/com/emato/biz/domain/mall/InventoryDataPushVo.java

@@ -2,7 +2,7 @@ package com.emato.biz.domain.mall;
 
 import java.io.Serializable;
 
-public class InventoryDataPushVo implements Serializable {
+public class InventoryDataPushVo implements Serializable,Cloneable {
 
     //条形码
     private String barcode;
@@ -80,4 +80,13 @@ public class InventoryDataPushVo implements Serializable {
     public void seteMatou(Integer eMatou) {
         this.eMatou = eMatou;
     }
+
+    /**
+     * 实现克隆方法进行拷贝
+     */
+    @Override
+    public InventoryDataPushVo clone() throws CloneNotSupportedException {
+        return (InventoryDataPushVo) super.clone();
+    }
+
 }

+ 52 - 7
eccs-biz/src/main/java/com/emato/biz/domain/warehouse/PullInveQueryVO.java

@@ -2,6 +2,9 @@ package com.emato.biz.domain.warehouse;
 
 import com.emato.biz.config.OmsConfig;
 
+import java.util.List;
+import java.util.Set;
+
 /**
  * 拉取库存 VO
  *
@@ -12,6 +15,16 @@ import com.emato.biz.config.OmsConfig;
 public class PullInveQueryVO {
 
     /**
+     * 页
+     */
+    private Integer page;
+
+    /**
+     * 页数
+     */
+    private Integer limit;
+
+    /**
      * 商户号
      */
     private String merchId;
@@ -27,26 +40,58 @@ public class PullInveQueryVO {
     private String sku;
 
     /**
-     * 
+     * 门店编号
      */
-    private Integer page;
+    private String shopSn;
 
     /**
-     * 页数
+     * 门店列表
      */
-    private Integer limit;
+    private List<String> shopSnList;
+
+    /**
+     * sku 集合
+     */
+    private Set<String> skuSets;
 
     @Override
     public String toString() {
         return "PullInveQueryVO{" +
-                "merchId='" + merchId + '\'' +
+                "page=" + page +
+                ", limit=" + limit +
+                ", merchId='" + merchId + '\'' +
                 ", thirdMerchId='" + thirdMerchId + '\'' +
                 ", sku='" + sku + '\'' +
-                ", page=" + page +
-                ", limit=" + limit +
+                ", shopSn='" + shopSn + '\'' +
+                ", shopSnList=" + shopSnList +
+                ", skuSets=" + skuSets +
                 '}';
     }
 
+    public Set<String> getSkuSets() {
+        return skuSets;
+    }
+
+    public void setSkuSets(Set<String> skuSets) {
+        this.skuSets = skuSets;
+    }
+
+    public String getShopSn() {
+        return shopSn;
+    }
+
+    public void setShopSn(String shopSn) {
+        this.shopSn = shopSn;
+    }
+
+    public List<String> getShopSnList() {
+        return shopSnList;
+    }
+
+    public void setShopSnList(List<String> shopSnList) {
+        this.shopSnList = shopSnList;
+    }
+
     public String getThirdMerchId() {
         return thirdMerchId;
     }

+ 43 - 0
eccs-biz/src/main/java/com/emato/biz/factory/InventoryVOFactory.java

@@ -0,0 +1,43 @@
+package com.emato.biz.factory;
+
+import com.emato.biz.domain.mall.InventoryDataDTO;
+import com.emato.biz.domain.mall.InventoryDataPushVo;
+import io.swagger.models.auth.In;
+
+/**
+ * 库存克隆工厂
+ *
+ * @author frankeleyn
+ * @email lvjian@qhdswl.com
+ * @date 2023/4/21 15:57
+ */
+public class InventoryVOFactory {
+
+    // 新增一个原型
+    private static InventoryDataPushVo protoType = new InventoryDataPushVo();
+
+
+    /**
+     * 创建库存 VO
+     *
+     * @param inventoryDTO
+     * @return
+     */
+    public static InventoryDataPushVo create(InventoryDataDTO inventoryDTO){
+        InventoryDataPushVo clone;
+        try {
+            clone = protoType.clone();
+        } catch (CloneNotSupportedException e) {
+            clone = new InventoryDataPushVo();
+        }
+        clone.setBarcode(inventoryDTO.getBarcode());
+        clone.setPlu(inventoryDTO.getPlu());
+        clone.setMychemId(inventoryDTO.getMychemId());
+        clone.setProductName(inventoryDTO.getProductName());
+        clone.setShopSn(inventoryDTO.getShopSn());
+        clone.setShopInvent(inventoryDTO.getShopInvent());
+        clone.seteMatou(inventoryDTO.geteMatou());
+        return clone;
+    }
+
+}

+ 2 - 1
eccs-biz/src/main/java/com/emato/biz/mapper/mall/InventoryDataMapper.java

@@ -1,5 +1,6 @@
 package com.emato.biz.mapper.mall;
 
+import com.emato.biz.domain.mall.InventoryDataDTO;
 import com.emato.biz.domain.mall.InventoryDataPushVo;
 import com.emato.biz.domain.mall.InventoryDataVo;
 
@@ -15,7 +16,7 @@ public interface InventoryDataMapper {
      * @param pageSize
      * @return
      */
-    List<InventoryDataPushVo> selectInventoryData(int pageIndex, int pageSize);
+    List<InventoryDataDTO> selectInventoryData(int pageIndex, int pageSize);
 
     /**
      * 查询库存数据总条数

+ 8 - 0
eccs-biz/src/main/java/com/emato/biz/mapper/warehouse/WbInveMngMapper.java

@@ -27,4 +27,12 @@ public interface WbInveMngMapper {
      * @param oWbInveMng
      */
     void saveOrUpdate(OWbInveMng oWbInveMng);
+
+    /**
+     * 根据 SKU 查询库存数量
+     *
+     * @param sku
+     * @return
+     */
+    OWbInveMng selectBySku(String sku);
 }

+ 24 - 5
eccs-biz/src/main/java/com/emato/biz/service/impl/InventoryServiceImpl.java

@@ -2,12 +2,16 @@ package com.emato.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.emato.biz.domain.OutRequest;
+import com.emato.biz.domain.mall.InventoryDataDTO;
 import com.emato.biz.domain.mall.InventoryDataPushVo;
 import com.emato.biz.domain.mall.InventoryDataVo;
 import com.emato.biz.domain.mall.InventoryReqVO;
 import com.emato.biz.domain.merchant.ThirdMerchantBiz;
+import com.emato.biz.domain.warehouse.OWbInveMng;
 import com.emato.biz.exception.Assert;
+import com.emato.biz.factory.InventoryVOFactory;
 import com.emato.biz.mapper.mall.InventoryDataMapper;
+import com.emato.biz.mapper.warehouse.WbInveMngMapper;
 import com.emato.biz.service.SignService;
 import com.emato.biz.service.mall.ISalesDetaiServicel;
 import com.emato.biz.service.mall.InventoryService;
@@ -25,10 +29,8 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 库存业务接口实现类
@@ -48,6 +50,9 @@ public class InventoryServiceImpl implements InventoryService {
     @Resource
     private InventoryDataMapper inventoryDataMapper;
 
+    @Resource
+    private WbInveMngMapper wbInveMngMapper;
+
     @Autowired
     private ISalesDetaiServicel salesDataService;
 
@@ -90,7 +95,21 @@ public class InventoryServiceImpl implements InventoryService {
             pageIndex = (pageIndex - 1) * pageSize;
 
             // 查询库存数据
-            List<InventoryDataPushVo> inventoryData = inventoryDataMapper.selectInventoryData(pageIndex, pageSize);
+            List<InventoryDataDTO> inventoryDataDB = inventoryDataMapper.selectInventoryData(pageIndex, pageSize);
+
+            List<InventoryDataPushVo> inventoryData = inventoryDataDB.stream().map(inventoryDataDTO -> {
+                // 将展示 sku 转为跨境电商 sku 查询库存
+                String kjdsSku = inventoryDataDTO.getSku().replace("ISZWCW", "ISCWCN");
+                // 查询 sku
+                OWbInveMng wbInveMng = wbInveMngMapper.selectBySku(kjdsSku);
+                if (Objects.nonNull(wbInveMng)) {
+                    int validNum = Math.toIntExact(wbInveMng.getValidNum());
+                    inventoryDataDTO.seteMatou(inventoryDataDTO.geteMatou() + validNum);
+                }
+
+                return InventoryVOFactory.create(inventoryDataDTO);
+            }).collect(Collectors.toList());
+
             // 查询库存记录总数
             int inventoryTotal = inventoryDataMapper.selectInventoryTotal();
 

+ 50 - 16
eccs-biz/src/main/java/com/emato/biz/service/impl/OWbMerchShopInveServiceImpl.java

@@ -3,14 +3,18 @@ package com.emato.biz.service.impl;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.emato.biz.config.OmsConfig;
+import com.emato.biz.domain.merchant.ThirdMerchantBiz;
 import com.emato.biz.domain.warehouse.OWbInveMng;
 import com.emato.biz.domain.warehouse.Page;
 import com.emato.biz.domain.warehouse.PullInveQueryVO;
+import com.emato.biz.mapper.merchant.ThirdMerchantBizMapper;
 import com.emato.biz.mapper.warehouse.WbMerchShopInveMapper;
 import com.emato.biz.util.OmsDataUtil;
 import com.emato.common.core.domain.AjaxResult;
@@ -44,8 +48,12 @@ public class OWbMerchShopInveServiceImpl implements IOWbMerchShopInveService
     @Resource
     private WbMerchShopInveMapper wbMerchShopInveMapper;
 
+    @Resource
+    private ThirdMerchantBizMapper thirdMerchantBizMapper;
+
     private static final Logger log = LoggerFactory.getLogger(OWbMerchShopInveServiceImpl.class);
 
+
     /**
      * 拉取门店库存数据
      *
@@ -54,16 +62,18 @@ public class OWbMerchShopInveServiceImpl implements IOWbMerchShopInveService
      */
     @Override
     public AjaxResult pullShopInve(PullInveQueryVO queryVO) {
-        // 声明处理数量
-        AtomicInteger rows = new AtomicInteger(0);
+        log.debug("queryVO => {}", queryVO);
+
         // 声明页数
         int page = 1;
-        queryVO.setPage(page);
-        queryVO.setLimit(10);
+        // 处理查询参数
+        setQueryVO(queryVO, page, OmsConfig.getQuerySize());
 
+        // 处理数量
+        AtomicInteger rows = new AtomicInteger(0);
         // 查询 OMS 分页数据
         Optional<Page<OWbMerchShopInve>> firstPageOpt =
-                OmsDataUtil.fetchOmsPageData(queryVO, OmsConfig.getQueryMngInveUrl(), OWbMerchShopInve.class);
+                OmsDataUtil.fetchOmsPageData(queryVO, OmsConfig.getQueryShopMngInveUrl(), OWbMerchShopInve.class);
 
         // 如果有数据
         firstPageOpt.ifPresent(firstPage -> {
@@ -72,14 +82,12 @@ public class OWbMerchShopInveServiceImpl implements IOWbMerchShopInveService
             // 插入数据库
             firstPage.getList().stream().forEach(obj -> {
                 // 插入数据库
-                wbMerchShopInveMapper.saveOrUpdate(obj);
+                //wbMerchShopInveMapper.saveOrUpdate(obj);
                 // 处理数据条数加 1
                 rows.getAndIncrement();
             });
 
-            List<CompletableFuture<Void>> tasks = new ArrayList<>();
-
-            for(int pageNum = 2; pageNum <= firstPage.getTotalPage(); pageNum++) {
+            /*for(int pageNum = page+1; pageNum <= firstPage.getTotalPage(); pageNum++) {
                 log.debug("当前拉取的页数 => {}", pageNum);
                 queryVO.setPage(pageNum);
                 // 分页拉取远程数据
@@ -88,13 +96,7 @@ public class OWbMerchShopInveServiceImpl implements IOWbMerchShopInveService
                     wbMerchShopInveMapper.saveOrUpdate(obj);
                     rows.getAndIncrement();
                 });
-                // 查询 OMS 数据
-                /*CompletableFuture<Void> task = CompletableFuture.runAsync(() -> {
-                }, threadPoolExecutor);
-                // 将任务添加到列表中
-                tasks.add(task);*/
-            }
-            CompletableFuture.allOf(tasks.toArray(new CompletableFuture[0])).join();
+            }*/
 
         });
 
@@ -250,4 +252,36 @@ public class OWbMerchShopInveServiceImpl implements IOWbMerchShopInveService
         return 0;
 
     }
+
+    /**
+     * 处理查询参数
+     *
+     * @param queryVO
+     * @param page
+     * @param limit
+     */
+    private void setQueryVO(PullInveQueryVO queryVO, int page, int limit) {
+        queryVO.setPage(page);
+        queryVO.setLimit(limit);
+
+        // 查询是否是三方商户
+        ThirdMerchantBiz thirdMerchantBiz = thirdMerchantBizMapper.selectByClientMerchSn(queryVO.getMerchId());
+        if (Objects.nonNull(thirdMerchantBiz)) {
+            // 如果是三方商户,查询条件加入三方商户
+            queryVO.setThirdMerchId(thirdMerchantBiz.getThirdMerchSn());
+        }
+
+        // 将 sku 变成 skuSet 参数
+        if (StrUtil.isNotBlank(queryVO.getSku())) {
+            List<String> skus = StrUtil.split(queryVO.getSku(), ",");
+            Set<String> skuSet = skus.stream().collect(Collectors.toSet());
+            queryVO.setSkuSets(skuSet);
+        }
+
+        // 将门店编号转为门店列表
+        if (StrUtil.isNotBlank(queryVO.getShopSn())) {
+            List<String> shopList = StrUtil.split(queryVO.getShopSn(), ",");
+            queryVO.setShopSnList(shopList);
+        }
+    }
 }

+ 2 - 1
eccs-biz/src/main/java/com/emato/biz/util/OmsDataUtil.java

@@ -83,7 +83,8 @@ public class OmsDataUtil {
                 // 如果 page 有值就返回
                 return Optional.of(page);
         }else {
-            throw new ServiceException(jsonObject.getString("msg"));
+            log.error("OMS 返回异常信息 => {}", jsonObject);
+            throw new ServiceException("请求 OMS 异常!");
         }
 
         return Optional.empty();

+ 29 - 17
eccs-biz/src/main/resources/mapper/biz/mall/InventoryDataMapper.xml

@@ -14,24 +14,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result column="valid_num" property="eMatou" />
     </resultMap>
 
+    <resultMap id="inventoryDataDTO" type="com.emato.biz.domain.mall.InventoryDataDTO">
+        <result column="prod_barcode" property="barcode" />
+        <result column="sku" property="sku" />
+        <result column="plu" property="plu" />
+        <result column="mychem_id" property="mychemId" />
+        <result column="name" property="productName"/>
+        <result column="shop_sn" property="shopSn" />
+        <result column="shop_inve" property="shopInvent" />
+        <result column="valid_num" property="eMatou" />
+    </resultMap>
+
     <!-- 查询库存数据 -->
-    <select id="selectInventoryData"  parameterType="com.emato.biz.domain.mall.InventoryReqVO" resultMap="inventoryDataVO">
+    <select id="selectInventoryData"  parameterType="com.emato.biz.domain.mall.InventoryReqVO" resultMap="inventoryDataDTO">
         SELECT
-            t.prod_barcode,
-            t.plu,
-            t.mychem_id,
-            t.name,
-            t1.shop_sn,
-            t1.shop_inve,
+            t1.prod_barcode,
+            t1.sku,
+            t1.plu,
+            t1.mychem_id,
+            t1.name,
+            t.shop_sn,
+            t.shop_inve,
             t2.valid_num
         FROM
-            mall_goods t
-            LEFT JOIN wb_merch_shop_inve t1 ON t.sku = t1.sku
+            wb_merch_shop_inve t
+            INNER JOIN mall_goods t1 ON t.sku = t1.sku
             LEFT JOIN wb_inve_mng t2 ON t2.sku = t.sku
         <where>
-            t1.is_valid = 0
-            AND t2.inve_status = 0
-            AND t2.is_valid = 0
+            t.is_valid = '0'
+            AND t2.inve_status = '0'
+            AND t2.is_valid = '0'
         </where>
         <if test="pageIndex != null and pageSize != null">
             limit #{pageIndex}, #{pageSize}
@@ -43,13 +55,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT
             COUNT(1)
         FROM
-            mall_goods t
-            LEFT JOIN wb_merch_shop_inve t1 ON t.sku = t1.sku
+            wb_merch_shop_inve t
+            INNER JOIN mall_goods t1 ON t.sku = t1.sku
             LEFT JOIN wb_inve_mng t2 ON t2.sku = t.sku
         <where>
-            t1.is_valid = 0
-            AND t2.inve_status = 0
-            AND t2.is_valid = 0
+            t.is_valid = '0'
+            AND t2.inve_status = '0'
+            AND t2.is_valid = '0'
         </where>
     </select>
 

+ 10 - 0
eccs-biz/src/main/resources/mapper/biz/warehouse/WbInveMngMapper.xml

@@ -65,6 +65,16 @@
             t.mod_time
     </sql>
 
+    <!-- 根据 sku 查询库存 -->
+    <select id="selectBySku" resultMap="OWbInveMngResult">
+        <include refid="selectOWbInveMngColumn"/>
+        FROM
+            wb_inve_mng t
+        WHERE
+            t.is_valid = '0'
+            AND t.sku = #{sku}
+    </select>
+
     <!-- 查询仓库库存 -->
     <select id="selectWbInveMngList" resultType="com.emato.biz.domain.warehouse.OWbInveMng">
         <include refid="selectOWbInveMngColumn"/>

+ 2 - 1
eccs-biz/src/main/resources/oms-config.yml

@@ -22,7 +22,8 @@ oms:
   #queryMngInveUrl: http://127.0.0.1:8086/al/queryOmsInfo/queryInveMng
   queryMngInveUrl: http://127.0.0.1:8086/al/queryOmsInfo/queryWbInve
   # 查询门店库存接口
-  queryShopMngInveUrl: http://127.0.0.1:8086/al/queryOmsInfo/queryShopInveMng
+  #queryShopMngInveUrl: http://127.0.0.1:8086/al/queryOmsInfo/queryShopInveMng
+  queryShopMngInveUrl: http://127.0.0.1:8086/al/queryOmsInfo/queryWbShopInve
   # 查询入库单接口
   queryInveReceiptUrl: http://127.0.0.1:8086/al/queryOmsInfo/queryInveReceiptGoods
   # 查询入库单明细接口

+ 1 - 4
eccs-ui/src/api/warehouse/shopinve.js

@@ -60,9 +60,6 @@ export function pullStoreInvemng(query,_this) {
     params: query,
     timeout: 3600 * 1000,
     loading: document.body
-  }).then(function (response) {
-    _this.$alert("拉取成功...");
-  }).catch(function () {
-    _this.$alert("拉取异常...");
   })
+  
 }

+ 2 - 2
eccs-ui/src/views/warehouse/invemng/index.vue

@@ -515,10 +515,10 @@ export default {
     },
     /** 拉取按钮操作 */
     handlePull() {
-      const queryParams = this.pullForm;
+      let queryParams = this.pullForm;
       console.log("传入的拉取参数 => ", queryParams);
       // 添加遮罩
-      const _this = this;
+      let _this = this;
       let that = this;
       this.$confirm('是否确认拉取仓库库存?', "警告", {
         confirmButtonText: "确定",

+ 64 - 6
eccs-ui/src/views/warehouse/shopinve/index.vue

@@ -154,7 +154,7 @@
           type="warning"
           icon="el-icon-download"
           size="mini"
-          @click="handlePull"
+          @click="openPullDialog"
           v-hasPermi="['biz:storeinvemng:pull']"
         >拉取</el-button>
       </el-col>
@@ -279,12 +279,31 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+
+    <!-- 拉取 dialog -->
+    <el-dialog title="拉取库存" :visible.sync="pullDialog" width="500px" append-to-body>
+      <el-form ref="pullForm" :model="pullForm" :rules="rules" label-width="80px">
+
+        <el-form-item label="门店编号" prop="shopSn">
+          <el-input v-model="pullForm.shopSn" placeholder="请输入门店编号" />
+        </el-form-item>
+
+        <el-form-item label="SKU" prop="sku">
+          <el-input v-model="pullForm.sku" placeholder="请输入SKU" />
+        </el-form-item>
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="handlePull">确 定</el-button>
+        <el-button @click="closePullDialog">取 消</el-button>
+      </div>
+    </el-dialog>
+
   </div>
 </template>
 
 <script>
 import { listShopinve, getShopinve, delShopinve, addShopinve, updateShopinve, exportShopinve,pullStoreInvemng } from "@/api/warehouse/shopinve";
-import {pullInvemng} from "@/api/warehouse/invemng";
 
 export default {
   name: "Shopinve",
@@ -292,6 +311,10 @@ export default {
   },
   data() {
     return {
+      // 拉取表单
+      pullForm: {},
+      // 拉取数据弹框
+      pullDialog: false,
       // 遮罩层
       loading: true,
       // 选中数组
@@ -358,6 +381,30 @@ export default {
     });
   },
   methods: {
+        /**
+     * 打开拉取库存对话框
+     */
+    openPullDialog() {
+      this.resetPullForm();
+      this.pullDialog = true;
+    },
+    /**
+     * 关闭拉取库存对话框
+     */
+    closePullDialog() {
+      this.pullDialog = false;
+      this.resetPullForm();
+    },
+    /**
+     * 清除表单数据
+     */
+    resetPullForm() {
+      this.pullForm = {
+        merchId: null,
+        sku: null
+      };
+      this.resetForm("pullForm");
+    },
     /** 查询商户店面库存,包括跨境,一般贸易列表 */
     getList() {
       this.loading = true;
@@ -507,15 +554,26 @@ export default {
     },
     /** 拉取按钮操作 */
     handlePull() {
-      const queryParams = this.queryParams;
+      let queryParams = this.pullForm;
+      console.log("传入的拉取参数 => ", queryParams);
       // 添加遮罩
-      const _this=this
-      this.$confirm('是否确认拉取保税仓所有库存?', "警告", {
+      let _this = this;
+      let that = this;
+      this.$confirm('是否确认拉取门店库存?', "警告", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning"
       }).then(function() {
-        return pullStoreInvemng(queryParams,_this);
+        return pullStoreInvemng(queryParams).then(res => {
+          // 关闭弹出框
+          that.closePullDialog();
+          _this.$alert("拉取库存成功...");
+        }).catch(err => {
+          // 关闭弹出框
+          that.closePullDialog();
+          _this.$alert("拉取库存异常...");
+        })
+
       }).then(function(){
         _this.handleQuery();
       })