diff --git a/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
index 88b40e6..0c2b897 100644
--- a/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/task/ShipmentTaskHeaderList.vue
@@ -143,8 +143,9 @@
             <a-divider type="vertical"/></a>
           <a v-if="record.isDoubleIn == 1 && record.exceptionState == 1" v-has="'taskHeader:executeTask'" @click="handleDoubleInTask(record)">修复重入数据
             <a-divider type="vertical"/></a>
-          <a v-if="record.status <= 10" v-has="'taskHeader:cancelTask'" @click="cancelTask(record)">取消
-            <a-divider type="vertical"/></a>
+          <a-popconfirm v-if="record.status <= 10" v-has="'taskHeader:cancelTask'" title="确定取消任务吗?" @confirm="() => cancelTask(record)">
+            <a>取消</a>
+          </a-popconfirm>
         </span>
 
       </a-table>
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
index fe52e27..4ca2b97 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
@@ -2,6 +2,8 @@ package org.jeecg.modules.wms.framework.service;
 
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader;
+import org.jeecg.modules.wms.shipment.shipmentCombination.entity.CombinationModel;
+import org.jeecg.modules.wms.shipment.shipmentHeader.entity.CombinationParam;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 
 /**
@@ -12,4 +14,10 @@ public interface IHuahengMultiHandlerService {
     Result sendTaskToWcs(TaskHeader taskHeader);
 
     Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode);
+
+    Result combination(CombinationModel combinationModel);
+
+    Result combination(CombinationParam combinationParam);
+
+    Result cancelCombine(Integer id);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
index e72f5b6..ab89228 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
@@ -1,15 +1,26 @@
 package org.jeecg.modules.wms.framework.service.impl;
 
+import java.math.BigDecimal;
+
 import javax.annotation.Resource;
 
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.wms.framework.controller.HuahengBaseController;
 import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService;
+import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
+import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
 import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader;
 import org.jeecg.modules.wms.receipt.receiptContainerHeader.service.IReceiptContainerHeaderService;
+import org.jeecg.modules.wms.shipment.shipmentCombination.entity.CombinationModel;
+import org.jeecg.modules.wms.shipment.shipmentCombination.service.IShipmentCombinationService;
+import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerHeaderService;
+import org.jeecg.modules.wms.shipment.shipmentHeader.entity.CombinationParam;
+import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
+import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author 游杰
@@ -21,8 +32,17 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem
     private ITaskHeaderService taskHeaderService;
     @Resource
     private IReceiptContainerHeaderService receiptContainerHeaderService;
+    @Resource
+    private IShipmentCombinationService shipmentCombinationService;
+    @Resource
+    private IShipmentDetailService shipmentDetailService;
+    @Resource
+    private IInventoryDetailService inventoryDetailService;
+    @Resource
+    private IShipmentContainerHeaderService shipmentContainerHeaderService;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result sendTaskToWcs(TaskHeader taskHeader) {
         if (taskHeader == null) {
             return Result.error("任务信息为空");
@@ -39,6 +59,7 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result<TaskHeader> createReceiptTask(ReceiptContainerHeader receiptContainerHeader, String warehouseCode) {
         String lockKey = warehouseCode;
         Result result = handleMultiProcess("createReceiptTask", lockKey, new MultiProcessListener() {
@@ -50,4 +71,50 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem
         });
         return result;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result combination(CombinationModel combinationModel) {
+        Result result = handleMultiProcess("combination", new MultiProcessListener() {
+            @Override
+            public Result<?> doProcess() {
+                Result result = shipmentCombinationService.combination(combinationModel);
+                return result;
+            }
+        });
+        return result;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result combination(CombinationParam combinationParam) {
+        Result result = handleMultiProcess("combination", new MultiProcessListener() {
+            @Override
+            public Result<?> doProcess() {
+                ShipmentDetail shipmentDetail = shipmentDetailService.getById(combinationParam.getShipmentDetailID());
+                InventoryDetail inventoryDetail = inventoryDetailService.getById(combinationParam.getInventoryDetailID());
+                CombinationModel combinationModel = new CombinationModel();
+                combinationModel.setShipmentDetail(shipmentDetail);
+                combinationModel.setInventoryDetail(inventoryDetail);
+                combinationModel.setShipQty(new BigDecimal(combinationParam.getShipQty()));
+                Result result = shipmentCombinationService.combination(combinationModel);
+                return result;
+            }
+        });
+        return result;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result cancelCombine(Integer id) {
+        Result result = handleMultiProcess("cancelCombine", new MultiProcessListener() {
+            @Override
+            public Result<?> doProcess() {
+                Result result = shipmentContainerHeaderService.cancelCombine(id);
+                return result;
+            }
+        });
+        return result;
+    }
+
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java
index 59f6d5f..d492035 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java
@@ -40,4 +40,12 @@ public interface IInventoryDetailService extends IService<InventoryDetail> {
      */
     IPage<InventoryDetail> queryPage(Page<InventoryDetail> page, QueryWrapper<InventoryDetail> queryWrapper);
 
