diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderService.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderService.java
index c67cc88..a9f7ce6 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderService.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderService.java
@@ -5,6 +5,7 @@ import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerD
 import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentCombinationModel;
 import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -28,6 +29,8 @@ public interface ShipmentContainerHeaderService extends IService<ShipmentContain
 
     AjaxResult autoCombination(String shipmentCode);
 
+    AjaxResult autoCombination(List<ShipmentDetail> shipmentDetailList);
+
     AjaxResult checkForCancelCombination(List<Integer> shipmentContainerIds);
 
     AjaxResult createTask(List<Integer> idList);
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
index b761c33..e689b9d 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/service/ShipmentContainerHeaderServiceImpl.java
@@ -387,16 +387,21 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
     @Override
     @Transactional
     public AjaxResult autoCombination(String shipmentCode) {
-        int num=0;
-        AjaxResult ajaxResult=new AjaxResult();
-
-        LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper=Wrappers.lambdaQuery();
-        lambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode,shipmentCode)
-                .eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode());
+        LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
+        lambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, shipmentCode)
+                .eq(ShipmentDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
         List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(lambdaQueryWrapper);
-        if(shipmentDetailList.size()<1 || shipmentDetailList==null){
+        if (shipmentDetailList.size() < 1 || shipmentDetailList == null) {
             return AjaxResult.error("找不到子单链");
         }
+        return this.autoCombination(shipmentDetailList);
+    }
+
+
+    //出库自动组盘
+    public AjaxResult autoCombination(List<ShipmentDetail> shipmentDetailList){
+        int num = 0;
+        List<Integer> list=new ArrayList<>();
         for (ShipmentDetail item : shipmentDetailList) {
             //获取需要出库数量
             BigDecimal shipmentQty = item.getShipQty().subtract(item.getRequestQty());
@@ -412,6 +417,9 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
 //            search.setInventorySts(item.getInventorySts()); //物料状态
 
             List<InventoryDetail> inventoryList = shippingCombinationService.getInventorys(item);
+            if(inventoryList.size() < 1 && item.getWaveId() != 0){
+                return AjaxResult.error("主单为"+item.getShipmentCode()+"子单id为"+item.getId() + "的单据没有库存,波次失败");
+            }
             if (inventoryList.size() < 1) {
                 num = num + 1;
             } else {
@@ -426,11 +434,12 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
                     shipmentCombination.setInventoryDetailId(inventory.getId());
                     shipmentCombination.setShipmentDetailId(item.getId());
                     shipmentCombination.setType((short) 300);
-                    List<Integer> list=new ArrayList<>();
+
                     //如果库存数 >= 待出库数,组盘数就是待出库数并且结束组盘,否则组盘数就是库存数
                     if (inventoryQty.compareTo(shipmentQty) > -1) {
                         shipmentCombination.setShipQty(shipmentQty);
                         ShipmentContainerHeader shipmentContainerHeader=this.combination(shipmentCombination);
+                        list.add(shipmentContainerHeader.getId());
                     } else {
                         shipmentCombination.setShipQty(inventoryQty);
                         ShipmentContainerHeader shipmentContainerHeader=this.combination(shipmentCombination);
@@ -443,7 +452,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
         if(num==shipmentDetailList.size()){
             throw new ServiceException("单据物料在此库区没有库存,无法出库");
         }
-        return AjaxResult.success("成功");
+        return AjaxResult.success("成功",list);
     }
 
     /**
diff --git a/src/main/java/com/huaheng/pc/shipment/wave/controller/WaveController.java b/src/main/java/com/huaheng/pc/shipment/wave/controller/WaveController.java
index 306f83c..75aa9fa 100644
--- a/src/main/java/com/huaheng/pc/shipment/wave/controller/WaveController.java
+++ b/src/main/java/com/huaheng/pc/shipment/wave/controller/WaveController.java
@@ -165,9 +165,12 @@ public class WaveController extends BaseController {
     @Log(title = "出库-波次", operating = "开始波次", action = BusinessType.UPDATE)
     @PostMapping("/startWave")
     @ResponseBody
-    public AjaxResult editSave(Wave wave) {
-        wave.setLastUpdatedBy(ShiroUtils.getLoginName());
-        return toAjax(waveService.updateById(wave));
+    public AjaxResult starWave(String ids) {
+        if (StringUtils.isEmpty(ids)){
+            return AjaxResult.error("id不能为空");
+        }
+        AjaxResult result=waveService.startWave(ids);
+        return result;
     }
 
 }
diff --git a/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java b/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java
index b170945..d0bf227 100644
--- a/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java
+++ b/src/main/java/com/huaheng/pc/shipment/wave/service/WaveService.java
@@ -1,11 +1,57 @@
 package com.huaheng.pc.shipment.wave.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huaheng.common.support.Convert;
+import com.huaheng.common.utils.security.ShiroUtils;
+import com.huaheng.framework.web.domain.AjaxResult;
+import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
+import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
+import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
 import com.huaheng.pc.shipment.wave.domain.Wave;
 import com.huaheng.pc.shipment.wave.mapper.WaveMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 @Service
 public class WaveService extends ServiceImpl<WaveMapper, Wave> {
 
+
+    @Autowired
+    private ShipmentDetailService shipmentDetailService;
+    @Autowired
+    private ShipmentContainerHeaderService shipmentContainerHeaderService;
+
+    //开始波次,对带有此波次号的单据进行后续的后台操作
+
+    @Transactional
+    public AjaxResult startWave(String ids) {
+        List<ShipmentDetail> list = new ArrayList<>();
+        for (Integer id : Convert.toIntArray(ids)) {
+            //找到此波次的单据
+            LambdaQueryWrapper<ShipmentDetail> lam = Wrappers.lambdaQuery();
+            lam.eq(ShipmentDetail::getWaveId,id)
+                .eq(ShipmentDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
+            List<ShipmentDetail> shipmentDetails=shipmentDetailService.list(lam);
+
+            //整合所有加入波次的单据
+            if(shipmentDetails != null){
+                list.addAll(shipmentDetails);
+            }
+        }
+
+        //自动组盘
+        AjaxResult ajaxResult=shipmentContainerHeaderService.autoCombination(list);
+        if(ajaxResult.getData() != null){
+            //生成任务
+            shipmentContainerHeaderService.createTask(Arrays.asList(Convert.toIntArray(ajaxResult.getData().toString())));
+        }
+        return AjaxResult.success("波次运行成功");
+    }
 }
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
index 67ec6bf..9edc3ee 100644
--- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
@@ -502,6 +502,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                     detail.setMaterialCode(DataUtils.getString(map.get("materialCode")));//物料号
                     detail.setMaterialName(DataUtils.getString(map.get("materialName")));//物料名称
                     detail.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格
+                    detail.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位
                     detail.setReceiptCode(DataUtils.getString(map.get("receiptCode")));//入库单编码
                     detail.setReceiptDetailId(DataUtils.getInteger(map.get("receiptDetailId")));//入库单明细ID
                     detail.setBatch(DataUtils.getString(map.get("batch")));//批次
@@ -534,6 +535,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 inventoryTransaction.setContainerCode(DataUtils.getString(map.get("containerCode")));
                 inventoryTransaction.setMaterialCode(DataUtils.getString(map.get("materialCode")));
                 inventoryTransaction.setMaterialName(DataUtils.getString(map.get("materialName")));
+                inventoryTransaction.setMaterialSpec(DataUtils.getString(map.get("materialSpec")));//物料规格
+                inventoryTransaction.setMaterialUnit(DataUtils.getString(map.get("materialUnit")));//物料单位
                 inventoryTransaction.setBillCode(DataUtils.getString(map.get("receiptCode")));
                 inventoryTransaction.setBillDetailId(DataUtils.getInteger(map.get("receiptDetailId")));
                 inventoryTransaction.setBatch(DataUtils.getString(map.get("batch")));
@@ -1293,8 +1296,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         shipmentContainerHeaderLambdaUpdateWrapper.eq(ShipmentContainerHeader::getId,task.getAllocationHeadId());
         if (! shipmentContainerHeaderService.update(shipmentContainerHeader, shipmentContainerHeaderLambdaUpdateWrapper))
             throw new ServiceException("更新组盘头状态失败");
-
-
                    //修改出库单状态
                     LambdaQueryWrapper<TaskDetail> taskDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
                     taskDetailLambdaQueryWrapper.eq(TaskDetail::getTaskId,task.getId());