diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java
index 2efe6df..394eb8e 100644
--- a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java
@@ -25,6 +25,7 @@ import com.huaheng.pc.task.taskDetail.service.TaskDetailServiceImpl;
 import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
 import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
 import com.huaheng.pc.task.taskHeader.service.TaskHeaderServiceImpl;
+import com.huaheng.pc.task.taskHeader.service.WorkTaskService;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.huaheng.pc.inventory.inventoryHeader.mapper.InventoryHeaderMapper;
@@ -54,6 +55,8 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe
     private InventoryDetailService inventoryDetailService;
     @Resource
     private MaterialService materialService;
+    @Resource
+    private WorkTaskService workTaskService;
 
 
     /**
@@ -89,97 +92,17 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe
     /**
      * 空托入库
      * */
-    @Transactional
     @Override
     public AjaxResult createEmptyIn(String containerCode, String destinationLocation) {
-
-        return AjaxResult.success();
+        return workTaskService.createEmptyIn(containerCode, destinationLocation);
     }
 
     /**
      *空托出库
      * */
-    @Transactional
     @Override
     public AjaxResult createEmptyOut(String containerCode, String sourceLocation) {
-        // 检查容器
-        Container temp3 = new Container();
-        temp3.setCode(containerCode);
-        temp3.setWarehouseCode(ShiroUtils.getWarehouseCode());
-        LambdaQueryWrapper lambda3 = Wrappers.lambdaQuery(temp3);
-        Container container = containerService.getOne(lambda3);
-        if(container==null){
-            return AjaxResult.error("托盘不存在");
-        }
-        if (StringUtils.isEmpty(container.getLocationCode())|| !(container.getLocationCode().equals(sourceLocation)))  {
-            return AjaxResult.error("容器不在库位[" + sourceLocation + "]上");
-        }
-        //检查库位
-        Location temp4 = new Location();
-        temp4.setCode(sourceLocation);
-        temp4.setWarehouseCode(ShiroUtils.getWarehouseCode());
-        LambdaQueryWrapper lamda4 = Wrappers.lambdaQuery(temp4);
-        Location loc = locationService.getOne(lamda4);
-        if(loc==null){
-            return AjaxResult.error("源货位不存在");
-        }
-        if(StringUtils.isEmpty(loc.getContainerCode())){
-            return AjaxResult.error("源货位没有托盘");
-        }
-        if(!"empty".equals(loc.getStatus())){
-            return AjaxResult.error("源货位非空闲");
-        }
-        //检查库存,有库存不给生成任务。
-        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
-        inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getWarehouseCode,loc.getWarehouseCode())
-                            .eq(InventoryDetail::getLocationCode, loc.getCode());
-         List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
-        if(inventoryDetailList != null && inventoryDetailList.size() > 0){
-            return AjaxResult.error("该容器上有库存,无法空托出库!");
-        }
-        //判断托盘是否已经存在任务
-        Integer taskCount = taskHeaderService.UncompleteCount(containerCode);
-        if (taskCount != null && taskCount.intValue() > 0)  {
-            return AjaxResult.error("容器已存在任务");
-        }
-        //生成任务
-        TaskHeader taskHeader = new TaskHeader();
-        taskHeader.setWarehouseCode(loc.getWarehouseCode());
-        taskHeader.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));//货主
-        taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_PICKING); //出库内部类型都给200
-        taskHeader.setTaskType(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT);
-        taskHeader.setContainerCode(container.getCode());
-        taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
-        taskHeader.setFromLocation(sourceLocation);
-        taskHeader.setToLocation("");
-        taskHeader.setCreated(new Date());
-        taskHeader.setCreatedBy(ShiroUtils.getLoginName());
-        taskHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
-        taskHeader.setLastUpdated(new Date());
-        if(taskHeaderService.save(taskHeader)){
-            //锁定库位状态
-            locationService.updateStatus(loc.getCode(),"lock");
-        }else{
-            throw new ServiceException("空托出库主表生成失败!");
-        }
-        //写入任务细表
-        TaskDetail taskDetail = new TaskDetail();
-        taskDetail.setTaskId(taskHeader.getId());//主单ID
-        taskDetail.setTaskType(taskHeader.getTaskType());
-        taskDetail.setInternalTaskType(taskHeader.getInternalTaskType());
-        taskDetail.setWarehouseCode(taskHeader.getWarehouseCode());
-        taskDetail.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));
-        taskDetail.setFromLocation(taskHeader.getFromLocation());
-        taskDetail.setToLocation(taskHeader.getToLocation());
-        taskDetail.setContainerCode(taskHeader.getContainerCode());
-        taskDetail.setCreated(new Date());
-        taskDetail.setCreatedBy(ShiroUtils.getLoginName());
-        taskDetail.setLastUpdated(new Date());
-        taskDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
-        if(taskDetailService.save(taskDetail) == false){
-            throw new ServiceException("空托出库任务明细生成失败!");
-        }
-        return AjaxResult.success(taskHeader.getId());
+        return workTaskService.createEmptyOut(containerCode, sourceLocation);
     }
 
     /**
diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java
index f8a3607..ecaf8c5 100644
--- a/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java
+++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java
@@ -18,9 +18,14 @@ import com.huaheng.pc.config.location.domain.Location;
 import com.huaheng.pc.config.location.service.LocationService;
 import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference;
 import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService;
+import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
+import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
+import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
+import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
 import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
 import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
 import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
+import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -47,6 +52,10 @@ public class WorkTaskService {
     private ReceiptPreferenceService preferenceService;
     @Resource
     private FilterConfigDetailService filterConfigDetailService;
+    @Resource
+    private InventoryDetailService inventoryDetailService;
+    @Resource
+    private InventoryHeaderService inventoryHeaderService;
 
     /**
      * 创建入库任务
@@ -61,7 +70,7 @@ public class WorkTaskService {
             return AjaxResult.error("容器不存在");
         }
         if (StringUtils.isNotEmpty(container.getLocationCode()))  {
-            return AjaxResult.error("容器已在库位[" + container.getLocationCode() + "]上");
+            return AjaxResult.error("容器已在库位" + container.getLocationCode() + "上");
         }
 
         if (StringUtils.isNotEmpty(destinationLocation)) {
@@ -72,7 +81,7 @@ public class WorkTaskService {
             if (StringUtils.isNotEmpty(location.getContainerCode())) {
                 return AjaxResult.error(destinationLocation+"上已存在容器"+location.getContainerCode());
             }
-            if ("empty".equals(location.getStatus())) {
+            if (!"empty".equals(location.getStatus())) {
                 return AjaxResult.error("目标库位非空闲");
             }
         }
@@ -109,10 +118,15 @@ public class WorkTaskService {
             return AjaxResult.error("容器已存在任务");
         }
 
+        LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(InventoryDetail::getContainerCode, containerCode);
+        if (inventoryDetailService.count(queryWrapper) > 0) {
+            return AjaxResult.error("该容器上已有库存");
+        }
         LambdaUpdateWrapper<Container> containerUpdateWrapper = Wrappers.lambdaUpdate();
         containerUpdateWrapper.eq(Container::getCode, container.getCode())
                 .set(Container::getStatus, "lock");
-        if (containerService.update(container, containerUpdateWrapper)) {
+        if (!containerService.update(container, containerUpdateWrapper)) {
             throw new ServiceException("容器状态更新失败");
         }
 
@@ -144,7 +158,7 @@ public class WorkTaskService {
         taskDetail.setToLocation(taskHeader.getToLocation());
         taskDetail.setContainerCode(taskHeader.getContainerCode());
 
-        if(taskDetailService.save(taskDetail)){
+        if(!taskDetailService.save(taskDetail)){
             throw new ServiceException("空托入库任务明细生成失败!");
         }
         //锁库位
@@ -153,4 +167,99 @@ public class WorkTaskService {
         }
         return AjaxResult.success(taskHeader.getId());
     }
+
+    /**
+     * 创建空托出库任务
+     * 容器编码与源库位只需要填一个
+     * @param containerCode 容器编码
+     * @param sourceLocation 源库位
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult createEmptyOut(String containerCode, String sourceLocation) {
+        /* 容器编码*/
+        String conCode = null;
+        /* 库位编码*/
+        String locationCode = null;
+        //验证容器
+        if (StringUtils.isNotEmpty(containerCode)) {
+            Container container = containerService.findAllByCode(containerCode);
+            if (StringUtils.isNull(container)) {
+                return AjaxResult.error(containerCode+"容器不存在");
+            }
+            if (!"empty".equals(container.getStatus())) {
+                return AjaxResult.error(containerCode+"容器状态不为空,不能执行空托出库");
+            }
+            if (StringUtils.isEmpty(container.getLocationCode())) {
+                return AjaxResult.error("该容器不在库位上");
+            }
+            if (StringUtils.isNotEmpty(sourceLocation)) {
+                if (!container.getLocationCode().equals(sourceLocation)) {
+                    return AjaxResult.error("该容器所在库位与源库位不同");
+                }
+            }
+            LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.eq(InventoryDetail::getContainerCode, containerCode);
+            if (inventoryDetailService.count(queryWrapper) > 0) {
+                return AjaxResult.error("该容器上有库存,无法空托出库!");
+            }
+            conCode = containerCode;
+            locationCode = container.getLocationCode();
+        }
+        //验证库位
+        if (StringUtils.isNotEmpty(sourceLocation)) {
+            Location location = locationService.findLocationByCode(sourceLocation);
+            if (StringUtils.isNull(location)) {
+                return AjaxResult.error(sourceLocation+"库位不存在");
+            }
+            if (!"empty".equals(location.getStatus())) {
+                return AjaxResult.error(location.getCode()+"库位状态不为空闲不能执行出库");
+            }
+            if (StringUtils.isEmpty(location.getContainerCode())) {
+                return AjaxResult.error(location.getCode()+"库位上没有容器");
+            }
+            if (StringUtils.isNotEmpty(containerCode)) {
+                if (!location.getContainerCode().equals(sourceLocation)) {
+                    return AjaxResult.error("该库位上容器编码与输入容器编码不同");
+                }
+            }
+            LambdaQueryWrapper<InventoryDetail> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.eq(InventoryDetail::getLocationCode, sourceLocation);
+            if (inventoryDetailService.count(queryWrapper) > 0) {
+                return AjaxResult.error("该库位上有库存,无法空托出库!");
+            }
+
+            locationCode = location.getCode();
+            conCode = location.getContainerCode();
+        }
+
+        TaskHeader taskHeader = new TaskHeader();
+        taskHeader.setWarehouseCode(ShiroUtils.getWarehouseCode());
+        taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_WORK);
+        taskHeader.setTaskType(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT);
+        taskHeader.setContainerCode(conCode);
+        taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD);
+        taskHeader.setFromLocation(locationCode);
+        taskHeader.setToLocation("");
+        if(taskHeaderService.save(taskHeader)){
+            //锁定库位状态
+            locationService.updateStatus(locationCode,"lock");
+        } else {
+            throw new ServiceException("空托出库主表生成失败!");
+        }
+        //写入任务细表
+        TaskDetail taskDetail = new TaskDetail();
+        taskDetail.setTaskId(taskHeader.getId());
+        taskDetail.setTaskType(taskHeader.getTaskType());
+        taskDetail.setInternalTaskType(taskHeader.getInternalTaskType());
+        taskDetail.setWarehouseCode(taskHeader.getWarehouseCode());
+        taskDetail.setCompanyCode(ShiroUtils.getCompanyCodeList().get(0));
+        taskDetail.setFromLocation(taskHeader.getFromLocation());
+        taskDetail.setToLocation(taskHeader.getToLocation());
+        taskDetail.setContainerCode(taskHeader.getContainerCode());
+        if(taskDetailService.save(taskDetail)){
+            throw new ServiceException("空托出库任务明细生成失败!");
+        }
+        return AjaxResult.success(taskHeader.getId());
+    }
 }