+    /**
+     * 更新库存详情的任务数量
+     * @param  taskQty
+     * @param  id
+     * @return
+     */
+    boolean updateTaskQtyById(BigDecimal taskQty, int id);
+
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
index 39feb83..afb132b 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
@@ -111,6 +111,15 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe
         return pageResult;
     }
 
+    @Override
+    public boolean updateTaskQtyById(BigDecimal taskQty, int id) {
+        InventoryDetail inventoryDetail = new InventoryDetail();
+        inventoryDetail.setTaskQty(taskQty);
+        inventoryDetail.setId(id);
+        boolean success = updateById(inventoryDetail);
+        return success;
+    }
+
     /**
      * 计算库存明细托盘填充度
      * @author                         TanYibin
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 625f4fc..a4e694f 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
@@ -10,14 +10,12 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.modules.wms.config.location.entity.Location;
 import org.jeecg.modules.wms.config.location.service.ILocationService;
-import org.jeecg.modules.wms.config.locationHigh.entity.LocationHigh;
 import org.jeecg.modules.wms.config.port.entity.Port;
 import org.jeecg.modules.wms.config.port.service.IPortService;
 import org.jeecg.modules.wms.config.zone.entity.Zone;
 import org.jeecg.modules.wms.config.zone.service.IZoneService;
-import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
+import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService;
 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
-import org.jeecg.modules.wms.shipment.shipmentCombination.entity.CombinationModel;
 import org.jeecg.modules.wms.shipment.shipmentCombination.entity.Shipment;
 import org.jeecg.modules.wms.shipment.shipmentCombination.service.IShipmentCombinationService;
 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader;
@@ -58,6 +56,8 @@ public class ShipmentCombinationController {
     private IZoneService zoneService;
     @Resource
     private IPortService portService;
+    @Resource
+    private IHuahengMultiHandlerService huahengMultiHandlerService;
 
     /**
      * 获取单据列表
@@ -100,13 +100,7 @@ public class ShipmentCombinationController {
     @PostMapping("/combination")
     @ResponseBody
     public Result combination(@RequestBody CombinationParam combinationParam) {
-        ShipmentDetail shipmentDetail = shipmentDetailService.getById(combinationParam.getShipmentDetailID());
-        InventoryDetail inventoryDetail = inventoryDetailService.getById(combinationParam.getInventoryDetailID());
-        CombinationModel combinationModel = new CombinationModel();
-        combinationModel.setShipmentDetail(shipmentDetail);
-        combinationModel.setInventoryDetail(inventoryDetail);
-        combinationModel.setShipQty(new BigDecimal(combinationParam.getShipQty()));
-        return shipmentCombinationService.combination(combinationModel);
+        return huahengMultiHandlerService.combination(combinationParam);
     }
 
     /**
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 8240ab9..2e570c5 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
@@ -1,15 +1,15 @@
 package org.jeecg.modules.wms.shipment.shipmentCombination.service;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
-import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader;
 import org.jeecg.modules.wms.shipment.shipmentCombination.entity.CombinationModel;
+import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail;
 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;
-
 /**
  * @author 游杰
  */
@@ -26,4 +26,8 @@ public interface IShipmentCombinationService {
     public Result combination(CombinationModel combinationModel);
 
     public Result autoCombinationDetail(ShipmentDetail shipmentDetail, BigDecimal shipQty);
+
+    ShipmentContainerHeader addShipmentContainerHeader(InventoryDetail inventoryDetail, ShipmentDetail shipmentDetail);
+
+    ShipmentContainerDetail addShipmentContainerDetail(ShipmentContainerHeader shipmentContainerHeader, CombinationModel combinationModel);
 }
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 505d0b1..e25c379 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
@@ -5,6 +5,8 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import javax.annotation.Resource;
+
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.wms.config.container.entity.Container;
@@ -14,6 +16,7 @@ import org.jeecg.modules.wms.config.location.service.ILocationService;
 import org.jeecg.modules.wms.config.material.entity.Material;
 import org.jeecg.modules.wms.config.material.service.IMaterialService;
 import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService;
+import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService;
 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryHeaderService;
@@ -46,10 +49,12 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 
 import cn.monitor4all.logRecord.annotation.OperationLog;
 import cn.monitor4all.logRecord.context.LogRecordContext;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * @author 游杰
  */
