diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java
index 50c2f5c..6f4abc2 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java
@@ -68,7 +68,6 @@ public class ShipmentContainerHeaderController extends BaseController
 				.ge(StringUtils.isNotEmpty(createdBegin),ShipmentContainerHeader::getCreated, createdBegin)
 				.le(StringUtils.isNotEmpty(createdEnd), ShipmentContainerHeader::getCreated, createdEnd)
 				.in(ShipmentContainerHeader::getCompanyCode,ShiroUtils.getCompanyCodeList())
-				.eq(StringUtils.isNotEmpty(shipmentContainerHeader.getShipmentCode()), ShipmentContainerHeader::getShipmentCode, shipmentContainerHeader.getShipmentCode())
 				.eq(StringUtils.isNotEmpty(shipmentContainerHeader.getContainerCode()), ShipmentContainerHeader::getContainerCode, shipmentContainerHeader.getContainerCode())
 				.eq(StringUtils.isNotEmpty(shipmentContainerHeader.getLocationCode()), ShipmentContainerHeader::getLocationCode, shipmentContainerHeader.getLocationCode())
 				.eq(StringUtils.isNotEmpty(shipmentContainerHeader.getCreatedBy()), ShipmentContainerHeader::getCreatedBy, shipmentContainerHeader.getCreatedBy())
diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/domain/ShipmentContainerHeader.java b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/domain/ShipmentContainerHeader.java
index 9507dfc..cfac054 100644
--- a/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/domain/ShipmentContainerHeader.java
+++ b/src/main/java/com/huaheng/pc/shipment/shipmentContainerHeader/domain/ShipmentContainerHeader.java
@@ -99,12 +99,6 @@ public class ShipmentContainerHeader implements Serializable {
     private BigDecimal height;
 
 
-    /**
-     * 出库单内部号
-     */
-    @TableField(value = "shipmentId")
-    @ApiModelProperty(value="出库单内部号")
-    private Integer shipmentId;
 
     /**
      * 货主编码
@@ -141,12 +135,6 @@ public class ShipmentContainerHeader implements Serializable {
     @ApiModelProperty(value="序号")
     private Integer groupIndex;
 
-    /**
-     * 波次号
-     */
-    @TableField(value = "waveId")
-    @ApiModelProperty(value="波次号")
-    private Integer waveId;
 
 
     /**
@@ -156,12 +144,7 @@ public class ShipmentContainerHeader implements Serializable {
     @ApiModelProperty(value="任务已创建?")
     private Integer taskCreated;
 
-    /**
-     * 出库单号
-     */
-    @TableField(value = "shipmentCode")
-    @ApiModelProperty(value="出库单号")
-    private String shipmentCode;
+
 
     /**
      * 周转箱号
@@ -316,8 +299,6 @@ public class ShipmentContainerHeader implements Serializable {
 
     public static final String COL_HEIGHT = "height";
 
-    public static final String COL_SHIPMENTID = "shipmentId";
-
     public static final String COL_COMPANYCODE = "companyCode";
 
     public static final String COL_TOTALQTY = "totalQty";
@@ -328,12 +309,8 @@ public class ShipmentContainerHeader implements Serializable {
 
     public static final String COL_GROUPINDEX = "groupIndex";
 
-    public static final String COL_WAVEID = "waveId";
-
     public static final String COL_TASKCREATED = "taskCreated";
 
-    public static final String COL_SHIPMENTCODE = "shipmentCode";
-
     public static final String COL_TRANSCONTAINERCODE = "transContainerCode";
 
     public static final String COL_OQCBENCH = "oqcBench";
@@ -568,24 +545,6 @@ public class ShipmentContainerHeader implements Serializable {
 
 
     /**
-     * 获取出库单内部号
-     *
-     * @return shipmentId - 出库单内部号
-     */
-    public Integer getShipmentId() {
-        return shipmentId;
-    }
-
-    /**
-     * 设置出库单内部号
-     *
-     * @param shipmentId 出库单内部号
-     */
-    public void setShipmentId(Integer shipmentId) {
-        this.shipmentId = shipmentId;
-    }
-
-    /**
      * 获取货主编码
      *
      * @return companyCode - 货主编码
@@ -665,23 +624,6 @@ public class ShipmentContainerHeader implements Serializable {
         this.groupIndex = groupIndex;
     }
 
-    /**
-     * 获取波次号
-     *
-     * @return waveId - 波次号
-     */
-    public Integer getWaveId() {
-        return waveId;
-    }
-
-    /**
-     * 设置波次号
-     *
-     * @param waveId 波次号
-     */
-    public void setWaveId(Integer waveId) {
-        this.waveId = waveId;
-    }
 
     /**
      * 获取任务已创建?
@@ -701,24 +643,6 @@ public class ShipmentContainerHeader implements Serializable {
         this.taskCreated = taskCreated;
     }
 
-    /**
-     * 获取出库单号
-     *
-     * @return shipmentCode - 出库单号
-     */
-    public String getShipmentCode() {
-        return shipmentCode;
-    }
-
-    /**
-     * 设置出库单号
-     *
-     * @param shipmentCode 出库单号
-     */
-    public void setShipmentCode(String shipmentCode) {
-        this.shipmentCode = shipmentCode;
-    }
-
     public String getTransContainerCode() {
         return transContainerCode;
     }
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 732a40e..40974d4 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
@@ -6,6 +6,8 @@ import com.huaheng.common.exception.service.ServiceException;
 import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.framework.web.domain.RetCode;
+import com.huaheng.pc.config.container.domain.Container;
+import com.huaheng.pc.config.container.service.ContainerService;
 import com.huaheng.pc.config.location.domain.Location;
 import com.huaheng.pc.config.location.service.LocationService;
 import com.huaheng.pc.config.material.domain.Material;
@@ -40,7 +42,6 @@ import java.util.Map;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader;
 import com.huaheng.pc.shipment.shipmentContainerHeader.mapper.ShipmentContainerHeaderMapper;
-import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
 import org.springframework.transaction.annotation.Transactional;
 
 @Service
@@ -70,6 +71,8 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
     private WaveService waveService;
     @Autowired
     private ShipmentPreferenceService shipmentPreferenceService;
+    @Autowired
+    private ContainerService containerService;
 
 
     @Override
@@ -80,6 +83,14 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
 
 
     /**
+     * 1.检查基本属性
+     * 2.更改库存明细
+     * 3.更新单据明细的已出库数量
+     * 4.自动判定出库任务状态,根据库存数量减去预定库存相等就是整盘出--预计任务状态
+     * 5.增加出库组盘头
+     * 6.增加出库组盘明细
+     * 7.更新单据状态
+     *
      * 出库组盘单条保存
      * @param shipmentCombinationModel
      * @return
@@ -88,6 +99,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
     @Override
     public ShipmentContainerHeader combination(ShipmentCombinationModel shipmentCombinationModel) {
 
+        //1.检查基本属性
         //校验
         if(shipmentCombinationModel.getShipQty().compareTo(new BigDecimal("0")) <= 0){
             throw new ServiceException("出库数量必须大于0");
@@ -116,8 +128,9 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
         lambdaQueryWrapper.eq(Location::getWarehouseCode,inventoryDetail.getWarehouseCode())
                 .eq(Location::getCode,inventoryDetail.getLocationCode());
         Location location = locationService.getOne(lambdaQueryWrapper);
-        if (location == null)
-            throw new ServiceException("库位 "+ inventoryDetail.getLocationCode() +" 不存在");
+        if (location == null) {
+            throw new ServiceException("库位 " + inventoryDetail.getLocationCode() + " 不存在");
+        }
 //        if (location.getStatus().equals("lock"))    {
 //            //如果库位状态是锁定的话,就查找出库组盘表,如果存在未下发
 //            LambdaQueryWrapper<ShipmentContainerHeader> lam=Wrappers.lambdaQuery();
@@ -130,7 +143,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
 //            }
 //        }
 
-        //更新库存分配数
+        //2.更新库存分配数
         inventoryDetail.setTaskQty(inventoryDetail.getTaskQty().add(shipmentCombinationModel.getShipQty()));
         inventoryDetailService.saveOrUpdate(inventoryDetail);
         //获取库位,然后锁定
@@ -138,7 +151,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             location.setStatus("lock");
             locationService.saveOrUpdate(location);
         }
-        //更新单据明细的已出库数量
+        //3.更新单据明细的已出库数量
         shipmentDetail.setRequestQty(shipmentDetail.getRequestQty().add(shipmentCombinationModel.getShipQty()));
         int i = shipmentDetail.getShipQty().compareTo(shipmentDetail.getRequestQty());
         if(i > 0){
@@ -158,25 +171,29 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             shipmentCombinationModel.setTaskType(400);
         }
 
-        //增加出库组盘头
-        ShipmentContainerHeader shipmentContainerHeader = ShipmentContainerHeaderAdd(location, shipmentDetail, shipmentCombinationModel);
-        //增加出库组盘明细
+        //5.增加出库组盘头
+        ShipmentContainerHeader shipmentContainerHeader = ShipmentContainerHeaderAdd(location, shipmentDetail);
+        //6.增加出库组盘明细
         ShipmentContainerDetail shipmentContainerDetail = ShipmentContainerDetailAdd(shipmentDetail, shipmentContainerHeader, shipmentCombinationModel);
-        //更新单据状态
+        //7.更新单据状态
         shipmentHeaderService.updateShipmentStatus(shipmentDetail.getShipmentId());
 
         return  shipmentContainerHeader;
     }
 
     /**
-     * 在组盘表中查找任务状态小于20的容器,如果状态为0就合并出库明细,状态大于0就提示不能组盘。如果找不到就新增一条组盘表头
+     * 组盘头
+     * 1.查看是否有状态小于等于20的组盘头,有就需新建组盘头,没有就新建
+     * 2.没有符合条件的组盘头,新建组盘头
+     *
      * @param location
-     * @param shipmentCombination
+     * @param shipmentDetail
      * @return
      */
     private ShipmentContainerHeader ShipmentContainerHeaderAdd(Location location,
-                                                               ShipmentDetail shipmentDetail,
-                                                               ShipmentCombinationModel shipmentCombination) {
+                                                               ShipmentDetail shipmentDetail) {
+
+        //1.查看是否有状态小于等于20的组盘头,有就需新建组盘头,没有就新建
         LambdaQueryWrapper<ShipmentContainerHeader> lambdaQueryWrapper=Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode())
                 .eq(ShipmentContainerHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())
@@ -186,34 +203,39 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             return shipmentContainerHeader;
         }
         else {
-//            LambdaQueryWrapper<ShipmentContainerHeader> lam=Wrappers.lambdaQuery();
-//            lam.eq(ShipmentContainerHeader::getContainerCode,location.getContainerCode())
-//                    .eq(ShipmentContainerHeader::getWarehouseCode,ShiroUtils.getWarehouseCode())
-//                    .eq(ShipmentContainerHeader::getTaskCreated,0)
-//                    .eq(ShipmentContainerHeader::getStatus,0);
-//            shipmentContainerHeader = this.getOne(lam);
-//            if (shipmentContainerHeader == null) {
+            // 2.没有符合条件的组盘头,新建组盘头
+            //找到容器类型
+            LambdaQueryWrapper<Container> containerLam=Wrappers.lambdaQuery();
+            containerLam.eq(Container::getCode,location.getContainerCode())
+                    .eq(Container::getWarehouseCode,ShiroUtils.getWarehouseCode());
+            Container container = containerService.getOne(containerLam);
+            if(container == null){
+                throw new ServiceException("系统没有此容器编码");
+            }
                 shipmentContainerHeader = new ShipmentContainerHeader();
                 shipmentContainerHeader.setContainerCode(location.getContainerCode());
                 shipmentContainerHeader.setLocationCode(location.getCode());
                 shipmentContainerHeader.setWarehouseCode(ShiroUtils.getWarehouseCode());
-                //赋值u8仓库
                 shipmentContainerHeader.setCompanyCode(shipmentDetail.getCompanyCode());
+                shipmentContainerHeader.setContainerType(container.getContainerType());
                 shipmentContainerHeader.setStatus(0);
                 shipmentContainerHeader.setTaskCreated(0);
                 shipmentContainerHeader.setCreatedBy(ShiroUtils.getLoginName());
-                shipmentContainerHeader.setCreated(null);
-//            Material material=new Material();
-//            material.setCode(shipmentDetail.getMaterialCode());
-//            shipmentContainerHeader.setZoneCode(materialService.selectFirstEntity(material).getZoneCode());
-                this.save(shipmentContainerHeader);
+                Boolean flag = this.save(shipmentContainerHeader);
+                if(flag == false){
+                    throw new ServiceException("新建组盘头失败,sql错误");
+                }
             return shipmentContainerHeader;
             }
