diff --git a/ant-design-vue-jeecg/src/api/api.js b/ant-design-vue-jeecg/src/api/api.js
index 202cfa7..6ebe097 100644
--- a/ant-design-vue-jeecg/src/api/api.js
+++ b/ant-design-vue-jeecg/src/api/api.js
@@ -286,6 +286,8 @@ export const createBatchShipmentTaskByAgv = (params) => postAction('/shipment/sh
 export const createShipmentTaskAndAgvTask = (params) => postAction('/shipment/shipmentCombination/createShipmentTaskAndAgvTask', params);
 //完成平库出库
 export const completeFlatShipment = (params) => postAction('/shipment/shipmentCombination/completeFlatShipment', params);
+//平库入库
+export const flatReceipt = (params) => postAction('/receipt/receiveHeader/flatReceipt', params);
 
 // 中转HTTP请求
 export const transitRESTful = {
diff --git a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
index 5f1ddb1..7602156 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
@@ -40,8 +40,13 @@
             </a-form-item>
           </a-col>
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
-            <a-form-item label="库位编码">
-              <a-input placeholder="请输入库位编码" v-model="queryParam.locationCode"></a-input>
+            <a-form-item label="起始库位编码">
+              <a-input placeholder="请输入起始库位编码" v-model="queryParam.fromLocationCode"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="目标库位编码">
+              <a-input placeholder="请输入目标库位编码" v-model="queryParam.toLocationCode"></a-input>
             </a-form-item>
           </a-col>
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
diff --git a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
index e474183..36cf4a2 100644
--- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
@@ -132,7 +132,7 @@
 <!--          <a v-else-if="record.status == 0" @click="selectContainerStatus(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a>-->
           <a v-if="record.status == 0 && record.taskType == 200" @click="selectPort(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a>
           <a v-else-if="record.status == 0" @click="createTask(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a>
-          <a-popconfirm v-if="record.status == 0" v-has="'receiptContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)">
+          <a-popconfirm v-if="record.status == 0" v-has="'receipatContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)">
             <a><a-button type="danger">取消配盘</a-button> <a-divider type="vertical"/></a>
           </a-popconfirm>
 
diff --git a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue
index f1d598b..dadd2b9 100644
--- a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentContainerHeaderList.vue
@@ -130,7 +130,7 @@
              <a><a-button type="danger">取消配盘</a-button> <a-divider type="vertical"/></a>
           </a-popconfirm>
            <a v-has="'shipmentContainerHeader:edit'" @click="handleEdit(record)"><a-button type="default">编辑</a-button> <a-divider type="vertical"/></a>
-           <a v-if="record.status == 10" v-has="'shipmentContainerHeader:reduceInventoryDetailBySn'"   @click="openReduce(record)"><a-button type="primary">扣减库存</a-button></a>
+           <a v-if="record.status == 10 && record.taskType == 400" v-has="'shipmentContainerHeader:reduceInventoryDetailBySn'"   @click="openReduce(record)"><a-button type="primary">扣减库存</a-button></a>
         </span>
       </a-table>
     </div>
diff --git a/ant-design-vue-jeecg/src/views/system/task/modules/QualityRegisterDetailModal.vue b/ant-design-vue-jeecg/src/views/system/task/modules/QualityRegisterDetailModal.vue
index 1e7af5e..a1e1767 100644
--- a/ant-design-vue-jeecg/src/views/system/task/modules/QualityRegisterDetailModal.vue
+++ b/ant-design-vue-jeecg/src/views/system/task/modules/QualityRegisterDetailModal.vue
@@ -27,6 +27,11 @@
             </a-form-model-item>
           </a-col>
           <a-col :xs="24">
+            <a-form-model-item label="合格数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qualityfiedQty">
+              <a-input v-model="model.qualityfiedQty" placeholder="请输入合格数量"></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24">
             <a-form-model-item label="不合格数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="unqualityfiedQty">
               <a-input v-model="model.unqualityfiedQty" placeholder="请输入不合格数量"></a-input>
             </a-form-model-item>
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/IPortService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/IPortService.java
index 027f513..8318839 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/IPortService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/IPortService.java
@@ -18,7 +18,9 @@ public interface IPortService extends IService<Port> {
 
     List<Port> getPortListByType(int type, Integer roadWay, String zoneCode, String warehouseCode);
 
-    Port getPortByCode(String code, Integer roadWay, String zoneCode, String warehouseCode);
+//    Port getPortByCode(String code, Integer roadWay, String zoneCode, String warehouseCode);
+
+    Port getPortByCode(String code, Integer type, String zoneCode, String warehouseCode);
 
     Port getPortByCode(String code, String zoneCode, String warehouseCode);
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/impl/PortServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/impl/PortServiceImpl.java
index 914b628..dfde49f 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/impl/PortServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/port/service/impl/PortServiceImpl.java
@@ -42,10 +42,10 @@ public class PortServiceImpl extends ServiceImpl<PortMapper, Port> implements IP
     }
 
     @Override
-    public Port getPortByCode(String code, Integer roadWay, String zoneCode, String warehouseCode) {
+    public Port getPortByCode(String code, Integer type, String zoneCode, String warehouseCode) {
         LambdaQueryWrapper<Port> portLambdaQueryWrapper = Wrappers.lambdaQuery();
-        portLambdaQueryWrapper.eq(Port::getCode, code).eq(Port::getZoneCode, zoneCode).eq(Port::getWarehouseCode, warehouseCode).in(roadWay != null,
-            Port::getRoadWay, roadWay);
+        portLambdaQueryWrapper.eq(Port::getCode, code).eq(Port::getZoneCode, zoneCode).eq(Port::getWarehouseCode, warehouseCode).in(type != null, Port::getType,
+            type);
         Port port = getOne(portLambdaQueryWrapper);
         return port;
     }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java
index 28d1302..7b89e83 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java
@@ -1,6 +1,7 @@
 package org.jeecg.modules.wms.receipt.receiptContainerHeader.controller;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -14,6 +15,7 @@ import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.LoginUser;
@@ -45,6 +47,7 @@ import org.springframework.web.servlet.ModelAndView;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
 import io.swagger.annotations.Api;
@@ -357,6 +360,33 @@ public class ReceiptContainerHeaderController extends JeecgController<ReceiptCon
     @ResponseBody
     public Result createReceiptBatchTask(@RequestBody List<ReceiptContainerHeader> receiptContainerHeaderList, HttpServletRequest req) {
         String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
+        if (CollectionUtils.isEmpty(receiptContainerHeaderList)) {
+            return Result.error("批量创建入库任务失败,没有组盘明细");
+        }
+        String toPort = receiptContainerHeaderList.get(0).getToPort();
+        if (StringUtils.isEmpty(toPort)) {
+            return Result.error("批量创建入库任务失败,没有去向");
+        }
+        List<ReceiptContainerHeader> removeList = new ArrayList<>();
+        for (ReceiptContainerHeader receiptContainerHeader : receiptContainerHeaderList) {
+            String fromLocationCode = receiptContainerHeader.getFromLocationCode();
+            Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode);
+            if (fromLocation == null) {
+                throw new JeecgBootException("批量创建入库任务失败,没有找到库位" + fromLocationCode);
+            }
+            int roadWay = fromLocation.getRoadWay();
+            String zoneCode = fromLocation.getZoneCode();
+            List<Port> portList = portService.getPortListByType(QuantityConstant.PORT_TYPE_PICK, roadWay, zoneCode, warehouseCode);
+            if (CollectionUtils.isEmpty(portList)) {
+                removeList.add(receiptContainerHeader);
+                continue;
+            }
+            List<String> portCodeList = portList.stream().map(Port::getCode).collect(Collectors.toList());
+            if (!portCodeList.contains(toPort)) {
+                removeList.add(receiptContainerHeader);
+            }
+        }
+        receiptContainerHeaderList.removeAll(removeList);
         for (ReceiptContainerHeader receiptContainerHeader : receiptContainerHeaderList) {
             Result result = huahengMultiHandlerService.createReceiptTask(receiptContainerHeader, warehouseCode);
             if (!result.isSuccess()) {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
index 9bc451a..96611c4 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
@@ -15,6 +15,8 @@ import org.jeecg.modules.wms.config.container.entity.Container;
 import org.jeecg.modules.wms.config.container.service.IContainerService;
 import org.jeecg.modules.wms.config.location.service.ILocationService;
 import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService;
+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.service.IInventoryHeaderService;
 import org.jeecg.modules.wms.lockStation.service.ILockStationService;
 import org.jeecg.modules.wms.receipt.receiptContainerHeader.entity.ReceiptContainerDetail;
@@ -94,6 +96,8 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai
 
     @Resource
     private ILockStationService lockStationService;
+    @Resource
+    private IZoneService zoneService;
 
     @Override
     @Transactional
@@ -146,6 +150,10 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai
         if (StringUtils.isEmpty(zoneCode)) {
             return Result.error("容器没有配置库区,请配置!");
         }
+        Zone zone = zoneService.getZoneByCode(zoneCode, warehouseCode);
+        if (zone == null) {
+            return Result.error("库区:" + zoneCode + " 信息为空");
+        }
         boolean success = false;
         List<ReceiptContainerDetail> receiptContainerDetailList =
             receiptContainerDetailService.getReceiptContainerDetailListByHeaderId(receiptContainerHeader.getId());
@@ -185,6 +193,11 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai
             taskHeader.setWarehouseCode(warehouseCode);
             taskHeader.setZoneCode(zoneCode);
             taskHeader.setToPortCode(toPort);
+            if (StringUtils.isNotEmpty(zone.getType())) {
+                if (zone.getType().equals(QuantityConstant.ZONE_TYPE_AGV)) {
+                    taskHeader.setToWcs(QuantityConstant.NOT_TO_WCS);
+                }
+            }
             success = taskHeaderService.save(taskHeader);
             if (!success) {
                 throw new JeecgBootException("创建入库任务, 任务生成失败");
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java
index 26fbd57..1abaaa8 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/controller/ReceiveController.java
@@ -223,7 +223,6 @@ public class ReceiveController extends HuahengBaseController {
             @Override
             public Result<?> doProcess() {
                 Result result = receiveService.receivingAndCreateTask(receiveList, warehouseCode);
-
                 return result;
             }
         });
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 766c63e..53a256e 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
@@ -1,13 +1,16 @@
 package org.jeecg.modules.wms.shipment.shipmentCombination.controller;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.wms.config.location.entity.Location;
 import org.jeecg.modules.wms.config.location.service.ILocationService;
 import org.jeecg.modules.wms.config.port.entity.Port;
@@ -33,6 +36,7 @@ import org.jeecg.utils.constant.QuantityConstant;
 import org.springframework.web.bind.annotation.*;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 
 import io.swagger.annotations.Api;
@@ -133,6 +137,38 @@ public class ShipmentCombinationController extends HuahengBaseController {
     @ResponseBody
     public Result createShipmentBatchTask(@RequestBody List<ShipmentContainerHeader> shipmentContainerHeaderList, HttpServletRequest req) {
         String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
+        if (CollectionUtils.isEmpty(shipmentContainerHeaderList)) {
+            return Result.error("批量创建出库任务失败,没有组盘明细");
+        }
+        String toPort = shipmentContainerHeaderList.get(0).getToPort();
+        if (StringUtils.isEmpty(toPort)) {
+            return Result.error("批量创建出库任务失败,没有去向");
+        }
+        List<ShipmentContainerHeader> removeList = new ArrayList<>();
+        for (ShipmentContainerHeader shipmentContainerHeader : shipmentContainerHeaderList) {
+            String fromLocationCode = shipmentContainerHeader.getFromLocationCode();
+            Location fromLocation = locationService.getLocationByCode(fromLocationCode, warehouseCode);
+            if (fromLocation == null) {
+                throw new JeecgBootException("批量创建出库任务失败,没有找到库位" + fromLocationCode);
+            }
+            int roadWay = fromLocation.getRoadWay();
+            String zoneCode = fromLocation.getZoneCode();
+            int taskType = shipmentContainerHeader.getTaskType();
+            int portType = QuantityConstant.PORT_TYPE_PICK;
+            if (taskType == QuantityConstant.TASK_TYPE_WHOLESHIPMENT) {
+                portType = QuantityConstant.PORT_TYPE_OUT;
+            }
+            List<Port> portList = portService.getPortListByType(portType, roadWay, zoneCode, warehouseCode);
+            if (CollectionUtils.isEmpty(portList)) {
+                removeList.add(shipmentContainerHeader);
+                continue;
+            }
+            List<String> portCodeList = portList.stream().map(Port::getCode).collect(Collectors.toList());
+            if (!portCodeList.contains(toPort)) {
+                removeList.add(shipmentContainerHeader);
+            }
+        }
+        shipmentContainerHeaderList.removeAll(removeList);
         for (ShipmentContainerHeader shipmentContainerHeader : shipmentContainerHeaderList) {
             Result result = huahengMultiHandlerService.createShipmentTask(shipmentContainerHeader, warehouseCode, 0, 0, 0);
             if (!result.isSuccess()) {
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 2939015..c68e991 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
@@ -414,7 +414,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
         TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
         String zoneCode = taskLockEntity.getZoneCode();
-        Port port = portService.getPortByCode(toPortCode, zoneCode, warehouseCode);
+        Port port = portService.getPortByCode(toPortCode, QuantityConstant.PORT_TYPE_PICK, zoneCode, warehouseCode);
         if (port == null) {
             throw new JeecgBootException("创建质检任务失败,没有找到出库口:" + toPortCode);
         }
@@ -1005,10 +1005,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 break;
         }
         taskHeaderService.cancelLocationAndContainerStatus(taskHeader);
-        if (taskHeader.getStatus().intValue() > QuantityConstant.TASK_STATUS_BUILD) {
-            result = wcsService.cancelWcsTask(taskHeader);
-            if (!result.isSuccess()) {
-                throw new JeecgBootException(result.getMessage());
+        int toWcs = taskHeader.getToWcs();
+        if (toWcs == QuantityConstant.TO_WCS) {
+            if (taskHeader.getStatus().intValue() > QuantityConstant.TASK_STATUS_BUILD) {
+                result = wcsService.cancelWcsTask(taskHeader);
+                if (!result.isSuccess()) {
+                    throw new JeecgBootException(result.getMessage());
+                }
             }
         }
         if (!inventoryHeaderService.updateInventoryContainerStatusByContainerCode(taskHeader.getContainerCode(), taskHeader.getWarehouseCode())) {
@@ -1040,9 +1043,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (taskHeader.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) {
             return Result.error("下发wcs任务时, 任务" + taskId + "已经下发,请不要重复下发,操作中止");
         }
-        Result result = wcsService.wcsTaskAssign(taskHeader);
-        if (!result.isSuccess()) {
-            return Result.error(result.getMessage());
+        int toWcs = taskHeader.getToWcs();
+        if (toWcs == QuantityConstant.TO_WCS) {
+            Result result = wcsService.wcsTaskAssign(taskHeader);
+            if (!result.isSuccess()) {
+                return Result.error(result.getMessage());
+            }
         }
         taskHeader.setStatus(QuantityConstant.TASK_STATUS_RELEASE);
         boolean success = taskHeaderService.updateStatusById(QuantityConstant.TASK_STATUS_RELEASE, taskHeader.getId());