+@Slf4j
 @Service
 public class ShipmentCombinationServiceImpl implements IShipmentCombinationService {
 
@@ -81,6 +86,8 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
     private ITaskDetailService taskDetailService;
     @Autowired
     private IInventoryHeaderService inventoryHeaderService;
+    @Resource
+    private IHuahengMultiHandlerService huahengMultiHandlerService;
 
     /**
      * 根据出库单详情,匹配到可用出库的库存详情
@@ -212,7 +219,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
                 combinationModel.setShipQty(inventoryQty);
                 shipmentQty = shipmentQty.subtract(inventoryQty);
             }
-            Result result = shipmentCombinationService.combination(combinationModel);
+            Result result = huahengMultiHandlerService.combination(combinationModel);
             if (!result.isSuccess()) {
                 throw new JeecgBootException(result.getMessage());
             }
@@ -227,6 +234,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         BigDecimal shipmentQty = combinationModel.getShipQty();
         ShipmentDetail shipmentDetail = combinationModel.getShipmentDetail();
         InventoryDetail inventoryDetail = combinationModel.getInventoryDetail();
+        log.info("开始出库配盘" + shipmentDetail);
         if (shipmentQty.compareTo(BigDecimal.ZERO) <= 0) {
             return Result.error("配盘时,出库数量必须大于0");
         }
@@ -281,7 +289,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
             return Result.error("配盘时, 库存详情的任务数量不能超过库存数量");
         }
         inventoryDetail.setTaskQty(inventoryDetailTaskQty);
-        success = inventoryDetailService.updateById(inventoryDetail);
+        success = inventoryDetailService.updateTaskQtyById(inventoryDetailTaskQty, inventoryDetail.getId());
         if (!success) {
             throw new JeecgBootException("配盘时, 更新库存详情失败");
         }
@@ -291,21 +299,18 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         }
         if (shipmentDetailTaskQty.compareTo(shipmentDetailQty) > 0) {
             return Result.error("配盘时, 出库详情的任务数量不能超过单据数量");
-        } else if (inventoryDetailTaskQty.compareTo(inventoryDetailQty) == 0) {
-            shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_WAITING_OFF_SHELF);
-        } else if (inventoryDetailTaskQty.compareTo(inventoryDetailQty) < 0) {
-            shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_WAITING_OFF_SHELF);
         }
+        shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_GROUPDISK);
         shipmentDetail.setTaskQty(shipmentDetailTaskQty);
-        success = shipmentDetailService.updateById(shipmentDetail);
+        success = shipmentDetailService.updateTaskQtyAndStatusById(shipmentDetailTaskQty, QuantityConstant.SHIPMENT_HEADER_GROUPDISK, shipmentDetail.getId());
         if (!success) {
             throw new JeecgBootException("配盘时, 更新出库详情失败");
         }
-        ShipmentContainerHeader shipmentContainerHeader = addShipmentContainerHeader(inventoryDetail, shipmentDetail);
+        ShipmentContainerHeader shipmentContainerHeader = shipmentCombinationService.addShipmentContainerHeader(inventoryDetail, shipmentDetail);
         if (shipmentContainerHeader == null) {
             throw new JeecgBootException("配盘时, 新增出库组盘头失败");
         }
-        ShipmentContainerDetail shipmentContainerDetail = addShipmentContainerDetail(shipmentContainerHeader, combinationModel);
+        ShipmentContainerDetail shipmentContainerDetail = shipmentCombinationService.addShipmentContainerDetail(shipmentContainerHeader, combinationModel);
         if (shipmentContainerDetail == null) {
             throw new JeecgBootException("配盘时, 新增出库组盘详情失败");
         }
@@ -314,9 +319,11 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
             throw new JeecgBootException("配盘时, 更新出库单失败");
         }
         LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(Collections.singletonList(shipmentContainerDetail)));
+        log.info("完成出库配盘" + shipmentDetail);
         return Result.ok("配盘成功");
     }
 
+    @Override
     @Transactional(rollbackFor = JeecgBootException.class)
     public ShipmentContainerHeader addShipmentContainerHeader(InventoryDetail inventoryDetail, ShipmentDetail shipmentDetail) {
         String containerCode = inventoryDetail.getContainerCode();
@@ -342,14 +349,22 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         if (shipmentContainerHeader != null) {
             if (taskType != shipmentContainerHeader.getTaskType()) {
                 shipmentContainerHeader.setTaskType(taskType);
-                if (!shipmentContainerHeaderService.updateById(shipmentContainerHeader)) {
+                if (!shipmentContainerHeaderService.updateTaskTypeById(taskType, shipmentContainerHeader.getId())) {
                     throw new ServiceException("更新出库组盘头任务类型失败");
                 }
             }
         } else {
+            String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
+            if (StringUtils.isEmpty(value)) {
+                throw new JeecgBootException("取消入库任务时, 没有获取到配置属性");
+            }
+            int taskLocationRule = Integer.parseInt(value);
             shipmentContainerHeader = new ShipmentContainerHeader();
             shipmentContainerHeader.setContainerCode(containerCode);
             shipmentContainerHeader.setFromLocationCode(locationCode);
+            if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
+                shipmentContainerHeader.setToLocationCode(locationCode);
+            }
             shipmentContainerHeader.setWarehouseCode(warehouseCode);
             shipmentContainerHeader.setCompanyCode(shipmentDetail.getCompanyCode());
             shipmentContainerHeader.setContainerTypeCode(container.getContainerTypeCode());
@@ -365,6 +380,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         return shipmentContainerHeader;
     }
 
+    @Override
     @Transactional(rollbackFor = JeecgBootException.class)
     public ShipmentContainerDetail addShipmentContainerDetail(ShipmentContainerHeader shipmentContainerHeader, CombinationModel combinationModel) {
         boolean success = false;
@@ -381,8 +397,9 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
             .eq(ShipmentContainerDetail::getWarehouseCode, warehouseCode);
         ShipmentContainerDetail shipmentContainerDetail = shipmentContainerDetailService.getOne(shipmentContainerDetailLambdaQueryWrapper);
         if (shipmentContainerDetail != null) {
-            shipmentContainerDetail.setQty(shipmentContainerDetail.getQty().add(combinationModel.getShipQty()));
-            success = shipmentContainerDetailService.updateById(shipmentContainerDetail);
+            BigDecimal qty = shipmentContainerDetail.getQty().add(combinationModel.getShipQty());
+            shipmentContainerDetail.setQty(qty);
+            success = shipmentContainerDetailService.updateQtyById(qty, shipmentContainerDetail.getId());
             if (!success) {
                 throw new JeecgBootException("更新出库组盘详情失败");
             }
@@ -435,6 +452,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         if (shipmentContainerHeader.getStatus() >= QuantityConstant.SHIPMENT_CONTAINER_TASK) {
             return Result.error("生成出库任务时, 出库组盘头" + shipmentContainerHeader.getId() + "已经生成任务,请不要重复生成,操作中止");
         }
+        log.info("开始创建出库任务,出库配盘头" + shipmentContainerHeader.getId());
         List<ShipmentContainerDetail> shipmentContainerDetailList =
             shipmentContainerDetailService.getShipmentContainerDetailListByHeaderId(shipmentContainerHeader.getId());
         if (shipmentContainerDetailList.size() == 0) {
@@ -446,6 +464,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         String fromLocationCode = shipmentContainerHeader.getFromLocationCode();
         String toLocationCode = shipmentContainerHeader.getToLocationCode();
         String containerCode = shipmentContainerHeader.getContainerCode();
+        String toPort = shipmentContainerHeader.getToPort();
         if (StringUtils.isEmpty(fromLocationCode)) {
             return Result.error("生成出库任务时, 出库组盘头没有起始库位号");
         }
@@ -500,13 +519,6 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         if (shipmentTaskRule == QuantityConstant.RULE_TASK_PICK_SHIPMENT) {
             taskType = QuantityConstant.TASK_TYPE_SORTINGSHIPMENT;
         }
-        value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
-        int taskLocationRule = Integer.parseInt(value);
-        if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
-            toLocationCode = fromLocationCode;
-            shipmentContainerHeader.setToLocationCode(toLocationCode);
-        }
-        shipmentContainerHeader.setTaskType(taskType);
         String zoneCode = location.getZoneCode();
         TaskHeader taskHeader = new TaskHeader();
         taskHeader.setPreTaskNo(preTaskNo);
@@ -556,6 +568,17 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         if (!success) {
             throw new JeecgBootException("生成出库任务时, 创建任务详情失败");
         }
+        value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_TASK_LOCATION);
+        int taskLocationRule = Integer.parseInt(value);
+        int shipmentContainerHeaderId = shipmentContainerHeader.getId();
+        shipmentContainerHeader = new ShipmentContainerHeader();
+        if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
+            toLocationCode = fromLocationCode;
+            shipmentContainerHeader.setToLocationCode(toLocationCode);
+        }
+        shipmentContainerHeader.setToPort(toPort);
+        shipmentContainerHeader.setId(shipmentContainerHeaderId);
+        shipmentContainerHeader.setTaskType(taskType);
         shipmentContainerHeader.setStatus(QuantityConstant.SHIPMENT_CONTAINER_TASK);
         success = shipmentContainerHeaderService.updateById(shipmentContainerHeader);
         if (!success) {
@@ -570,6 +593,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
         LogRecordContext.putVariable("extraJsonString1", JSON.toJSONString(shipmentContainerDetailList));// 操作日志收集
         LogRecordContext.putVariable("taskDetailList", taskDetailList);// 操作日志收集
         LogRecordContext.putVariable("extraJsonString2", JSON.toJSONString(taskDetailList));// 操作日志收集
+        log.info("完成创建出库任务,出库配盘头" + shipmentContainerHeader.getId());
         return Result.OK("生成出库任务成功");
     }
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java
index 0a0ca3e..85d95cc 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentContainerHeader/controller/ShipmentContainerHeaderController.java
@@ -6,6 +6,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -17,12 +18,12 @@ import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService;
 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.utils.HuahengJwtUtil;
-import org.jeecg.utils.StringUtils;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
@@ -60,6 +61,9 @@ public class ShipmentContainerHeaderController extends JeecgController<ShipmentC
     @Autowired
     private IShipmentContainerDetailService shipmentContainerDetailService;
 
+    @Resource
+    private IHuahengMultiHandlerService huahengMultiHandlerService;
+
     /*---------------------------------主表处理-begin-------------------------------------*/
 
     /**
@@ -122,7 +126,7 @@ public class ShipmentContainerHeaderController extends JeecgController<ShipmentC
     @RequiresPermissions("shipmentContainerHeader:delete")
     @DeleteMapping(value = "/delete")
     public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
-        return shipmentContainerHeaderService.cancelCombine(Integer.parseInt(id));
+        return huahengMultiHandlerService.cancelCombine(Integer.parseInt(id));
     }
 
     /**
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 f2e53c5..802323e 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
@@ -1,8 +1,11 @@
 package org.jeecg.modules.wms.shipment.shipmentContainerHeader.service;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail;
+
 import com.baomidou.mybatisplus.extension.service.IService;
-import java.util.List;
 
 /**
  * @Description: 出库组盘详情
@@ -17,4 +20,6 @@ public interface IShipmentContainerDetailService extends IService<ShipmentContai
     public List<ShipmentContainerDetail> getShipmentContainerDetailListByHeaderId(int shipmentContainerHeaderId);
 
     public List<ShipmentContainerDetail> getShipmentContainerDetailListByShipmentCode(String shipmentCode);
+
+    boolean updateQtyById(BigDecimal qty, int id);
 }
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 a8defb5..db27731 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
@@ -55,4 +55,21 @@ public interface IShipmentContainerHeaderService extends IService<ShipmentContai
      * @return
      */
     Result cancelCombine(List<Integer> ids);
+
+    /**
+     * 更新任务类型
+     * @param  taskType
+     * @param  id
+     * @return
+     */
+    boolean updateTaskTypeById(int taskType, int id);
+
+    /**
+     * 更新出库配盘状态
+     * @param  status
+     * @param  id
+     * @return
+     */
+    boolean updateStatusById(int status, int id);
+
 }
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 95e2237..ffef3c4 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
@@ -1,14 +1,17 @@
 package org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import java.math.BigDecimal;
