From e1a480e6385938c31595b586b207b1c8c2b77631 Mon Sep 17 00:00:00 2001
From: youjie <272855983@qq.com>
Date: Tue, 6 Jun 2023 11:32:13 +0800
Subject: [PATCH] WMS-WIS 任务

---
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsService.java                                                       |  31 +++++++++++++++++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java                                                   | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/IReceiptContainerHeaderService.java            |   8 ++++++--
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java    |   9 +++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerHeaderService.java         |   8 ++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java |   9 +++++++++
 6 files changed, 169 insertions(+), 24 deletions(-)

diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsService.java
index 71131bd..c341d92 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsService.java
@@ -13,7 +13,38 @@ public interface WmsService {
      */
     Result sendWmsTask(WmsEntity wmsEntity);
 
+    /**
+     * 创建入库任务
+     * @param  wmsEntity
+     * @return
+     */
     Result createReceiptTask(WmsEntity wmsEntity);
 
+    /**
+     * 创建出库任务
+     * @param  wmsEntity
+     * @return
+     */
     Result createShipmentTask(WmsEntity wmsEntity);
+
+    /**
+     * 创建空托入库
+     * @param  wmsEntity
+     * @return
+     */
+    Result createEmptyIn(WmsEntity wmsEntity);
+
+    /**
+     * 创建空托出库
+     * @param  wmsEntity
+     * @return
+     */
+    Result createEmptyOut(WmsEntity wmsEntity);
+
+    /**
+     * 创建出库查看
+     * @param  wmsEntity
+     * @return
+     */
+    Result createCheckOut(WmsEntity wmsEntity);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java
index 897caae..02806bb 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wms/service/WmsServiceImpl.java
@@ -2,6 +2,7 @@ package org.jeecg.modules.wms.api.wms.service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
@@ -21,6 +22,10 @@ import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptHeaderService
 import org.jeecg.modules.wms.receipt.receiving.domain.Receive;
 import org.jeecg.modules.wms.receipt.receiving.service.IReceiveService;
 import org.jeecg.modules.wms.shipment.shipmentCombination.service.IShipmentCombinationService;
+import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail;
+import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader;
+import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerDetailService;
+import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerHeaderService;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;
 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService;
@@ -62,6 +67,10 @@ public class WmsServiceImpl implements WmsService {
     private IShipmentDetailService shipmentDetailService;
     @Resource
     private IShipmentCombinationService shipmentCombinationService;
+    @Resource
+    private IShipmentContainerHeaderService shipmentContainerHeaderService;
+    @Resource
+    private IShipmentContainerDetailService shipmentContainerDetailService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -75,8 +84,11 @@ public class WmsServiceImpl implements WmsService {
                 break;
             case QuantityConstant.TASK_TYPE_WHOLESHIPMENT:
             case QuantityConstant.TASK_TYPE_SORTINGSHIPMENT:
+                result = wmsService.createShipmentTask(wmsEntity);
+                break;
+            case QuantityConstant.TASK_TYPE_EMPTYRECEIPT:
+                result = wmsService.createReceiptTask(wmsEntity);
                 break;
-
         }
         return result;
     }
@@ -113,6 +125,9 @@ public class WmsServiceImpl implements WmsService {
         erpReceipt.setReceiptHeader(erpReceiptHeader);
         erpReceipt.setReceiptDetailList(erpReceiptDetailList);
         Result result = erpService.receipt(erpReceipt);
+        if (!result.isSuccess()) {
+            return result;
+        }
         ReceiptHeader receiptHeader = receiptHeaderService.getReceiptHeaderByReferCode(referCode, warehouseCode);
         if (receiptHeader == null) {
             return Result.error("WMS下发入库任务失败,没有找到匹配的入库单, 上游单号:" + referCode);
@@ -143,9 +158,9 @@ public class WmsServiceImpl implements WmsService {
             throw new JeecgBootException("WMS下发入库任务失败");
         }
         receiptContainerHeader.setToPort(toPort);
-        boolean success = receiptContainerHeaderService.updateById(receiptContainerHeader);
+        boolean success = receiptContainerHeaderService.updateToPortById(toPort, receiptContainerHeader.getId());
         if (!success) {
-            throw new JeecgBootException("MES下发入库信息,更新入库组盘头失败");
+            throw new JeecgBootException("WMS下发入库信息,更新入库组盘头失败");
         }
         return huahengMultiHandlerService.createReceiptTask(receiptContainerHeader, warehouseCode);
     }
@@ -161,19 +176,6 @@ public class WmsServiceImpl implements WmsService {
         if (wmsInventoryList == null) {
             return Result.error("WMS下发出库任务失败,库存为空");
         }
-        ShipmentHeader shipmentHeader = shipmentHeaderService.getShipmentHeaderByReferCode(referCode, warehouseCode);
-        if (shipmentHeader == null) {
-            return Result.error("MES下发出库信息,没有找到匹配的出库单, 上游单号:" + referCode);
-        }
-        String shipmentCode = shipmentHeader.getCode();
-        if (StringUtils.isEmpty(shipmentCode)) {
-            return Result.error("MES下发出库信息,出库单号为空");
-        }
-        List<ShipmentDetail> shipmentDetailList = shipmentDetailService.selectByMainId(String.valueOf(shipmentHeader.getId()));
-        if (shipmentDetailList == null || shipmentDetailList.size() == 0) {
-            return Result.error("MES下发出库信息,没有找到匹配的出库单详情, 上游单号:" + referCode);
-        }
-
         ErpShipment erpShipment = new ErpShipment();
         ErpShipmentHeader erpShipmentHeader = new ErpShipmentHeader();
         List<ErpShipmentDetail> erpShipmentDetailList = new ArrayList<>();
@@ -182,16 +184,98 @@ public class WmsServiceImpl implements WmsService {
         erpShipmentHeader.setReferCode(referCode);
         erpShipmentHeader.setRemark(remark);
         erpShipmentHeader.setWarehouseCode(warehouseCode);
-        for (ShipmentDetail shipmentDetail : shipmentDetailList) {
+        for (WmsInventory wmsInventory : wmsInventoryList) {
             ErpShipmentDetail erpShipmentDetail = new ErpShipmentDetail();
-            erpShipmentDetail.setMaterialCode(shipmentDetail.getMaterialCode());
-            erpShipmentDetail.setBatch(shipmentDetail.getBatch());
+            erpShipmentDetail.setMaterialCode(wmsInventory.getMaterialCode());
+            erpShipmentDetail.setBatch(wmsInventory.getBatch());
+            erpShipmentDetail.setInventoryStatus(wmsInventory.getInventoryStatus());
+            erpShipmentDetail.setQty(wmsInventory.getQty());
+            erpShipmentDetailList.add(erpShipmentDetail);
+        }
+        erpShipment.setShipmentHeader(erpShipmentHeader);
+        erpShipment.setShipmentDetailList(erpShipmentDetailList);
+        Result result = erpService.shipment(erpShipment);
+        if (!result.isSuccess()) {
+            return result;
+        }
+        ShipmentHeader shipmentHeader = shipmentHeaderService.getShipmentHeaderByReferCode(referCode, warehouseCode);
+        if (shipmentHeader == null) {
+            return Result.error("WMS下发出库信息,没有找到匹配的出库单, 上游单号:" + referCode);
+        }
+        String shipmentCode = shipmentHeader.getCode();
+        if (StringUtils.isEmpty(shipmentCode)) {
+            return Result.error("WMS下发出库信息,出库单号为空");
+        }
+        List<ShipmentDetail> shipmentDetailList = shipmentDetailService.selectByMainId(String.valueOf(shipmentHeader.getId()));
+        if (shipmentDetailList == null || shipmentDetailList.size() == 0) {
+            return Result.error("WMS下发出库信息,没有找到匹配的出库单详情, 上游单号:" + referCode);
         }
-        Result result = shipmentCombinationService.autoCombination(shipmentCode, warehouseCode);
+        result = shipmentCombinationService.autoCombination(shipmentCode, warehouseCode);
         if (!result.isSuccess()) {
-            throw new JeecgBootException("MES下发出库信息," + result.getMessage());
+            throw new JeecgBootException("WMS下发出库信息," + result.getMessage());
         }
-        return null;
+        List<ShipmentContainerDetail> shipmentContainerDetailList = shipmentContainerDetailService.getShipmentContainerDetailListByShipmentCode(shipmentCode);
+        if (shipmentContainerDetailList == null) {
+            throw new JeecgBootException("WMS下发出库信息, 没有找到出库配盘详情");
+        }
+        List<Integer> shipmentContainerIdList =
+            shipmentContainerDetailList.stream().map(ShipmentContainerDetail::getShipmentContainerId).distinct().collect(Collectors.toList());
+        long shipmentOrder = System.currentTimeMillis();
+        int sequenceNumber = shipmentContainerIdList.size();
+        int sequence = 0;
+        for (int shipmentContainerId : shipmentContainerIdList) {
+            sequence++;
+            ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(shipmentContainerId);
+            if (shipmentContainerHeader == null) {
+                throw new JeecgBootException("WMS下发出库信息,没有找到出库表头:" + shipmentContainerId);
+            }
+            shipmentContainerHeader.setToPort(toPort);
+            boolean success = shipmentContainerHeaderService.updateById(shipmentContainerHeader);
+            if (!success) {
+                throw new JeecgBootException("WMS下发出库信息,更新出库组盘头失败");
+            }
+            result = huahengMultiHandlerService.createShipmentTask(shipmentContainerHeader, warehouseCode, shipmentOrder, sequence, sequenceNumber);
+            if (!result.isSuccess()) {
+                throw new JeecgBootException(result.getMessage());
+            }
+        }
+        return Result.ok("WMS下发出库信息成功");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result createEmptyIn(WmsEntity wmsEntity) {
+        String warehouseCode = wmsEntity.getWarehouseCode();
+        String toPort = wmsEntity.getToPort();
+        String referCode = wmsEntity.getTaskNo();
+        String contaienrCode = wmsEntity.getContainerCode();
+
+        Result result = taskHeaderService.createEmptyIn(contaienrCode, QuantityConstant.EMPTY_STRING, warehouseCode);
+        return result;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result createEmptyOut(WmsEntity wmsEntity) {
+        String warehouseCode = wmsEntity.getWarehouseCode();
+        String toPort = wmsEntity.getToPort();
+        String referCode = wmsEntity.getTaskNo();
+        String contaienrCode = wmsEntity.getContainerCode();
+
+        Result result = taskHeaderService.createEmptyOut(contaienrCode, toPort, warehouseCode);
+        return result;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result createCheckOut(WmsEntity wmsEntity) {
+        String warehouseCode = wmsEntity.getWarehouseCode();
+        String toPort = wmsEntity.getToPort();
+        String referCode = wmsEntity.getTaskNo();
+        String contaienrCode = wmsEntity.getContainerCode();
+
+        Result result = taskHeaderService.createCheckOutTask(contaienrCode, toPort, warehouseCode);
+        return result;
     }
 
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/IReceiptContainerHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/IReceiptContainerHeaderService.java
index df45ca0..2aedbe1 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/IReceiptContainerHeaderService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/IReceiptContainerHeaderService.java
@@ -54,11 +54,15 @@ public interface IReceiptContainerHeaderService extends IService<ReceiptContaine
     /**
      * 取消组盘
      */
-    public Result cancelReceiving(Integer id);
+    Result cancelReceiving(Integer id);
 
     /**
      * 批量取消组盘
      */
-    public Result cancelReceiving(List<Integer> ids);
+    Result cancelReceiving(List<Integer> ids);
 
+    /**
+     * 更新去向port
+     */
+    boolean updateToPortById(String toPort, int id);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
index e2d1781..ae4e579 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
@@ -438,4 +438,13 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai
         return result;
     }
 
+    @Override
+    public boolean updateToPortById(String toPort, int id) {
+        ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader();
+        receiptContainerHeader.setToPort(toPort);
+        receiptContainerHeader.setId(id);
+        boolean success = updateById(receiptContainerHeader);
+        return success;
+    }
+
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerHeaderService.java
index db27731..7af682b 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerHeaderService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerHeaderService.java
@@ -72,4 +72,12 @@ public interface IShipmentContainerHeaderService extends IService<ShipmentContai
      */
     boolean updateStatusById(int status, int id);
 
+    /**
+     * 根据托盘号找到未完成任务的出库配盘头
+     * @param  containerCode
+     * @param  warehouseCode
+     * @return
+     */
+    ShipmentContainerHeader getUnCompleteShipmentContainerByCode(String containerCode, String warehouseCode);
+
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java
index 9b1109b..c35ffcb 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerHeaderServiceImpl.java
@@ -265,4 +265,13 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
         return success;
     }
 
+    @Override
+    public ShipmentContainerHeader getUnCompleteShipmentContainerByCode(String containerCode, String warehouseCode) {
+        LambdaQueryWrapper<ShipmentContainerHeader> shipmentContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
+        shipmentContainerHeaderLambdaQueryWrapper.eq(ShipmentContainerHeader::getContainerCode, containerCode)
+            .eq(ShipmentContainerHeader::getWarehouseCode, warehouseCode).lt(ShipmentContainerHeader::getStatus, QuantityConstant.SHIPMENT_CONTAINER_FINISHED);
+        ShipmentContainerHeader shipmentContainerHeader = getOne(shipmentContainerHeaderLambdaQueryWrapper);
+        return shipmentContainerHeader;
+    }
+
 }
--
libgit2 0.22.2