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 4ca2b97..a402b51 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
@@ -20,4 +20,6 @@ public interface IHuahengMultiHandlerService {
     Result combination(CombinationParam combinationParam);
 
     Result cancelCombine(Integer id);
+
+    Result autoCombination(String shipmentCode, String warehouseCode);
 }
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 ab89228..bc954de 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
@@ -117,4 +117,16 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem
         return result;
     }
 
+    @Override
+    public Result autoCombination(String shipmentCode, String warehouseCode) {
+        Result result = handleMultiProcess("combination", new MultiProcessListener() {
+            @Override
+            public Result<?> doProcess() {
+                Result result = shipmentCombinationService.autoCombination(shipmentCode, warehouseCode);
+                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 d492035..3dfb3ef 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
@@ -48,4 +48,6 @@ public interface IInventoryDetailService extends IService<InventoryDetail> {
      */
     boolean updateTaskQtyById(BigDecimal taskQty, int id);
 
+    boolean updateQtyAndTaskQtyAndLocationCode(BigDecimal qty, BigDecimal taskQty, String locationCode, int id);
+
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java
index 7ca8af2..cb9ca4e 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryHeaderService.java
@@ -32,4 +32,6 @@ public interface IInventoryHeaderService extends IService<InventoryHeader> {
     boolean updateInventoryLocationAndZoneById(String locationCode, String zoneCode, Integer id);
 
     boolean updateContainerStatusById(String containerStatus, Integer id);
+
+    boolean updateContainerStatusAndLocationCode(String containerStatus, String locationCode, Integer 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 afb132b..ae53e93 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
@@ -116,7 +116,18 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe
         InventoryDetail inventoryDetail = new InventoryDetail();
         inventoryDetail.setTaskQty(taskQty);
         inventoryDetail.setId(id);
-        boolean success = updateById(inventoryDetail);
+        boolean success = this.updateById(inventoryDetail);
+        return success;
+    }
+
+    @Override
+    public boolean updateQtyAndTaskQtyAndLocationCode(BigDecimal qty, BigDecimal taskQty, String locationCode, int id) {
+        InventoryDetail inventoryDetail = new InventoryDetail();
+        inventoryDetail.setQty(qty);
+        inventoryDetail.setTaskQty(taskQty);
+        inventoryDetail.setLocationCode(locationCode);
+        inventoryDetail.setId(id);
+        boolean success = this.updateById(inventoryDetail);
         return success;
     }
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java
index 348aec7..10e8925 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryHeaderServiceImpl.java
@@ -115,4 +115,14 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe
         return success;
     }
 
+    @Override
+    public boolean updateContainerStatusAndLocationCode(String containerStatus, String locationCode, Integer id) {
+        InventoryHeader inventoryHeader = new InventoryHeader();
+        inventoryHeader.setId(id);
+        inventoryHeader.setContainerStatus(containerStatus);
+        inventoryHeader.setLocationCode(locationCode);
+        boolean success = inventoryHeaderService.updateById(inventoryHeader);
+        return success;
+    }
+
 }
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 a4e694f..29e2fd8 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
@@ -88,7 +88,7 @@ public class ShipmentCombinationController {
     public Result autoCombination(@RequestBody ShipmentHeader shipmentHeader) {
         String shipmentCode = shipmentHeader.getCode();
         String warehouseCode = shipmentHeader.getWarehouseCode();
-        return shipmentCombinationService.autoCombination(shipmentCode, warehouseCode);
+        return huahengMultiHandlerService.autoCombination(shipmentCode, warehouseCode);
     }
 
     /**
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 e25c379..bb7d478 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
@@ -123,6 +123,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
     @Override
     @Transactional(rollbackFor = JeecgBootException.class)
     public Result autoCombination(String shipmentCode, String warehouseCode) {
+        log.info("开始自动配盘,单号" + shipmentCode);
         LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
         shipmentHeaderLambdaQueryWrapper.eq(ShipmentHeader::getWarehouseCode, warehouseCode).eq(ShipmentHeader::getCode, shipmentCode);
         ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(shipmentHeaderLambdaQueryWrapper);
@@ -148,6 +149,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
                 throw new JeecgBootException(result.getMessage());
             }
         }
+        log.info("完成自动配盘,单号" + shipmentCode);
         if (over) {
             return Result.error("出库单已经配盘", null);
         }
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 f56d900..1936da0 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
@@ -885,7 +885,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result cancelTask(Integer taskId) {
-        TaskHeader taskHeader = getById(taskId);
+        TaskHeader taskHeader = this.getById(taskId);
         if (taskHeader == null) {
             return Result.error("任务" + taskId + "未找到,执行中止");
         }
@@ -967,7 +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("开始创建空托入库任务");
+        log.info("开始创建空托入库任务" + containerCode);
         if (StringUtils.isEmpty(containerCode)) {
             return Result.error("创建空托盘入库时, 托盘号为空");
         }
@@ -1030,6 +1030,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result createEmptyOut(String containerCode, String toPortCode, String warehouseCode) {
+        log.info("开始创建空托出库任务" + containerCode);
         if (StringUtils.isEmpty(containerCode)) {
             return Result.error("创建空托盘出库时, 托盘号为空");
         }
@@ -1080,6 +1081,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
         taskHeader.setToPortCode(toPortCode);
         success = taskHeaderService.save(taskHeader);
+        log.info("完成创建空托出库任务" + containerCode);
         if (!success) {
             throw new JeecgBootException("创建空托盘出库时,保存任务失败");
         }
@@ -1305,6 +1307,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (taskHeader == null) {
             return Result.error("完成出库任务未找到,执行中止");
         }
+        log.info("开始完成出库任务,任务号:" + taskHeader.getId());
         String warehouseCode = taskHeader.getWarehouseCode();
         String fromLocationCode = taskHeader.getFromLocationCode();
         String toLocationCode = taskHeader.getToLocationCode();
@@ -1317,21 +1320,22 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             return Result.ok("完成出库任务,(" + taskHeader.getId() + ")任务已经是完成的!");
         }
         if (taskDetailList.isEmpty()) {
-            throw new JeecgBootException("完成出库任务,任务明细为空");
+            return Result.error("完成出库任务,任务明细为空");
         }
         if (StringUtils.isEmpty(fromLocationCode)) {
-            throw new JeecgBootException("完成出库任务" + taskHeader.getId() + "没有起始库位,执行中止");
+            return Result.error("完成出库任务" + taskHeader.getId() + "没有起始库位,执行中止");
         }
         if (StringUtils.isEmpty(toLocationCode) && taskType == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT) {
-            throw new JeecgBootException("完成出库任务,任务" + taskHeader.getId() + "没有目的库位,执行中止");
+            return Result.error("完成出库任务,任务" + taskHeader.getId() + "没有目的库位,执行中止");
         }
         InventoryHeader inventoryHeader = inventoryHeaderService.getInventoryHeaderByContainerCode(containerCode, warehouseCode);
         if (inventoryHeader == null) {
-            throw new JeecgBootException("完成出库任务,出库任务" + taskHeader.getId() + "没有找到库存头");
+            return Result.error("完成出库任务,出库任务" + taskHeader.getId() + "没有找到库存头");
         }
         List<InventoryTransaction> inventoryTransactionList = new ArrayList<>();
         List<Integer> shipmentIdList = new ArrayList<>();
         List<ShipmentDetail> shipmentDetailList = new ArrayList<>();
+        List<ShipmentDetail> shipmentDetailList1 = new ArrayList<>();
         for (TaskDetail taskDetail : taskDetailList) {
             ShipmentContainerDetail shipmentContainerDetail = shipmentContainerDetailService.getById(taskDetail.getShipmentContainerDetailId());
             if (shipmentContainerDetail == null) {
@@ -1342,20 +1346,28 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 throw new JeecgBootException("完成出库任务, 出库任务没有找到出库详情" + taskDetail.getShipmentDetailId());
             }
             taskDetail.setShipmentCode(shipmentDetail.getShipmentCode());
+            int shipmentDetailId = shipmentDetail.getId();
+            int status = QuantityConstant.SHIPMENT_HEADER_COMPLETED;
             if (shipmentDetail.getQty().compareTo(shipmentDetail.getTaskQty()) == 0) {
-                shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_COMPLETED);
+                status = QuantityConstant.SHIPMENT_HEADER_COMPLETED;
             } else if (shipmentDetail.getQty().compareTo(shipmentDetail.getTaskQty()) > 0) {
-                shipmentDetail.setStatus(QuantityConstant.SHIPMENT_HEADER_OFF_SHELF);
+                status = QuantityConstant.SHIPMENT_HEADER_OFF_SHELF;
             } else if (shipmentDetail.getQty().compareTo(shipmentDetail.getTaskQty()) < 0) {
                 throw new JeecgBootException("完成出库任务时, 出库单 单据数量不能小于配盘数量");
             }
             shipmentDetailList.add(shipmentDetail);
+            shipmentDetail = new ShipmentDetail();
+            shipmentDetail.setId(shipmentDetailId);
+            shipmentDetail.setStatus(status);
+            shipmentDetailList1.add(shipmentDetail);
             InventoryDetail inventoryDetail = inventoryDetailService.getById(taskDetail.getFromInventoryDetailId());
             if (inventoryDetail == null) {
                 throw new JeecgBootException("完成出库任务,出库任务没有找到库存详情" + taskDetail.getFromInventoryDetailId());
             }
-            inventoryDetail.setTaskQty(inventoryDetail.getTaskQty().subtract(taskDetail.getQty()));
-            inventoryDetail.setQty(inventoryDetail.getQty().subtract(taskDetail.getQty()));
+            BigDecimal taskQty = inventoryDetail.getTaskQty().subtract(taskDetail.getQty());
+            BigDecimal qty = inventoryDetail.getQty().subtract(taskDetail.getQty());
+            inventoryDetail.setTaskQty(taskQty);
+            inventoryDetail.setQty(qty);
             inventoryDetail.setLocationCode(toLocationCode);
             // 扣减后的库存不能小于0
             if (inventoryDetail.getQty().compareTo(BigDecimal.ZERO) < 0) {
@@ -1370,7 +1382,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                     throw new JeecgBootException("完成出库任务,删除库存详情失败");
                 }
             } else {
-                success = inventoryDetailService.updateById(inventoryDetail);
+                success = inventoryDetailService.updateQtyAndTaskQtyAndLocationCode(qty, taskQty, toLocationCode, inventoryDetail.getId());
                 if (!success) {
                     throw new JeecgBootException("完成出库任务,更新库存详情失败");
                 }
@@ -1409,7 +1421,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             }
             inventoryHeader.setContainerStatus(QuantityConstant.STATUS_CONTAINER_EMPTY);
             inventoryHeader.setLocationCode(toLocationCode);
-            success = inventoryHeaderService.updateById(inventoryHeader);
+            success = inventoryHeaderService.updateContainerStatusAndLocationCode(QuantityConstant.STATUS_CONTAINER_EMPTY, toLocationCode, inventoryHeader.getId());
             if (!success) {
                 throw new JeecgBootException("完成出库任务,更新库存头失败");
             }
@@ -1419,7 +1431,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             throw new JeecgBootException("完成出库任务,保存库存详情失败");
         }
         taskHeader.setStatus(QuantityConstant.TASK_STATUS_COMPLETED);
-        success = taskHeaderService.updateById(taskHeader);
+        success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_COMPLETED, taskHeader.getId());
         if (!success) {
             throw new JeecgBootException("完成出库任务,保存任务头失败");
         }
@@ -1440,9 +1452,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             if (!success) {
                 throw new JeecgBootException("完成分拣出库任务,更新源库位失败");
             }
-            success = locationService.updateContainerCodeAndStatus(toLocationCode, containerCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
-            if (!success) {
-                throw new JeecgBootException("完成分拣出库任务,更新目标库位失败");
+            if (StringUtils.isNotEmpty(fromLocationCode) && !fromLocationCode.equals(toLocationCode)) {
+                success = locationService.updateContainerCodeAndStatus(toLocationCode, containerCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
+                if (!success) {
+                    throw new JeecgBootException("完成分拣出库任务,更新目标库位失败");
+                }
             }
             success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY,
                 inventoryDetailList.size() == 0 ? QuantityConstant.STATUS_CONTAINER_FILL_EMPTY : QuantityConstant.STATUS_CONTAINER_FILL_SOME, warehouseCode);
@@ -1455,12 +1469,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             throw new JeecgBootException("完成出库任务,获取出库组盘头失败");
         }
         shipmentContainerHeader.setStatus(QuantityConstant.SHIPMENT_CONTAINER_FINISHED);
-        success = shipmentContainerHeaderService.updateById(shipmentContainerHeader);
+        success = shipmentContainerHeaderService.updateStatusById(QuantityConstant.SHIPMENT_CONTAINER_FINISHED, shipmentContainerHeader.getId());
         if (!success) {
             throw new JeecgBootException("完成出库任务,更新出库组盘头失败");
         }
         if (inventoryDetailList.size() != 0) {
-            if (!combineInventoryDetail(taskHeader)) {
+            if (!taskHeaderService.combineInventoryDetail(taskHeader)) {
                 throw new JeecgBootException("合并入库库存失败");
             }
         }
@@ -1487,6 +1501,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         LogRecordContext.putVariable("extraJsonString1", JSON.toJSONString(taskDetailList));
         LogRecordContext.putVariable("shipmentDetailList", shipmentDetailList);
         LogRecordContext.putVariable("extraJsonString2", JSON.toJSONString(shipmentDetailList));
+        log.info("完成出库任务,任务号:" + taskHeader.getId());
         return Result.ok("完成出库任务");
     }
 
@@ -1854,6 +1869,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         String containerCode = taskHeader.getContainerCode();
         String toPortCode = taskHeader.getToPortCode();
         String zoneCode = taskHeader.getZoneCode();
+        log.info("开始完成空托盘出库任务" + taskHeader.getId());
         if (StringUtils.isEmpty(containerCode)) {
             return Result.error("完成空托盘出库任务时, 托盘号为空");
         }
@@ -1888,8 +1904,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("完成空托盘出库任务" + taskHeader.getId());
         if (!success) {
             throw new JeecgBootException("完成空托盘出库任务时, 更新任务失败");
         }