+import java.util.List;
+
 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail;
 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.mapper.ShipmentContainerDetailMapper;
 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * @Description: 出库组盘详情
@@ -43,4 +46,13 @@ public class ShipmentContainerDetailServiceImpl extends ServiceImpl<ShipmentCont
         List<ShipmentContainerDetail> shipmentContainerDetailList = list(shipmentContainerDetailLambdaQueryWrapper);
         return shipmentContainerDetailList;
     }
+
+    @Override
+    public boolean updateQtyById(BigDecimal qty, int id) {
+        ShipmentContainerDetail shipmentContainerDetail = new ShipmentContainerDetail();
+        shipmentContainerDetail.setQty(qty);
+        shipmentContainerDetail.setId(id);
+        boolean success = updateById(shipmentContainerDetail);
+        return success;
+    }
 }
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 4414471..9b1109b 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
@@ -1,6 +1,7 @@
 package org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.impl;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -9,9 +10,10 @@ import java.util.stream.Collectors;
 import javax.annotation.Resource;
 
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService;
 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
-import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail;
 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.mapper.ShipmentContainerDetailMapper;
@@ -28,13 +30,13 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.alibaba.fastjson.JSON;
-import org.jeecg.common.exception.JeecgBootException;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import cn.monitor4all.logRecord.annotation.OperationLog;
 import cn.monitor4all.logRecord.context.LogRecordContext;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * @Description: 出库组盘