-//        }
     }
 
     /**
-     * 查询 容器编码、库存Id、出库明细Id 一致的组盘明细,如果存在则增加组盘数量,如果不存在就新增一条组盘明细
+     * 组盘明细
+     * 1.查看是否有同一出库明细的物料需要出库
+     * 2.有时修改阻盘明细的出库数量就行
+     * 3.没有就新建明细
+     * 4。查看组盘头状态,如果状态在10到20,则生成任务明细或修改任务明细的数量
+     *
      * @param shipmentDetail
      * @param shipmentContainerHeader
      * @param shipmentCombinationModel
@@ -222,46 +244,63 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
     private ShipmentContainerDetail ShipmentContainerDetailAdd(ShipmentDetail shipmentDetail,
                                                                ShipmentContainerHeader shipmentContainerHeader,
                                                                ShipmentCombinationModel shipmentCombinationModel) {
+
+        Boolean flag =true;
+        //1.查看是否有同一出库明细的物料需要出库
         LambdaQueryWrapper<ShipmentContainerDetail> lambdaQueryWrapper=Wrappers.lambdaQuery();
         lambdaQueryWrapper.eq(ShipmentContainerDetail::getShippingContainerId,shipmentContainerHeader.getId())
                 .eq(ShipmentContainerDetail::getShipmentDetailId,shipmentCombinationModel.getShipmentDetailId())
                 .eq(ShipmentContainerDetail::getWarehouseCode,ShiroUtils.getWarehouseCode());
         ShipmentContainerDetail shipmentContainerDetail = shipmentContainerDetailService.getOne(lambdaQueryWrapper);
+        ShipmentContainerDetail shipmentContainerDetaill = new ShipmentContainerDetail();
+
+        //2.有时修改阻盘明细的出库数量就行
         if(shipmentContainerDetail != null)    {
             shipmentContainerDetail.setQty(shipmentContainerDetail.getQty().add(shipmentCombinationModel.getShipQty()));
-            shipmentContainerDetailService.saveOrUpdate(shipmentContainerDetail);
+            flag=shipmentContainerDetailService.saveOrUpdate(shipmentContainerDetail);
+            if(flag == false){
+                throw new ServiceException("修改组盘明细失败,sql错误");
+            }
         }
-        else    {
-            //构建明细
+        else  {
 
+            //3.没有就新建明细
             LambdaQueryWrapper<Material> lam=Wrappers.lambdaQuery();
             lam.eq(Material::getCode,shipmentDetail.getMaterialCode())
                     .eq(Material::getWarehouseCode,ShiroUtils.getWarehouseCode());
             Material material = materialService.getOne(lam);
-            if (material == null)
-                throw new ServiceException("出库单(" + shipmentDetail.getShipmentCode() + ")的物料("+ shipmentDetail.getMaterialCode() +")不存在!");
-            shipmentContainerDetail = new ShipmentContainerDetail();
-            shipmentContainerDetail.setWarehouseCode(shipmentContainerHeader.getWarehouseCode());
-            shipmentContainerDetail.setCompanyCode(shipmentContainerHeader.getCompanyCode());
-            shipmentContainerDetail.setContainerCode(shipmentContainerHeader.getContainerCode());
-            shipmentContainerDetail.setLocationCode(shipmentContainerHeader.getLocationCode());
-            shipmentContainerDetail.setInventoryId(shipmentCombinationModel.getInventoryDetailId());
-            shipmentContainerDetail.setInventorySts(shipmentDetail.getInventorySts());
-            shipmentContainerDetail.setShippingContainerId(shipmentContainerHeader.getId());
-            shipmentContainerDetail.setShipmentCode(shipmentDetail.getShipmentCode());
-            shipmentContainerDetail.setShipmentId(shipmentDetail.getShipmentId());
-            shipmentContainerDetail.setShipmentDetailId(shipmentCombinationModel.getShipmentDetailId());
-            shipmentContainerDetail.setMaterialCode(material.getCode());
-            shipmentContainerDetail.setMaterialName(material.getName());
-            shipmentContainerDetail.setMaterialSpec(material.getSpec());
-            shipmentContainerDetail.setQty(shipmentCombinationModel.getShipQty());
-            shipmentContainerDetail.setCreated(null);
-            shipmentContainerDetail.setWaveId(shipmentDetail.getWaveId());
-            shipmentContainerDetail.setCreatedBy(ShiroUtils.getLoginName());
-            shipmentContainerDetailService.save(shipmentContainerDetail);
+            if (material == null) {
+                throw new ServiceException("出库单(" + shipmentDetail.getShipmentCode() + ")的物料(" + shipmentDetail.getMaterialCode() + ")不存在!");
+            }
+            shipmentContainerDetaill.setWarehouseCode(shipmentContainerHeader.getWarehouseCode());
+            shipmentContainerDetaill.setCompanyCode(shipmentContainerHeader.getCompanyCode());
+            shipmentContainerDetaill.setContainerCode(shipmentContainerHeader.getContainerCode());
+            shipmentContainerDetaill.setLocationCode(shipmentContainerHeader.getLocationCode());
+            shipmentContainerDetaill.setInventoryId(shipmentCombinationModel.getInventoryDetailId());
+            shipmentContainerDetaill.setInventorySts(shipmentDetail.getInventorySts());
+            shipmentContainerDetaill.setShippingContainerId(shipmentContainerHeader.getId());
+            shipmentContainerDetaill.setShipmentCode(shipmentDetail.getShipmentCode());
+            shipmentContainerDetaill.setShipmentId(shipmentDetail.getShipmentId());
+            shipmentContainerDetaill.setShipmentDetailId(shipmentDetail.getId());
+            shipmentContainerDetaill.setMaterialCode(shipmentDetail.getMaterialCode());
+            shipmentContainerDetaill.setMaterialName(shipmentDetail.getMaterialName());
+            shipmentContainerDetaill.setMaterialSpec(shipmentDetail.getMaterialSpec());
+            shipmentContainerDetaill.setMaterialUnit(shipmentDetail.getMaterialUnit());
+            shipmentContainerDetaill.setQty(shipmentCombinationModel.getShipQty());
+            shipmentContainerDetaill.setWaveId(shipmentDetail.getWaveId());
+            shipmentContainerDetaill.setTaskCreated(0);
+            shipmentContainerDetaill.setBatch(shipmentDetail.getBatch());
+            shipmentContainerDetaill.setLot(shipmentDetail.getLot());
+            shipmentContainerDetaill.setProjectNo(shipmentDetail.getProjectNo());
+            shipmentContainerDetaill.setCreatedBy(ShiroUtils.getLoginName());
+            flag = shipmentContainerDetailService.save(shipmentContainerDetail);
+            if(flag == false){
+                throw new ServiceException("新建组盘明细失败,sql错误");
+            }
         }
 
-        //
+        //4.查看组盘头状态,如果状态在10到20,则生成任务明细或修改任务明细的数量
+        //查看任务头
         if(shipmentContainerHeader.getStatus()>=10 && shipmentContainerHeader.getStatus()<30){
             LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper=Wrappers.lambdaQuery();
             taskHeaderLambdaQueryWrapper.eq(TaskHeader::getWarehouseCode,shipmentContainerHeader.getWarehouseCode())
@@ -271,33 +310,60 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             if(taskHeader==null){
                 throw new ServiceException("有相同的组盘头,但找不到相应的任务头");
             }
-            TaskDetail taskDetail = new TaskDetail();
-            taskDetail.setTaskId(taskHeader.getId());
-            taskDetail.setInternalTaskType(taskHeader.getInternalTaskType());
-            taskDetail.setWarehouseCode(taskHeader.getWarehouseCode());
-            taskDetail.setCompanyCode(taskHeader.getCompanyCode());
-            taskDetail.setTaskType(taskHeader.getTaskType());
-            taskDetail.setAllocationId(shipmentContainerDetail.getId());
-            taskDetail.setBillCode(shipmentContainerDetail.getShipmentCode());
-            taskDetail.setBillDetailId(shipmentContainerDetail.getShipmentDetailId());
-            taskDetail.setMaterialCode(shipmentContainerDetail.getMaterialCode());
-            taskDetail.setMaterialName(shipmentContainerDetail.getMaterialName());
-            taskDetail.setMaterialSpec(shipmentContainerDetail.getMaterialSpec());
-            taskDetail.setMaterialUnit(shipmentContainerDetail.getMaterialUnit());
-            taskDetail.setFromInventoryId(shipmentContainerDetail.getInventoryId());
-            taskDetail.setQty(shipmentContainerDetail.getQty());
-            taskDetail.setContainerCode(taskHeader.getContainerCode());
-            taskDetail.setFromLocation(taskHeader.getFromLocation());
-            taskDetail.setToLocation(taskHeader.getToLocation());
-            if(shipmentContainerHeader.getStatus()==10) {
-                taskDetail.setStatus(0);
+
+            if(shipmentContainerDetaill == null) {
+                //shipmentContainerDetaill为空时,说明组盘明细不是新建,so修改任务明细
+                //查找任务明细
+                LambdaQueryWrapper<TaskDetail> taskDetailLam = Wrappers.lambdaQuery();
+                taskDetailLam.eq(TaskDetail::getWarehouseCode,shipmentContainerDetail.getWarehouseCode())
+                        .eq(TaskDetail::getAllocationId,shipmentContainerDetail.getId())
+                        .eq(TaskDetail::getTaskId,taskHeader.getId())
+                        .eq(TaskDetail::getInternalTaskType,200);
+                TaskDetail taskDetail = taskDetailService.getOne(taskDetailLam);
+                if(taskDetail == null){
+                    throw new ServiceException("找不到对应的任务明细");
+                }
+                taskDetail.setQty(taskDetail.getQty().add(shipmentCombinationModel.getShipQty()));
+                flag=taskDetailService.saveOrUpdate(taskDetail);
+                if(flag == false){
+                    throw new ServiceException("修改任务明细失败,sql错误");
+                }
             }else {
-                taskDetail.setStatus(10);
+                //shipmentContainerDetaill不为空时,说明组盘明细是新建,so新建任务明细
+                TaskDetail taskDetail = new TaskDetail();
+                taskDetail.setTaskId(taskHeader.getId());
+                taskDetail.setInternalTaskType(taskHeader.getInternalTaskType());
+                taskDetail.setWarehouseCode(taskHeader.getWarehouseCode());
+                taskDetail.setCompanyCode(taskHeader.getCompanyCode());
+                taskDetail.setTaskType(taskHeader.getTaskType());
+                taskDetail.setAllocationId(shipmentContainerDetaill.getId());
+                taskDetail.setBillCode(shipmentContainerDetaill.getShipmentCode());
+                taskDetail.setBillDetailId(shipmentContainerDetaill.getShipmentDetailId());
+                taskDetail.setMaterialCode(shipmentContainerDetaill.getMaterialCode());
+                taskDetail.setMaterialName(shipmentContainerDetaill.getMaterialName());
+                taskDetail.setMaterialSpec(shipmentContainerDetaill.getMaterialSpec());
+                taskDetail.setMaterialUnit(shipmentContainerDetaill.getMaterialUnit());
+                taskDetail.setFromInventoryId(shipmentContainerDetaill.getInventoryId());
+                taskDetail.setQty(shipmentContainerDetaill.getQty());
+                taskDetail.setContainerCode(taskHeader.getContainerCode());
+                taskDetail.setFromLocation(taskHeader.getFromLocation());
+                taskDetail.setToLocation(taskHeader.getToLocation());
+                taskDetail.setLot(shipmentContainerDetaill.getLot());
+                taskDetail.setWaveId(shipmentContainerDetaill.getWaveId());
+                taskDetail.setBatch(shipmentContainerDetaill.getBatch());
+                taskDetail.setProjectNo(shipmentContainerDetail.getProjectNo());
+                if (shipmentContainerHeader.getStatus() == 10) {
+                    taskDetail.setStatus(0);
+                } else {
+                    taskDetail.setStatus(10);
+                }
+                taskDetail.setCreatedBy(ShiroUtils.getLoginName());
+                taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
+                flag = taskDetailService.save(taskDetail);
+                if(flag == false){
+                    throw new ServiceException("新建任务明细失败,sql错误");
+                }
             }
-            taskDetail.setTaskType(taskHeader.getTaskType());
-            taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
-            taskDetail.setLastUpdated(null);
-            taskDetailService.save(taskDetail);
         }
         return shipmentContainerDetail;
     }
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 fb7843a..d8d4e95 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
@@ -203,6 +203,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     @Override
     @Transactional
     public AjaxResult createTaskFromShipmentContainers(ShipmentTaskCreateModel shipmentTaskCreateModel) {
+        Boolean flag = true;
         Integer shipmentContainerHeaderId = shipmentTaskCreateModel.getShipmentContainerHeaderIds();
         //获取表头
         ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(shipmentContainerHeaderId);
@@ -235,13 +236,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         task.setFromLocation(shipmentContainerHeader.getLocationCode());
         task.setToLocation(shipmentContainerHeader.getLocationCode());
         //判断是否整出任务,钱柜和AGV不能整出
-        if (shipmentContainerHeader.getStatus().intValue() == 300) {
+
             //表示整出优先
             //判断当前子货箱所有数量是否等于该托盘对应的所有库存的数量,
             //这里必须与库存的在库数量对比,后期可能存在一个配盘在执行任务,后一个配盘又在配这个的情况(这个时候不能整出)
             // 如果相等,则说明这个货箱包含了所有的数量,则可以整出,否则,创建拣选任务;
             //查询所有库存
-            InventoryDetail inventoryCondition = new InventoryDetail();
             LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
             inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getLocationCode, shipmentContainerHeader.getLocationCode())
                     .eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
@@ -258,7 +258,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 task.setTaskType(300);//整盘出库
                 task.setToLocation("");
             }
-        }
+
         task.setInternalTaskType(200);
         task.setAllocationHeadId(shipmentContainerHeader.getId());
         task.setWarehouseCode(shipmentContainerHeader.getWarehouseCode());
@@ -293,19 +293,32 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             taskDetail.setContainerCode(task.getContainerCode());
             taskDetail.setFromLocation(task.getFromLocation());
             taskDetail.setToLocation(task.getToLocation());
+            taskDetail.setLot(shipmentContainerDetail.getLot());
+            taskDetail.setBatch(shipmentContainerDetail.getBatch());
+            taskDetail.setProjectNo(shipmentContainerDetail.getProjectNo());
             taskDetail.setStatus(0);
             taskDetail.setWaveId(shipmentContainerDetail.getWaveId());
             taskDetail.setInventorySts(shipmentContainerDetail.getInventorySts());
-            taskDetail.setTaskType(task.getTaskType());
+            taskDetail.setCreatedBy(ShiroUtils.getLoginName());
             taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
-            taskDetail.setLastUpdated(null);
-            taskDetailService.save(taskDetail);
+            flag=taskDetailService.save(taskDetail);
+            if(flag == false){
+                throw new ServiceException("新建任务明细失败,sql报错");
+            }
+
+            shipmentContainerDetail.setStatus(10);
         }
         //更新货位状态
-        ShipmentContainerHeader record = new ShipmentContainerHeader();
-        record.setId(shipmentContainerHeaderId);
-        record.setStatus(10);
-        shipmentContainerHeaderService.saveOrUpdate(record);
+        shipmentContainerHeader.setStatus(10);
+        flag = shipmentContainerHeaderService.updateById(shipmentContainerHeader);
+        if(flag == false){
+            throw new ServiceException("修改组盘头状态失败,sql报错");
+        }
+
+        flag = shipmentContainerDetailService.updateBatchById(shipmentContainerDetails);
+        if(flag == false){
+            throw new ServiceException("修改组盘明细状态明细失败,sql报错");
+        }
         return AjaxResult.success(task.getId());
 
     }
@@ -1227,11 +1240,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
                 inventoryTransaction.setTransactionType(20);
                 inventoryTransaction.setMaterialCode(shipmentDetail.getMaterialCode());
-                //inventory.setMaterialName(DataUtils.getString(taskDetail.getMaterialName()));//物料名称
+                inventoryTransaction.setMaterialName(shipmentDetail.getMaterialName());
+                inventoryTransaction.setMaterialSpec(shipmentDetail.getMaterialSpec());
+                inventoryTransaction.setMaterialUnit(shipmentDetail.getMaterialUnit());
                 inventoryTransaction.setBillCode(taskDetail.getBillCode());
                 inventoryTransaction.setBillDetailId(shipmentDetail.getId());
                 inventoryTransaction.setBatch(shipmentDetail.getBatch());
                 inventoryTransaction.setLot(shipmentDetail.getLot());
+                inventoryTransaction.setProjectNo(shipmentDetail.getProjectNo());
+                inventoryTransaction.setQcCheck(inventoryDetail.getQcCheck());
+                inventoryTransaction.setSupplierCode(inventoryDetail.getSupplierCode());
                 inventoryTransaction.setManufactureDate(shipmentDetail.getManufactureDate());
                 inventoryTransaction.setExpirationDate(shipmentDetail.getExpirationDate());
                 inventoryTransaction.setInventorySts(inventoryDetail.getInventorySts());
@@ -1255,14 +1273,18 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         containerService.removeByCode(task.getContainerCode());
 
         //将库位状态改为空闲,如果是整出的对应的容器也清空
-        Location locationRecord = new Location();
+
+        LambdaQueryWrapper<Location>  lam=Wrappers.lambdaQuery();
+        lam.eq(Location::getCode,task.getToLocation());
+        Location locationRecord = locationService.getOne(lam);
+        if(lam == null){
+            throw new ServiceException("系统没有"+task.getToLocation()+"库位");
+        }
         locationRecord.setStatus("empty");
         if(task.getTaskType()==300) {
             locationRecord.setContainerCode("");
         }
-        LambdaUpdateWrapper<Location> locationLambdaUpdateWrapper = Wrappers.lambdaUpdate();
-                locationLambdaUpdateWrapper.eq(Location::getCode,task.getToLocation());
-        locationService.update(locationLambdaUpdateWrapper);
+        locationService.updateById(locationRecord);
         //如果是整出,删掉这个库位上的这个托盘,否则更改托盘状态
         Container containerRecord = new Container();
         if(task.getTaskType()==300) {
@@ -1286,14 +1308,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             }
         }
         //设置出库货箱状态为拣货任务完成
-        ShipmentContainerDetail shipmentContainerDetail = new ShipmentContainerDetail();
-        shipmentContainerDetail.setStatus(30);
-        shipmentContainerDetail.setLastUpdated(new Date());
-        shipmentContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
-        LambdaUpdateWrapper<ShipmentContainerDetail> shipmentContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate();
-        shipmentContainerDetailLambdaUpdateWrapper.eq(ShipmentContainerDetail::getId,task.getAllocationHeadId());
-        if (! shipmentContainerDetailService.update(shipmentContainerDetail, shipmentContainerDetailLambdaUpdateWrapper)){
-            throw new ServiceException("更新组盘明细状态失败");
+        for(TaskDetail taskDetail : taskDetails) {
+            ShipmentContainerDetail shipmentContainerDetail = new ShipmentContainerDetail();
+            shipmentContainerDetail.setStatus(30);
+            shipmentContainerDetail.setLastUpdated(new Date());
+            shipmentContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
+            LambdaUpdateWrapper<ShipmentContainerDetail> shipmentContainerDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate();
+            shipmentContainerDetailLambdaUpdateWrapper.eq(ShipmentContainerDetail::getId, taskDetail.getAllocationId());
+            if (!shipmentContainerDetailService.update(shipmentContainerDetail, shipmentContainerDetailLambdaUpdateWrapper)) {
+                throw new ServiceException("更新组盘明细状态失败");
+            }
         }
     //设置出库货箱表头状态为拣货任务完成
         ShipmentContainerHeader shipmentContainerHeader = new ShipmentContainerHeader();
diff --git a/src/main/resources/mybatis/shipment/ShipmentContainerHeaderMapper.xml b/src/main/resources/mybatis/shipment/ShipmentContainerHeaderMapper.xml
index 8fdb262..aad2c80 100644
--- a/src/main/resources/mybatis/shipment/ShipmentContainerHeaderMapper.xml
+++ b/src/main/resources/mybatis/shipment/ShipmentContainerHeaderMapper.xml
@@ -14,28 +14,16 @@
     <result column="length" jdbcType="DECIMAL" property="length" />
     <result column="width" jdbcType="DECIMAL" property="width" />
     <result column="height" jdbcType="DECIMAL" property="height" />
-    <result column="totalValue" jdbcType="DECIMAL" property="totalValue" />
-    <result column="shipmentId" jdbcType="INTEGER" property="shipmentId" />
     <result column="companyCode" jdbcType="VARCHAR" property="companyCode" />
     <result column="totalQty" jdbcType="INTEGER" property="totalQty" />
     <result column="waybillCode" jdbcType="VARCHAR" property="waybillCode" />
     <result column="groupNum" jdbcType="INTEGER" property="groupNum" />
     <result column="groupIndex" jdbcType="INTEGER" property="groupIndex" />
-    <result column="waveId" jdbcType="INTEGER" property="waveId" />
-    <result column="countIndex" jdbcType="INTEGER" property="countIndex" />
-    <result column="countTotal" jdbcType="INTEGER" property="countTotal" />
     <result column="taskCreated" jdbcType="INTEGER" property="taskCreated" />
-    <result column="shipmentCode" jdbcType="VARCHAR" property="shipmentCode" />
-    <result column="transContCode" jdbcType="VARCHAR" property="transContCode" />
     <result column="oqcBench" jdbcType="VARCHAR" property="oqcBench" />
     <result column="oqcBy" jdbcType="VARCHAR" property="oqcBy" />
     <result column="oqcStartAt" jdbcType="TIMESTAMP" property="oqcStartAt" />
     <result column="oqcEndAt" jdbcType="TIMESTAMP" property="oqcEndAt" />
-    <result column="loadId" jdbcType="INTEGER" property="loadId" />
-    <result column="cageId" jdbcType="INTEGER" property="cageId" />
-    <result column="cageCode" jdbcType="VARCHAR" property="cageCode" />
-    <result column="stagedAt" jdbcType="TIMESTAMP" property="stagedAt" />
-    <result column="stagedBy" jdbcType="VARCHAR" property="stagedBy" />
     <result column="created" jdbcType="TIMESTAMP" property="created" />
     <result column="createdBy" jdbcType="VARCHAR" property="createdBy" />
     <result column="lastUpdated" jdbcType="TIMESTAMP" property="lastUpdated" />
@@ -44,15 +32,7 @@
     <result column="userDef1" jdbcType="VARCHAR" property="userDef1" />
     <result column="userDef2" jdbcType="VARCHAR" property="userDef2" />
     <result column="userDef3" jdbcType="VARCHAR" property="userDef3" />
-    <result column="userDef4" jdbcType="VARCHAR" property="userDef4" />
-    <result column="userDef5" jdbcType="VARCHAR" property="userDef5" />
-    <result column="userDef6" jdbcType="VARCHAR" property="userDef6" />
-    <result column="userDef7" jdbcType="VARCHAR" property="userDef7" />
-    <result column="userDef8" jdbcType="VARCHAR" property="userDef8" />
     <result column="carrierCode" jdbcType="VARCHAR" property="carrierCode" />
-    <result column="scaledBy" jdbcType="VARCHAR" property="scaledBy" />
-    <result column="scaledAt" jdbcType="TIMESTAMP" property="scaledAt" />
-    <result column="storeCode" jdbcType="VARCHAR" property="storeCode" />
     <result column="picUrls" jdbcType="VARCHAR" property="picUrls" />
     <result column="pidIds" jdbcType="VARCHAR" property="pidIds" />
     <result column="actualShipDateTime" jdbcType="TIMESTAMP" property="actualShipDateTime" />
@@ -61,12 +41,9 @@
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
     id, containerCode, warehouseCode, containerType, `enable`, parent, totalWeight, totalVolume, 
-    `length`, width, height, totalValue, shipmentId, companyCode, totalQty, waybillCode, 
-    groupNum, groupIndex, waveId, countIndex, countTotal, taskCreated, shipmentCode, 
-    transContCode, oqcBench, oqcBy, oqcStartAt, oqcEndAt, loadId, cageId, cageCode, stagedAt, 
-    stagedBy, created, createdBy, lastUpdated, lastUpdatedBy, version, userDef1, userDef2, 
-    userDef3, userDef4, userDef5, userDef6, userDef7, userDef8, carrierCode, scaledBy, 
-    scaledAt, storeCode, picUrls, pidIds, actualShipDateTime, systemCreated
+    `length`, width, height, totalValue, companyCode, totalQty, waybillCode, groupNum, groupIndex, taskCreated,
+    transContCode, oqcBench, oqcBy, oqcStartAt, oqcEndAt, created, createdBy, lastUpdated, lastUpdatedBy, version,
+     userDef1, userDef2,userDef3,carrierCode,picUrls, pidIds, actualShipDateTime, systemCreated
   </sql>
 
   <select id="getShipmentContainerMaxAndMinStatusByShipmentID" resultType="java.util.Map">