diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
index 91f73fe..5b36c0f 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
@@ -262,7 +262,7 @@ public class WcsServiceImpl implements WcsService {
         if (!taskHeaderService.updateById(taskHeader)) {
             throw new JeecgBootException("更新任务头表目标库位失败");
         }
-        
+
         WcsTask wcsTask = new WcsTask();
         wcsTask.setToLocationCode(locationCode);
         wcsTask.setPreTaskNo(String.valueOf(preTaskNo));
@@ -350,7 +350,7 @@ public class WcsServiceImpl implements WcsService {
                         }
                         Result<TaskHeader> result = taskHeaderService.createTransferTask(insideLocation.getCode(), destinationLocation.getCode(), warehouseCode);
                         if (!result.isSuccess()) {
-                            throw new JeecgBootException("创建移库任务失败");
+                            throw new JeecgBootException(result.getMessage());
                         }
                         preTaskNo = result.getResult().getId();
                         taskHeader.setPreTaskNo(preTaskNo);
@@ -634,6 +634,8 @@ public class WcsServiceImpl implements WcsService {
             originLocationCode = originLocationCode + "," + taskLocationCode;
         }
 
+        taskHeader = new TaskHeader();
+        taskHeader.setId(Integer.parseInt(taskNo));
         taskHeader.setToLocationCode(locationCode);
         taskHeader.setExceptionName("重入处理");
         taskHeader.setIsDoubleIn(QuantityConstant.DOUBLE_IN);
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 09b1e93..72df89c 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
@@ -365,7 +365,7 @@ public class ShipmentCombinationServiceImpl implements IShipmentCombinationServi
             shipmentContainerHeader = new ShipmentContainerHeader();
             shipmentContainerHeader.setContainerCode(containerCode);
             shipmentContainerHeader.setFromLocationCode(locationCode);
-            if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION) {
+            if (taskLocationRule == QuantityConstant.RULE_TASK_SET_LOCATION && taskType == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT) {
                 shipmentContainerHeader.setToLocationCode(locationCode);
             }
             shipmentContainerHeader.setWarehouseCode(warehouseCode);
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java
index 9f421af..e118dfb 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java
@@ -305,6 +305,14 @@ public interface ITaskHeaderService extends IService<TaskHeader> {
     boolean updateStatusById(int status, int id);
 
     /**
+     * 更新
+     * @param  status
+     * @param  id
+     * @return
+     */
+    boolean updateExceptionStateById(int status, int id);
+
+    /**
      * 更新状态
      * @param  preTaskNo
      * @param  id
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 a973f4d..4104ea2 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
@@ -550,6 +550,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result handleEmptyOut(String taskNo) {
+        log.info("开始处理空出任务" + taskNo);
         // 1、判断非空字段
         if (StringUtils.isEmpty(taskNo)) {
             return Result.error("处理空出失败,任务号为空");
@@ -615,15 +616,18 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
         // 9 更新单据
         taskHeader.setExceptionState(QuantityConstant.EXCEPTION_TASK_HANDLE);
-        success = taskHeaderService.updateById(taskHeader);
+        success = taskHeaderService.updateExceptionStateById(QuantityConstant.EXCEPTION_TASK_HANDLE, taskHeader.getId());
         if (!success) {
             throw new JeecgBootException("处理空出失败,更新任务失败");
         }
+        log.info("完成处理空出任务" + taskNo);
         return Result.ok("处理空出成功");
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result handleDoubleIn(String taskNo) {
+        log.info("开始处理重入任务" + taskNo);
         // 1、判断非空字段
         if (StringUtils.isEmpty(taskNo)) {
             return Result.error("处理重入失败,任务号为空");
@@ -661,22 +665,24 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             if (toLocation == null) {
                 return Result.error("处理重入失败,没有找到库位");
             }
-            toLocation.setStatus(QuantityConstant.STATUS_LOCATION_EMPTY);
-            boolean success = locationService.updateById(toLocation);
+            boolean success = locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
             if (!success) {
                 throw new JeecgBootException("处理重入失败,更新库位失败");
             }
         }
         taskHeader.setExceptionState(QuantityConstant.EXCEPTION_TASK_HANDLE);
-        boolean success = taskHeaderService.updateById(taskHeader);
+        boolean success = taskHeaderService.updateExceptionStateById(QuantityConstant.EXCEPTION_TASK_HANDLE, taskHeader.getId());
         if (!success) {
             throw new JeecgBootException("处理重入失败,更新任务失败");
         }
+        log.info("完成处理重入任务" + taskNo);
         return Result.ok("处理重入成功");
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result handlePickupError(String taskNo) {
+        log.info("开始处理取货错任务" + taskNo);
         // 1、判断非空字段
         if (StringUtils.isEmpty(taskNo)) {
             return Result.error("处理取货错失败,任务号为空");
@@ -691,12 +697,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             return Result.OK("处理取货错失败, 任务已经完成");
         }
 
+        taskHeader = new TaskHeader();
+        taskHeader.setId(Integer.parseInt(taskNo));
         taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
         taskHeader.setExceptionState(QuantityConstant.EXCEPTION_TASK_HANDLE);
         boolean success = taskHeaderService.updateById(taskHeader);
         if (!success) {
             throw new JeecgBootException("处理取货错失败,更新任务失败");
         }
+        log.info("完成处理取货错任务" + taskNo);
         return Result.ok("处理取货错成功");
     }
 
@@ -1556,7 +1565,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
         zoneCode = fromLocation.getZoneCode();
         taskLockEntity.setZoneCode(zoneCode);
-        if (StringUtils.isNotEmpty(toLocationCode)) {
+        if (StringUtils.isNotEmpty(toLocationCode) && !fromLocationCode.equals(toLocationCode)) {
             Location toLocation = locationService.getLocationByCode(toLocationCode, warehouseCode);
             if (toLocation == null) {
                 return Result.error("创建分拣任务时," + toLocationCode + "目标库位不存在");
@@ -1577,9 +1586,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             throw new JeecgBootException("创建分拣任务时,更新库位状态失败");
         }
         if (StringUtils.isNotEmpty(toLocationCode)) {
-            success = locationService.updateStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
-            if (!success) {
-                throw new JeecgBootException("创建分拣任务时,更新库位状态失败");
+            if (!fromLocationCode.equals(toLocationCode)) {
+                success = locationService.updateStatus(toLocationCode, QuantityConstant.STATUS_LOCATION_LOCK, warehouseCode);
+                if (!success) {
+                    throw new JeecgBootException("创建分拣任务时,更新库位状态失败");
+                }
             }
         }
         return Result.OK("创建分拣任务成功", taskLockEntity);
@@ -1611,9 +1622,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         String toLocationCode, String warehouseCode) {
         Result result = null;
         boolean success = false;
-        if (StringUtils.isEmpty(toLocationCode) && taskType != QuantityConstant.TASK_TYPE_OVER_STATION) {
-            return Result.error("任务类型" + taskType + "完成任务时, 目标库位号为空");
-        }
         if (StringUtils.isEmpty(containerCode)) {
             return Result.error("任务类型" + taskType + "完成任务时, 容器号为空");
         }
@@ -1624,14 +1632,23 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         switch (taskType) {
             case QuantityConstant.TASK_TYPE_WHOLERECEIPT:
             case QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT:
+                if (StringUtils.isEmpty(toLocationCode)) {
+                    return Result.error("任务类型" + taskType + "完成任务时, 目标库位号为空");
+                }
                 success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY, containerFillStatus,
                     warehouseCode);
                 break;
             case QuantityConstant.TASK_TYPE_EMPTYRECEIPT:
+                if (StringUtils.isEmpty(toLocationCode)) {
+                    return Result.error("任务类型" + taskType + "完成任务时, 目标库位号为空");
+                }
                 success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY,
                     QuantityConstant.STATUS_CONTAINER_FILL_EMPTY, warehouseCode);
                 break;
             case QuantityConstant.TASK_TYPE_MANY_EMPTYRECEIPT:
+                if (StringUtils.isEmpty(toLocationCode)) {
+                    return Result.error("任务类型" + taskType + "完成任务时, 目标库位号为空");
+                }
                 success = containerService.updateLocationCodeAndStatus(containerCode, toLocationCode, QuantityConstant.STATUS_CONTAINER_EMPTY,
                     QuantityConstant.STATUS_CONTAINER_FILL_MANY, warehouseCode);
                 break;
@@ -1651,6 +1668,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 if (StringUtils.isEmpty(fromLocationCode)) {
                     return Result.error("任务类型" + taskType + "完成任务时, 起始库位号为空");
                 }
+                if (StringUtils.isEmpty(toLocationCode)) {
+                    return Result.error("任务类型" + taskType + "完成任务时, 目标库位号为空");
+                }
                 InventoryHeader inventoryHeader = inventoryHeaderService.getInventoryHeaderByContainerCode(containerCode, warehouseCode);
                 if (inventoryHeader != null) {
                     if (fromLocationCode.equals(toLocationCode)) {
@@ -1679,7 +1699,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (StringUtils.isNotEmpty(fromLocationCode) && !fromLocationCode.equals(toLocationCode)) {
             Location toLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode);
             if (toLocation == null) {
-                return Result.error("完成任务时," + toLocationCode + "目标库位不存在");
+                return Result.error("任务类型" + taskType + "完成任务时," + toLocationCode + "目标库位不存在");
             }
             success =
                 locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
@@ -2019,7 +2039,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (port == null) {
             return Result.error("完成空托盘出库任务时," + toPortCode + "目标出库口不存在");
         }
-        Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_EMPTYRECEIPT,
+        Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_EMPTYSHIPMENT,
             containerCode, fromLocationCode, QuantityConstant.EMPTY_STRING, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
@@ -2108,7 +2128,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 throw new JeecgBootException("完成移库任务时, 更新库存详情失败");
             }
         }
-        Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_OVER_STATION,
+        Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_TRANSFER,
             containerCode, fromLocationCode, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
@@ -2184,7 +2204,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             }
         }
 
-        Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_EMPTYRECEIPT,
+        Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_CHECK_OUT,
             containerCode, fromLocationCode, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
@@ -2307,6 +2327,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         String warehouseCode = taskHeader.getWarehouseCode();
         String containerCode = taskHeader.getContainerCode();
         String toPortCode = taskHeader.getToPortCode();
+        String fromLocationCode = taskHeader.getFromLocationCode();
         log.info("开始完成空托盘组出库任务" + taskHeader.getId());
         if (StringUtils.isEmpty(containerCode)) {
             return Result.error("完成空托盘组出库任务时, 托盘号为空");
@@ -2317,12 +2338,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (StringUtils.isEmpty(toPortCode)) {
             return Result.error("完成空托盘组出库任务时, 目标出入口为空");
         }
+        if (StringUtils.isEmpty(fromLocationCode)) {
+            return Result.error("完成空托盘组出库任务时, 起始库位为空");
+        }
         Container container = containerService.getContainerByCode(containerCode, warehouseCode);
         if (container == null) {
             return Result.error("完成空托盘组出库任务时,没有找到容器" + containerCode);
         }
-        String toLocationCode = container.getLocationCode();
-        if (StringUtils.isEmpty(toLocationCode)) {
+        String locationCode = container.getLocationCode();
+        if (StringUtils.isEmpty(locationCode)) {
             return Result.error("完成空托盘组出库任务时, 容器不在库位上");
         }
         Port port = portService.getPortByCode(toPortCode, warehouseCode);
@@ -2334,16 +2358,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (!success) {
             throw new JeecgBootException("完成空托盘组出库任务时, 更新任务失败");
         }
-        success = containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_CONTAINER_EMPTY,
-            QuantityConstant.STATUS_CONTAINER_FILL_EMPTY, warehouseCode);
-        if (!success) {
-            throw new JeecgBootException("完成空托盘组出库任务时, 更新容器失败");
-        }
-        success = locationService.updateContainerCodeAndStatus(toLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
-        log.info("开始完成空托盘组出库任务" + taskHeader.getId());
-        if (!success) {
-            throw new JeecgBootException("完成空托盘组出库任务时, 更新库位失败");
+        Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_MANY_EMPTYSHIPMENT,
+            containerCode, fromLocationCode, QuantityConstant.EMPTY_STRING, warehouseCode);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException(result.getMessage());
         }
+        log.info("完成空托盘组出库任务" + taskHeader.getId());
         return Result.ok("完成空托盘组出库任务成功");
     }
 
@@ -2389,6 +2409,15 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     }
 
     @Override
+    public boolean updateExceptionStateById(int exceptionState, int id) {
+        TaskHeader taskHeader = new TaskHeader();
+        taskHeader.setExceptionState(exceptionState);
+        taskHeader.setId(id);
+        boolean success = taskHeaderService.updateById(taskHeader);
+        return success;
+    }
+
+    @Override
     public boolean updatePreTaskNoById(int preTaskNo, int id) {
         TaskHeader taskHeader = new TaskHeader();
         taskHeader.setId(id);