@@ -42,6 +44,7 @@ import cn.monitor4all.logRecord.context.LogRecordContext;
  * @Date:        2022-11-22
  * @Version:     V1.0
  */
+@Slf4j
 @Service
 public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentContainerHeaderMapper, ShipmentContainerHeader>
     implements IShipmentContainerHeaderService {
@@ -58,6 +61,8 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
     private IShipmentContainerDetailService shipmentContainerDetailService;
     @Resource
     private IInventoryDetailService inventoryDetailService;
+    @Resource
+    private IHuahengMultiHandlerService huahengMultiHandlerService;
 
     @Override
     @Transactional
@@ -138,12 +143,13 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
         if (shipmentContainerHeader == null) {
             return false;
         }
+        log.info("开始取消出库任务,任务id" + taskHeader.getId());
         int shipmentContainerStatus = shipmentContainerHeader.getStatus();
         if (shipmentContainerStatus != QuantityConstant.SHIPMENT_CONTAINER_TASK) {
             throw new JeecgBootException("取消出库任务时, 任务状态不为生成任务状态");
         }
         shipmentContainerHeader.setStatus(QuantityConstant.SHIPMENT_CONTAINER_BUILD);
-        boolean success = updateById(shipmentContainerHeader);
+        boolean success = this.updateStatusById(QuantityConstant.SHIPMENT_CONTAINER_BUILD, shipmentContainerHeader.getId());
         if (!success) {
             throw new JeecgBootException("取消入库任务时, 更新入库组盘头失败");
         }
@@ -156,6 +162,10 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             if (shipmentDetail == null) {
                 throw new JeecgBootException("取消出库任务时, 没有找到出库单详情" + shipmentContainerDetail.getShipmentDetailId());
             }
+            int shipmentId = shipmentDetail.getShipmentId();
+            shipmentDetail = new ShipmentDetail();
+            shipmentDetail.setId(shipmentContainerDetail.getShipmentDetailId());
+            shipmentDetail.setShipmentId(shipmentId);
             shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_GROUPDISK);
             shipmentDetailList.add(shipmentDetail);
         }
