diff --git a/ant-design-vue-jeecg/src/api/api.js b/ant-design-vue-jeecg/src/api/api.js
index 6a776c2..0ef7d5d 100644
--- a/ant-design-vue-jeecg/src/api/api.js
+++ b/ant-design-vue-jeecg/src/api/api.js
@@ -221,6 +221,8 @@ export const getAllWarehouseList = (params) => getAction("/config/warehouse/getA
 export const getAllZoneList = (params) => getAction("/config/zone/getAllZoneList", params);
 //批量快速出整托
 export const shipmentInventoryHeader = (params) => postAction('/inventory/inventoryHeader/shipmentInventoryHeader', params);
+//批量快速出库存详情
+export const shipmentInventoryDetail = (params) => postAction('/inventory/inventoryHeader/shipmentInventoryDetail', params);
 // 中转HTTP请求
 export const transitRESTful = {
   get: (url, parameter) => getAction(getTransitURL(url), parameter),
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 b2773b1..a2ca599 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/InventoryTransactionList.vue
@@ -299,9 +299,14 @@ export default {
           scopedSlots: {customRender: 'inventoryStatus_dictText'}
         },
         {
-          title: '数量',
+          title: '入库数量',
           align: "center",
-          dataIndex: 'qty'
+          dataIndex: 'receiptQty'
+        },
+        {
+          title: '出库数量',
+          align: "center",
+          dataIndex: 'shipmentQty'
         },
         {
           title: '库存数量',
diff --git a/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue b/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue
index e1859f6..02b50ec 100644
--- a/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue
+++ b/ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue
@@ -138,6 +138,7 @@
       </a-upload>
       <a-button v-has="'inventoryDetail:controller'" @click='controller()' type='primary'>冻结</a-button>
       <a-button v-has="'inventoryDetail:releaseController'" @click='releaseController()' type='primary'>释放冻结</a-button>
+      <a-button v-has="'inventoryHeader:quickShipmentInventoryHeader'" @click='quickShipment()' type='primary'>快速出库</a-button>
       <!-- 高级查询区域 -->
       <j-super-query
         :fieldList="superFieldList"
@@ -225,6 +226,7 @@
     </div>
 
     <simple-inventory-detail-modal ref="modalForm" @ok="modalFormOk"></simple-inventory-detail-modal>
+    <QuickShipmentDetailModel ref='quickShipmentModel' @ok='quickShipmentModalFormOk'></QuickShipmentDetailModel>
   </a-card>
 </template>
 
@@ -236,11 +238,13 @@ import SimpleInventoryDetailModal from './modules/SimpleInventoryDetailModal'
 import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
 import {getCompanyList, getZoneList, } from "@api/api";
 import {postAction} from '@/api/manage'
+import QuickShipmentDetailModel from "@views/system/shipment/modules/QuickShipmentDetailModal";
 
 export default {
   name: 'InventoryDetailList',
   mixins: [JeecgListMixin, mixinDevice],
   components: {
+    QuickShipmentDetailModel,
     SimpleInventoryDetailModal
   },
   data() {
@@ -392,7 +396,8 @@ export default {
         releaseController: 'inventory/inventoryHeader/releaseController',
       },
       dictOptions: {},
-      superFieldList: []
+      superFieldList: [],
+      selectRecord:[],
     }
   },
   created() {
@@ -491,22 +496,22 @@ export default {
         })
       }
     },
+    onSelectChange(selectedRowKeys, selectionRows) {
+      this.selectedMainId = selectedRowKeys[0].toString();
+      this.selectedRowKeys = selectedRowKeys;
+      this.selectRecord = selectionRows;
+    },
     quickShipment() {
       if (this.selectedRowKeys.length <= 0) {
         this.$message.warning('请选择一条记录!');
       } else {
-        let zoneCodes = this.selectRecord.map(row => row.zoneCode)
+        let zoneCodes = this.selectRecord.map(row => row.zoneCode);
         if (new Set(zoneCodes).size !== 1) {
           this.$message.warning('所选数据非同库区');
           return;
         }
-        if ('D' !== this.selectRecord[0].zoneCode){
-          this.$refs.quickShipmentModel.model.containerCode = this.selectRecord[0].containerCode;
-          this.$refs.quickShipmentModel.edit();
-          this.$refs.quickShipmentModel.title = '选择出库口';
-        }else {
-          this.quickShipmentModalFormOk(null)
-        }
+        this.$refs.quickShipmentModel.edit(this.selectRecord);
+        this.$refs.quickShipmentModel.title = '选择出库口';
       }
     },
     solutionCompany(value) {
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 4daced1..c9efb9e 100644
--- a/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
@@ -72,7 +72,7 @@
       <a-upload v-has="'receiptContainerHeader:import'" name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
       <a-button type="primary" icon="import">导入</a-button>
       </a-upload>
-      <a-button v-has="'receiptContainerHeader:add'" @click="createBatchTask" type="primary" >批量生成任务</a-button>
+      <a-button v-has="'receiptContainerHeader:createTask'" @click="createBatchTask" type="primary" >批量生成任务</a-button>
       <a-button v-has="'receiptContainerHeader:delete'" @click="cancelBatchTask" type="primary" >批量取消组盘</a-button>
     </div>
 
@@ -117,12 +117,12 @@
             size="small"
             @click="downloadFile(text)">下载
           </a-button>
-        </template>
+        </template>selectPort
         <span slot="action" slot-scope="text, record">
-          <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="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-divider type="vertical"/></a>-->
-<!--          <a v-else-if="record.status == 0" @click="createTask(record)" v-has="'receiptContainerHeader:createTask'">生成任务<a-divider type="vertical"/></a>-->
+<!--          <a v-if="record.status == 0 && record.taskType == 200" @click="selectFillPort(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button><a-divider type="vertical"/></a>-->
+<!--          <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-divider type="vertical"/></a>
+          <a v-else-if="record.status == 0" @click="createTask(record)" v-has="'receiptContainerHeader:createTask'">生成任务<a-divider type="vertical"/></a>
           <a-popconfirm v-if="record.status == 0" v-has="'receiptContainerHeader: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/modules/QuickShipmentDetailModal.vue b/ant-design-vue-jeecg/src/views/system/shipment/modules/QuickShipmentDetailModal.vue
new file mode 100644
index 0000000..410dcce
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/shipment/modules/QuickShipmentDetailModal.vue
@@ -0,0 +1,111 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="出库口" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="outPortCode">
+              <a-select show-search placeholder="请选择出库口" option-filter-prop="children" v-model="model.outPortCode">
+                <a-select-option v-for="item in portList" :key="item.name" :value="item.code">
+                  {{ item.name }}
+                </a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+import {getZoneList, selectOutPort, shipmentInventoryDetail} from '@/api/api'
+
+export default {
+  name: 'QuickShipmentDetailModel',
+  components: { },
+  data() {
+    return {
+      title: '操作',
+      width: 400,
+      portList: [],
+      inventoryDetailList: [],
+      querySource: {},
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+      // 选择用户查询条件配置
+      selectUserQueryConfig: [],
+      confirmLoading: false,
+      validatorRules: {
+        outPortCode: [{ required: true, message: '请选择出库口!' }]
+      }
+    }
+  },
+  created() {
+    //备份model原始值
+    this.modelDefault = JSON.parse(JSON.stringify(this.model));
+  },
+  methods: {
+    add() {
+      this.edit(this.modelDefault)
+    },
+    edit(record) {
+      this.visible = true;
+      this.model.containerCode = record[0].containerCode;
+      this.inventoryDetailList = record;
+      this.getPortList();
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    getPortList() {
+      this.querySource.containerCode = this.model.containerCode
+      selectOutPort(this.querySource).then(res => {
+        if (res.success) {
+          this.portList = res.result;
+          this.visible = true;
+        }
+      })
+    },
+    handleOk() {
+      if (this.model.outPortCode === ''){
+        this.$message.warning('请选择出库口');
+      }
+      this.inventoryDetailList.forEach(x=>{
+        x["toPortCode"]=this.model.outPortCode;
+      })
+      shipmentInventoryDetail(this.inventoryDetailList).then((res) => {
+        if (res.success) {
+          this.$message.success(res.message);
+        } else {
+          this.$message.error(res.message);
+        }
+      });
+      this.$emit("ok", this.model.outPortCode);
+      this.close()
+    },
+    handleCancel() {
+      this.close()
+    }
+  }
+}
+</script>
\ No newline at end of file
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 e401ec9..e851d8b 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
@@ -27,7 +27,10 @@ public interface IInventoryDetailService extends IService<InventoryDetail> {
 
     List<InventoryDetail> getInventoryDetailListByContainerCode(String containerCode, String warehouseCode);
 
-    // 求一种物料的库存之和
+    // 求一种物料的库存之和(总数)
+    BigDecimal getInventorySumQty(InventoryDetail inventoryDetail);
+
+    // 求一种物料的库存之和(扣除了配盘数量)
     BigDecimal getSumQty(InventoryDetail inventoryDetail);
 
     // 求一种物料的可出库存之和
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 50669d0..e183b14 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
@@ -89,6 +89,23 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe
     }
 
     @Override
+    public BigDecimal getInventorySumQty(InventoryDetail inventoryDetail) {
+        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
+        inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getInventoryStatus, inventoryDetail.getInventoryStatus())
+            .eq(InventoryDetail::getMaterialCode, inventoryDetail.getMaterialCode()).eq(InventoryDetail::getWarehouseCode, inventoryDetail.getWarehouseCode())
+            .eq(StringUtils.isNotEmpty(inventoryDetail.getBatch()), InventoryDetail::getBatch, inventoryDetail.getBatch())
+            .eq(StringUtils.isNotEmpty(inventoryDetail.getLot()), InventoryDetail::getLot, inventoryDetail.getLot())
+            .eq(StringUtils.isNotEmpty(inventoryDetail.getProject()), InventoryDetail::getProject, inventoryDetail.getLot())
+            .eq(InventoryDetail::getCompanyCode, inventoryDetail.getCompanyCode());
+        List<InventoryDetail> inventoryDetailList = list(inventoryDetailLambdaQueryWrapper);
+        if (inventoryDetailList.size() == 0) {
+            return BigDecimal.ZERO;
+        }
+        BigDecimal totalQty = inventoryDetailList.stream().map(InventoryDetail::getQty).reduce(BigDecimal.ZERO, BigDecimal::add);
+        return totalQty;
+    }
+
+    @Override
     public BigDecimal getSumQty(InventoryDetail inventoryDetail) {
         LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
         inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getInventoryStatus, inventoryDetail.getInventoryStatus())
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 8312005..bd117a6 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
@@ -168,6 +168,7 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe
         if (StringUtils.isEmpty(toPortCode)) {
             return Result.error("批量快速出库,出库站台编码为空");
         }
+        String companyCode = inventoryHeaderList.get(0).getCompanyCode();
         List<InventoryHeader> shipmentInventoryHeaderList =
             inventoryHeaderList.stream().filter((item) -> item.getContainerStatus().equals(QuantityConstant.STATUS_CONTAINER_EMPTY)).collect(Collectors.toList());
         if (StringUtils.isEmpty(shipmentInventoryHeaderList)) {
@@ -178,9 +179,9 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe
         if (StringUtils.isEmpty(inventoryDetails)) {
             return Result.error("批量快速出库, 排除锁定库存后没有可出库存详情");
         }
-
         ShipmentHeader shipmentHeader = new ShipmentHeader();
         shipmentHeader.setWarehouseCode(warehouseCode);
+        shipmentHeader.setCompanyCode(companyCode);
         shipmentHeader.setType(QuantityConstant.SHIPMENT_BILL_TYPE_QTC);
         shipmentHeader.setRemark("快速出库");
         Result result = shipmentHeaderService.saveShipmentHeader(shipmentHeader);
@@ -263,9 +264,10 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe
         if (StringUtils.isEmpty(inventoryDetailList)) {
             return Result.error("批量快速出库, 排除锁定库存后没有可出库存详情");
         }
-
+        String companyCode = inventoryDetailList.get(0).getCompanyCode();
         ShipmentHeader shipmentHeader = new ShipmentHeader();
         shipmentHeader.setWarehouseCode(warehouseCode);
+        shipmentHeader.setCompanyCode(companyCode);
         shipmentHeader.setType(QuantityConstant.SHIPMENT_BILL_TYPE_QTC);
         shipmentHeader.setRemark("快速出库");
         Result result = shipmentHeaderService.saveShipmentHeader(shipmentHeader);
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 013f8cc..ae015b9 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
@@ -1142,7 +1142,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             inventoryTransaction.setQty(receiptQty);
             inventoryTransaction.setReceiptQty(receiptQty);
             // 获得库存数量
-            BigDecimal inventoryQty = inventoryDetailService.getSumQty(inventoryDetail);
+            BigDecimal inventoryQty = inventoryDetailService.getInventorySumQty(inventoryDetail);
             inventoryQty = inventoryQty.add(receiptQty);
             inventoryTransaction.setInventoryQty(inventoryQty);
             inventoryTransactionList.add(inventoryTransaction);
@@ -1317,6 +1317,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             inventoryTransaction.setContainerCode(containerCode);
             inventoryTransaction.setZoneCode(zoneCode);
             inventoryTransaction.setFromLocationCode(fromLocationCode);
+            inventoryTransaction.setToLocationCode(toLocationCode);
             inventoryTransaction.setMaterialCode(inventoryDetail.getMaterialCode());
             inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
             inventoryTransaction.setMaterialSpec(inventoryDetail.getMaterialSpec());
@@ -1332,7 +1333,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             inventoryTransaction.setProject(inventoryDetail.getProject());
             inventoryTransaction.setQty(taskDetail.getQty());
             inventoryTransaction.setShipmentQty(taskDetail.getQty());
-            BigDecimal inventoryQty = inventoryDetailService.getSumQty(inventoryDetail);
+            BigDecimal inventoryQty = inventoryDetailService.getInventorySumQty(inventoryDetail);
             inventoryTransaction.setInventoryQty(inventoryQty);
             inventoryTransactionList.add(inventoryTransaction);
             shipmentIdList.add(taskDetail.getShipmentId());
@@ -1353,6 +1354,17 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             if (!success) {
                 throw new JeecgBootException("完成出库任务,更新库存头失败");
             }
+            List<InventoryDetail> updateInventoryDetailList = new ArrayList<>();
+            for (InventoryDetail inventoryDetail : inventoryDetailList) {
+                InventoryDetail inventoryDetail1 = new InventoryDetail();
+                inventoryDetail1.setId(inventoryDetail.getId());
+                inventoryDetail1.setLocationCode(toLocationCode);
+                updateInventoryDetailList.add(inventoryDetail1);
+            }
+            success = inventoryDetailService.updateBatchLocationCodeById(updateInventoryDetailList);
+            if (!success) {
+                throw new JeecgBootException("完成出库任务,更新库存详情失败");
+            }
         }
         success = inventoryTransactionService.saveBatch(inventoryTransactionList);
         if (!success) {