diff --git a/.gitignore b/.gitignore
index 42113d9..af02312 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,6 +45,7 @@ target/
 build/
 !**/src/main/**/build/
 !**/src/test/**/build/
+!**/src/main/resources/static/
 
 ### VS Code ###
 .vscode/
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/controller/MesController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/controller/MesController.java
index f68e666..b2f7d82 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/controller/MesController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/controller/MesController.java
@@ -11,6 +11,7 @@ import org.jeecg.modules.wms.api.erp.entity.ErpShipment;
 import org.jeecg.modules.wms.api.erp.entity.InventoryQueryParam;
 import org.jeecg.modules.wms.api.erp.service.IErpService;
 import org.jeecg.modules.wms.api.mes.entity.MesReceiptMaterial;
+import org.jeecg.modules.wms.api.mes.entity.MesShipmentMaterial;
 import org.jeecg.modules.wms.api.mes.servuce.IMesService;
 import org.jeecg.modules.wms.framework.aspectj.lang.annotation.ApiLogger;
 import org.jeecg.modules.wms.framework.controller.HuahengBaseController;
@@ -89,9 +90,9 @@ public class MesController extends HuahengBaseController {
     @PostMapping("/shipmentMaterial")
     @ResponseBody
     @ApiLogger(apiName = "物料出库", from="MES")
-    public Result shipmentMaterial(@RequestBody MesReceiptMaterial mesReceiptMaterial, HttpServletRequest req) {
+    public Result shipmentMaterial(@RequestBody MesShipmentMaterial mesShipmentMaterial, HttpServletRequest req) {
         String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
-        Result result = mesService.shipmentMaterial(mesReceiptMaterial, warehouseCode);
+        Result result = mesService.shipmentMaterial(mesShipmentMaterial, warehouseCode);
         return result;
     }
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MaterialInfo.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MaterialInfo.java
index 0859f71..9e69654 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MaterialInfo.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MaterialInfo.java
@@ -1,13 +1,20 @@
 package org.jeecg.modules.wms.api.mes.entity;
 
 import lombok.Data;
+import org.jetbrains.annotations.NotNull;
 
 import java.math.BigDecimal;
 
 @Data
-public class MaterialInfo {
+public class MaterialInfo implements Comparable<MaterialInfo>{
 
     private String materialCode;
     private BigDecimal qty;
+    private int sequence;
 
+
+    @Override
+    public int compareTo(@NotNull MaterialInfo o) {
+        return getSequence() - o.getSequence();
+    }
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesShipmentDetail.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesShipmentDetail.java
new file mode 100644
index 0000000..f971040
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesShipmentDetail.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.wms.api.mes.entity;
+
+import lombok.Data;
+import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
+
+import java.math.BigDecimal;
+
+/**
+ * @author 游杰
+ */
+@Data
+public class MesShipmentDetail {
+
+    /**
+     * 出库单详情
+     */
+    private ShipmentDetail shipmentDetail;
+
+    /**
+     * 出库数量
+     */
+    private BigDecimal shipQty;
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesShipmentMaterial.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesShipmentMaterial.java
new file mode 100644
index 0000000..be8a6c2
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/entity/MesShipmentMaterial.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.wms.api.mes.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author 游杰
+ */
+@Data
+public class MesShipmentMaterial {
+
+    private String referCode;
+    private String toPort;
+    private List<MaterialInfo> materialInfoList;
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/IMesService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/IMesService.java
index da90436..9841785 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/IMesService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/IMesService.java
@@ -2,6 +2,7 @@ package org.jeecg.modules.wms.api.mes.servuce;
 
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.wms.api.mes.entity.MesReceiptMaterial;
+import org.jeecg.modules.wms.api.mes.entity.MesShipmentMaterial;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 
 /**
@@ -11,7 +12,7 @@ public interface IMesService {
 
     public Result receiptMaterial(MesReceiptMaterial mesReceiptMaterial, String warehouseCode);
 
-    public Result shipmentMaterial(MesReceiptMaterial mesMaterial, String warehouseCode);
+    public Result shipmentMaterial(MesShipmentMaterial mesShipmentMaterial, String warehouseCode);
 
     public Result backMesReceipt(TaskHeader taskHeader);
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
index f22e57c..1e633e0 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
@@ -1,9 +1,12 @@
 package org.jeecg.modules.wms.api.mes.servuce.impl;
 
 import com.aliyun.oss.ServiceException;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.wms.api.mes.entity.MaterialInfo;
 import org.jeecg.modules.wms.api.mes.entity.MesReceiptMaterial;
+import org.jeecg.modules.wms.api.mes.entity.MesShipmentDetail;
+import org.jeecg.modules.wms.api.mes.entity.MesShipmentMaterial;
 import org.jeecg.modules.wms.api.mes.servuce.IMesService;
 import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader;
 import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService;
@@ -13,13 +16,26 @@ import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptDetailService
 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;
+import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
+import org.jeecg.utils.StringUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.lang.ref.WeakReference;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author 游杰
@@ -35,6 +51,16 @@ public class MesServiceImpl implements IMesService {
     private IReceiveService receiveService;
     @Resource
     private IReceiptContainerHeaderService receiptContainerHeaderService;
+    @Resource
+    private IShipmentHeaderService shipmentHeaderService;
+    @Resource
+    private IShipmentDetailService shipmentDetailService;
+    @Resource
+    private IShipmentCombinationService shipmentCombinationService;
+    @Resource
+    private IShipmentContainerDetailService shipmentContainerDetailService;
+    @Resource
+    private IShipmentContainerHeaderService shipmentContainerHeaderService;
 
     /**
      * 要求入库单详情 必须是不重样的
@@ -48,7 +74,13 @@ public class MesServiceImpl implements IMesService {
         String toPort = mesReceiptMaterial.getToPort();
         List<MaterialInfo> materialInfoList = mesReceiptMaterial.getMaterialInfoList();
         ReceiptHeader receiptHeader = receiptHeaderService.getReceiptHeaderByReferCode(referCode, warehouseCode);
+        if(receiptHeader == null) {
+            return Result.error("MES下发入库信息,没有找到匹配的入库单, 上游单号:" + referCode);
+        }
         List<ReceiptDetail> receiptDetailList = receiptDetailService.selectByMainId(String.valueOf(receiptHeader.getId()));
+        if(receiptDetailList == null || receiptDetailList.size() == 0) {
+            return Result.error("MES下发入库信息,没有找到匹配的入库单详情, 上游单号:" + referCode);
+        }
         for (ReceiptDetail receiptDetail : receiptDetailList) {
             String materialCode = receiptDetail.getMaterialCode();
             BigDecimal taskQty = BigDecimal.ZERO;
@@ -86,18 +118,90 @@ public class MesServiceImpl implements IMesService {
         receiptContainerHeader.setToPort(toPort);
         boolean success = receiptContainerHeaderService.updateById(receiptContainerHeader);
         if(!success) {
-            throw new ServiceException("更新入库组盘头失败");
+            throw new ServiceException("MES下发入库信息,更新入库组盘头失败");
         }
         return receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode);
     }
 
     @Override
-    public Result shipmentMaterial(MesReceiptMaterial mesMaterial, String warehouseCode)  {
-        return null;
+    public Result shipmentMaterial(MesShipmentMaterial mesShipmentMaterial, String warehouseCode) {
+        String referCode = mesShipmentMaterial.getReferCode();
+        String toPort = mesShipmentMaterial.getToPort();
+        List<MaterialInfo> materialInfoList = mesShipmentMaterial.getMaterialInfoList();
+        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);
+        }
+        List<MesShipmentDetail> mesShipmentDetailList = new ArrayList<>();
+        Collections.sort(materialInfoList);
+        for (ShipmentDetail shipmentDetail : shipmentDetailList) {
+            String materialCode = shipmentDetail.getMaterialCode();
+            BigDecimal shipQty = BigDecimal.ZERO;
+            boolean hav = false;
+            for (MaterialInfo materialInfo : materialInfoList) {
+                if(materialInfo.getMaterialCode().equals(materialCode)) {
+                    hav = true;
+                    shipQty = materialInfo.getQty();
+                    break;
+                }
+            }
+            if(hav) {
+                MesShipmentDetail mesShipmentDetail = new MesShipmentDetail();
+                mesShipmentDetail.setShipmentDetail(shipmentDetail);
+                mesShipmentDetail.setShipQty(shipQty);
+                mesShipmentDetailList.add(mesShipmentDetail);
+            }
+        }
+        for(MesShipmentDetail mesShipmentDetail : mesShipmentDetailList) {
+            ShipmentDetail shipmentDetail = mesShipmentDetail.getShipmentDetail();
+            BigDecimal shipQty = mesShipmentDetail.getShipQty();
+            Result result = shipmentCombinationService.autoCombination(shipmentDetail, shipQty);
+            if(!result.isSuccess()) {
+                throw new ServiceException("MES下发出库信息," + result.getMessage());
+            }
+        }
+        List<ShipmentContainerDetail> shipmentContainerDetailList =
+                shipmentContainerDetailService.getShipmentContainerDetailListByShipmentCode(shipmentCode);
+        if(shipmentContainerDetailList == null) {
+            throw new ServiceException("MES下发出库信息, 没有找到出库配盘详情");
+        }
+        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 ServiceException("MES下发出库信息,没有找到出库表头:" + shipmentContainerId);
+            }
+            shipmentContainerHeader.setToPort(toPort);
+            boolean success = shipmentContainerHeaderService.updateById(shipmentContainerHeader);
+            if(!success) {
+                throw new ServiceException("MES下发出库信息,更新出库组盘头失败");
+            }
+            Result result = shipmentCombinationService.createShipmentTask(shipmentContainerHeader, warehouseCode,
+                    shipmentOrder, sequence, sequenceNumber);
+            if(!result.isSuccess()) {
+                throw new ServiceException(result.getMessage());
+            }
+
+        }
+        return Result.OK("MES下发出库信息成功");
     }
 
     @Override
     public Result backMesReceipt(TaskHeader taskHeader) {
+
         return null;
     }
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java
index c3de906..330d979 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/controller/ShipmentCombinationController.java
@@ -123,7 +123,7 @@ public class ShipmentCombinationController {
     @ResponseBody
     public Result createShipmentTask(@RequestBody ShipmentContainerHeader shipmentContainerHeader, HttpServletRequest req) {
         String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
-        return shipmentCombinationService.createShipmentTask(shipmentContainerHeader, warehouseCode);
+        return shipmentCombinationService.createShipmentTask(shipmentContainerHeader, warehouseCode, 0 ,0 ,0);
     }
 
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/IShipmentCombinationService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/IShipmentCombinationService.java
index 579f288..6f1ad9d 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/IShipmentCombinationService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/IShipmentCombinationService.java
@@ -8,6 +8,7 @@ import org.jeecg.modules.wms.shipment.shipmentCombination.entity.CombinationMode
 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -19,11 +20,12 @@ public interface IShipmentCombinationService {
 
     public Result autoCombination(String shipmentCode, String warehouseCode);
 
-    public Result autoCombination(ShipmentDetail shipmentDetail);
+    public Result autoCombination(ShipmentDetail shipmentDetail, BigDecimal shipQty);
 
     public Result combination(CombinationModel combinationModel);
 
-    public Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode);
+    public Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode,
+                                     long shipmentOrder, int sequence, int sequenceNumber);
 
     public Result getInventoryFromShipmentDetail(Integer shipmentDetailId);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
index d76ac8f..3cddb26 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentCombination/service/impl/ShipmentCombinationServiceImpl.java
@@ -133,7 +133,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
             if(shipmentDetail.getTaskQty().compareTo(shipmentDetail.getQty()) < 0) {
                 over = false;
             }
-            Result result = autoCombination(shipmentDetail);
+            Result result = autoCombination(shipmentDetail, null);
             if(!result.isSuccess()) {
                 throw new ServiceException(result.getMessage());
             }
@@ -146,13 +146,16 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
 
     @Override
     @Transactional(rollbackFor = ServiceException.class)
-    public Result autoCombination(ShipmentDetail shipmentDetail) {
+    public Result autoCombination(ShipmentDetail shipmentDetail, BigDecimal shipQty) {
         //出库数量
         BigDecimal shipmentQty = shipmentDetail.getQty().subtract(shipmentDetail.getTaskQty());
         //判断是否还有需要出库的物料,如果没有就跳过该物料
         if (shipmentQty.compareTo(BigDecimal.ZERO) <= 0) {
              return Result.OK("出库数量必须大于0");
         }
+        if(shipQty != null) {
+            shipmentQty = shipQty;
+        }
         List<InventoryDetail> inventoryList = getInventorys(shipmentDetail);
         //去除已锁的库存
         ArrayList<InventoryDetail> removeInventoryList = new ArrayList<>();
@@ -414,7 +417,8 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
 
     @Override
     @Transactional(rollbackFor = ServiceException.class)
-    public Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode) {
+    public Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode,
+                                     long shipmentOrder, int sequence, int sequenceNumber) {
         Integer preTaskNo = 0;
         if (shipmentContainerHeader == null) {
             return Result.error("生成出库任务时, 出库组盘头"  + "未找到,操作中止");
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerDetailService.java
index 7e27919..b4ff944 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerDetailService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/IShipmentContainerDetailService.java
@@ -15,4 +15,6 @@ public interface IShipmentContainerDetailService extends IService<ShipmentContai
 	public List<ShipmentContainerDetail> selectByMainId(String mainId);
 
 	public List<ShipmentContainerDetail> getShipmentContainerDetailListByHeaderId(int shipmentContainerHeaderId);
+
+	public List<ShipmentContainerDetail> getShipmentContainerDetailListByShipmentCode(String shipmentCode);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerDetailServiceImpl.java
index 4078667..2441bf1 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerDetailServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/service/impl/ShipmentContainerDetailServiceImpl.java
@@ -34,4 +34,12 @@ public class ShipmentContainerDetailServiceImpl extends ServiceImpl<ShipmentCont
 		List<ShipmentContainerDetail> shipmentContainerDetailList = list(shipmentContainerDetailLambdaQueryWrapper);
 		return shipmentContainerDetailList;
 	}
+
+	@Override
+	public List<ShipmentContainerDetail> getShipmentContainerDetailListByShipmentCode(String shipmentCode) {
+		LambdaQueryWrapper<ShipmentContainerDetail> shipmentContainerDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
+		shipmentContainerDetailLambdaQueryWrapper.eq(ShipmentContainerDetail::getShipmentCode, shipmentCode);
+		List<ShipmentContainerDetail> shipmentContainerDetailList = list(shipmentContainerDetailLambdaQueryWrapper);
+		return shipmentContainerDetailList;
+	}
 }