@@ -172,6 +182,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
                 }
             }
         }
+        log.info("完成取消出库任务,任务id" + taskHeader.getId());
         LogRecordContext.putVariable("shipmentContainerHeader", shipmentContainerHeader);// 操作日志收集
         LogRecordContext.putVariable("shipmentContainerDetailList", shipmentContainerDetailList);// 操作日志收集
         LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(shipmentContainerDetailList));// 操作日志收集
@@ -182,6 +193,7 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
     @Transactional(rollbackFor = JeecgBootException.class)
     @OperationLog(bizId = "''", bizType = "'出库单追踪'", tag = "'详情取消配盘'", extra = "#extraJsonString", msg = "''", recordReturnValue = true)
     public Result cancelCombine(Integer id) {
+        log.info("开始取消配盘,id:" + id);
         ShipmentContainerHeader shipmentContainerHeader = this.getById(id);
         if (shipmentContainerHeader == null) {
             return Result.error("取消出库配盘失败, 没有找到出库组盘头ID:" + id);
@@ -191,15 +203,15 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
             return Result.error("取消出库配盘失败,已经生成出库任务");
         }
         List<ShipmentContainerDetail> shipmentContainerDetailList = shipmentContainerDetailService.getShipmentContainerDetailListByHeaderId(id);
-        List<ShipmentDetail> shipmentDetailList = new ArrayList<ShipmentDetail>();
         for (ShipmentContainerDetail shipmentContainerDetail : shipmentContainerDetailList) {
             ShipmentDetail shipmentDetail = shipmentDetailService.getById(shipmentContainerDetail.getShipmentDetailId());
             if (shipmentDetail == null) {
                 throw new JeecgBootException("取消出库配盘失败, 没有找到出库单,出库详情ID:" + shipmentContainerDetail.getShipmentDetailId());
             }
             shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_BUILD);
-            shipmentDetail.setTaskQty(shipmentDetail.getTaskQty().subtract(shipmentContainerDetail.getQty()));
-            if (!shipmentDetailService.updateById(shipmentDetail)) {
+            BigDecimal taskQty = shipmentDetail.getTaskQty().subtract(shipmentContainerDetail.getQty());
+            shipmentDetail.setTaskQty(taskQty);
+            if (!shipmentDetailService.updateTaskQtyAndStatusById(taskQty, QuantityConstant.SHIPMENT_HEADER_BUILD, shipmentDetail.getId())) {
                 throw new JeecgBootException("取消出库配盘失败, 更新出库明细失败,出库详情ID:" + shipmentContainerDetail.getShipmentDetailId());
             }
             if (!shipmentContainerDetailService.removeById(shipmentContainerDetail.getId())) {
@@ -209,26 +221,48 @@ public class ShipmentContainerHeaderServiceImpl extends ServiceImpl<ShipmentCont
                 throw new JeecgBootException("取消出库配盘失败, 更新出库单头失败,出库单ID:" + shipmentDetail.getShipmentId());
             }
             InventoryDetail inventoryDetail = inventoryDetailService.getById(shipmentContainerDetail.getInventoryDetailId());
-            inventoryDetail.setTaskQty(inventoryDetail.getTaskQty().subtract(shipmentContainerDetail.getQty()));
-            if (!inventoryDetailService.updateById(inventoryDetail)) {
+            if (inventoryDetail == null) {
+                throw new JeecgBootException("取消出库配盘失败, 没有找到库存详情失败,库存详情ID:" + shipmentContainerDetail.getInventoryDetailId());
+            }
+            BigDecimal inventoryDetailTaskQty = inventoryDetail.getTaskQty().subtract(shipmentContainerDetail.getQty());
+            if (!inventoryDetailService.updateTaskQtyById(inventoryDetailTaskQty, shipmentContainerDetail.getInventoryDetailId())) {
                 throw new JeecgBootException("取消出库配盘失败, 解锁库存详情失败,库存详情ID:" + inventoryDetail.getId());
             }
-            shipmentDetailList.add(shipmentDetail);
         }
         if (!this.removeById(id)) {
             throw new JeecgBootException("取消出库配盘失败, 删除出库组盘头表失败,配盘ID:" + id);
         }
         LogRecordContext.putVariable("extraJsonString", JSON.toJSONString(shipmentContainerDetailList));
+        log.info("完成取消配盘,id:" + id);
         return Result.ok("取消配盘成功");
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result cancelCombine(List<Integer> ids) {
         Result result = null;
         for (Integer id : ids) {
-            result = cancelCombine(id);
+            result = huahengMultiHandlerService.cancelCombine(id);
         }
         return result;
     }
 
+    @Override
+    public boolean updateTaskTypeById(int taskType, int id) {
+        ShipmentContainerHeader shipmentContainerHeader = new ShipmentContainerHeader();
+        shipmentContainerHeader.setTaskType(taskType);
+        shipmentContainerHeader.setId(id);
+        boolean success = this.updateById(shipmentContainerHeader);
+        return success;
+    }
+
+    @Override
+    public boolean updateStatusById(int status, int id) {
+        ShipmentContainerHeader shipmentContainerHeader = new ShipmentContainerHeader();
+        shipmentContainerHeader.setStatus(status);
+        shipmentContainerHeader.setId(id);
+        boolean success = this.updateById(shipmentContainerHeader);
+        return success;
+    }
+
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentDetailService.java
index 19152cb..ea9ebe5 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentDetailService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentDetailService.java
@@ -1,11 +1,12 @@
 package org.jeecg.modules.wms.shipment.shipmentHeader.service;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;
 
-import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
  * @Description: 出库单详情
@@ -22,4 +23,6 @@ public interface IShipmentDetailService extends IService<ShipmentDetail> {
     public List<ShipmentDetail> getShipmentDetailListByShipmentId(Integer id);
 
     boolean batchSave(List<ShipmentDetail> shipmentDetailList);
+
+    boolean updateTaskQtyAndStatusById(BigDecimal taskQty, int status, int id);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java
index 6230497..39c0ab1 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java
@@ -1,15 +1,12 @@
 package org.jeecg.modules.wms.shipment.shipmentHeader.service;
 
+import java.io.Serializable;
+import java.util.Collection;
+
 import org.jeecg.common.api.vo.Result;
-import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerHeader;
-import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader;
-import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;
+
 import com.baomidou.mybatisplus.extension.service.IService;
-import org.springframework.beans.factory.annotation.Autowired;
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.List;
 
 /**
  * @Description: 出库单
@@ -40,4 +37,6 @@ public interface IShipmentHeaderService extends IService<ShipmentHeader> {
     public ShipmentHeader getShipmentHeaderByCode(String code, String warehouseCode);
 
     public ShipmentHeader getShipmentHeaderByReferCode(String referCode, String warehouseCode);
+
+    boolean updateFirstStatusAndLastStatusById(Integer firstStatus, Integer lastStatus, int id);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentDetailServiceImpl.java
index 2a2826c..8b4403a 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentDetailServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentDetailServiceImpl.java
@@ -1,14 +1,15 @@
 package org.jeecg.modules.wms.shipment.shipmentHeader.service.impl;
 
-import com.alibaba.fastjson.JSON;
-import org.jeecg.common.exception.JeecgBootException;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.List;
+
+import javax.annotation.Resource;
+
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.wms.config.material.entity.Material;
 import org.jeecg.modules.wms.config.material.service.IMaterialService;
-import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader;
-import org.jeecg.modules.wms.receipt.receiptHeader.service.IReceiptHeaderService;
 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.mapper.ShipmentDetailMapper;
@@ -16,19 +17,17 @@ import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailServ
 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService;
 import org.jeecg.utils.StringUtils;
 import org.jeecg.utils.constant.QuantityConstant;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
-import java.util.List;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import cn.monitor4all.logRecord.annotation.OperationLog;
 import cn.monitor4all.logRecord.context.LogRecordContext;
 
-import org.springframework.beans.factory.annotation.Autowired;
-
-import javax.annotation.Resource;
-
 /**
  * @Description: 出库单详情
  * @Author:      jeecg-boot
@@ -108,4 +107,15 @@ public class ShipmentDetailServiceImpl extends ServiceImpl<ShipmentDetailMapper,
     public boolean batchSave(List<ShipmentDetail> shipmentDetailList) {
         return this.saveBatch(shipmentDetailList);
     }
+
+    @Override
+    public boolean updateTaskQtyAndStatusById(BigDecimal taskQty, int status, int id) {
+        ShipmentDetail shipmentDetail = new ShipmentDetail();
+        shipmentDetail.setTaskQty(taskQty);
+        shipmentDetail.setStatus(status);
+        shipmentDetail.setId(id);
+        boolean success = updateById(shipmentDetail);
+        return success;
+    }
+
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
index 20becd9..cb5198c 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
@@ -193,7 +193,7 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
         // 尾状态是单据详情中最小的状态
         shipmentHeader.setFirstStatus(maxStatus);
         shipmentHeader.setLastStatus(minStatus);
-        if (!shipmentHeaderService.updateById(shipmentHeader)) {
+        if (!shipmentHeaderService.updateFirstStatusAndLastStatusById(maxStatus, minStatus, shipmentId)) {
             throw new JeecgBootException("更新出库单:" + shipmentHeader.getCode() + " 头状态失败");
         }
         LogRecordContext.putVariable("minStatus", minStatus);
@@ -238,4 +238,14 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
         return shipmentHeader;
     }
 
+    @Override
+    public boolean updateFirstStatusAndLastStatusById(Integer firstStatus, Integer lastStatus, int id) {
+        ShipmentHeader shipmentHeader = new ShipmentHeader();
+        shipmentHeader.setFirstStatus(firstStatus);
+        shipmentHeader.setLastStatus(lastStatus);
+        shipmentHeader.setId(id);
+        boolean success = updateById(shipmentHeader);
+        return success;
+    }
+
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
index 21cc2be..f56d900 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
@@ -909,6 +909,14 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (!success) {
             return Result.error("取消任务失败, 删除任务失败");
         }
+        List<TaskDetail> taskDetailList = taskDetailService.getTaskDetailListByTaskId(taskId);
+        if (taskDetailList.size() > 0) {
+            List<Integer> taskDetailIdList = taskDetailList.stream().map(TaskDetail::getId).collect(Collectors.toList());
+            success = taskDetailService.removeByIds(taskDetailIdList);
+            if (!success) {
+                return Result.error("取消任务失败, 删除任务详情失败");
+            }
+        }
         Result result = Result.ok("取消任务成功");
         switch (taskType) {
             case QuantityConstant.TASK_TYPE_WHOLERECEIPT:
@@ -959,6 +967,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result<TaskHeader> createEmptyIn(String containerCode, String toLocationCode, String warehouseCode) {
+        log.info("开始创建空托入库任务");
         if (StringUtils.isEmpty(containerCode)) {
             return Result.error("创建空托盘入库时, 托盘号为空");
         }
@@ -1004,6 +1013,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         taskHeader.setToLocationCode(toLocationCode);
         taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
         success = taskHeaderService.save(taskHeader);
+        log.info("完成创建空托入库任务");
         if (!success) {
             throw new JeecgBootException("创建空托盘入库时,保存任务失败");
         }
@@ -1503,6 +1513,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                     && inventoryDetail1.getLot().equals(inventoryDetail2.getLot()) && inventoryDetail1.getProject().equals(inventoryDetail2.getProject())) {
                     // 属性一样的库存,相加合并。
                     BigDecimal totalQty = inventoryDetail1.getQty().add(inventoryDetail2.getQty());
+                    inventoryDetail1.setQty(totalQty);
                     InventoryDetail inventoryDetail = new InventoryDetail();
                     inventoryDetail.setId(inventoryDetail1.getId());
                     inventoryDetail.setQty(totalQty);
@@ -1546,6 +1557,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeEmptyInTask(TaskHeader taskHeader) {
+        log.info("开始完成空托入库任务");
         String warehouseCode = taskHeader.getWarehouseCode();
         String toLocationCode = taskHeader.getToLocationCode();
         String containerCode = taskHeader.getContainerCode();
@@ -1574,8 +1586,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (!success) {
             throw new JeecgBootException("完成空托盘入库任务时, 更新库位的容器编码和状态失败");
         }
-        taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED);
-        success = taskHeaderService.updateById(taskHeader);
+        success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_COMPLETED, taskHeader.getId());
+        log.info("完成空托入库任务");
         if (!success) {
             throw new JeecgBootException("完成空托盘入库任务时, 更新任务失败");
         }
@@ -2244,7 +2256,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     public Result cancelShipmentTask(TaskHeader taskHeader) {
         boolean success = shipmentContainerHeaderService.cancelShipmentTask(taskHeader);
         if (!success) {
-            throw new JeecgBootException("取消入库任务时, 更新组盘头状态失败");
+            throw new JeecgBootException("取消出库任务时, 更新组盘头状态失败");
         }
         return Result.ok("取消出库任务成功");
     }