diff --git a/ant-design-vue-jeecg/src/api/api.js b/ant-design-vue-jeecg/src/api/api.js
index c9965dc..048c6a7 100644
--- a/ant-design-vue-jeecg/src/api/api.js
+++ b/ant-design-vue-jeecg/src/api/api.js
@@ -277,6 +277,10 @@ export const getDocumentAduitFlow = (params) => getAction('/config/parameterConf
 export const flatQuickReceipt = (params) => postAction('/receipt/receiveHeader/flatQuickReceipt', params)
 //快速入库
 export const quickReceipt = (params) => postAction('/task/taskHeader/quickReceipt', params)
+//悬臂库入库
+export const cantaleverReceipt = (params) => postAction('/task/taskHeader/cantaleverReceipt', params)
+//快速入库
+export const stageingReceipt = (params) => postAction('/task/taskHeader/stageingReceipt', params)
 //快速出库,批量快速出整托
 export const shipmentInventoryHeader = (params) => postAction('/inventory/inventoryHeader/shipmentInventoryHeader', params)
 //快速出库,批量快速出库存详情
diff --git a/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue
index 8e99b6e..e6794af 100644
--- a/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/task/AllTaskHeaderList.vue
@@ -91,9 +91,12 @@
       <a-button v-has="'taskHeader:emptyIn'"  @click="createEmptyIn()" type="primary">空托入库</a-button>
       <a-button v-has="'taskHeader:manyEmptyIn'" @click="createManyEmptyIn()"  type="primary">空托组入库</a-button>
       <a-button v-has="'taskHeader:quickReceipt'" @click="quickReceipt()" type="primary">快速入库</a-button>
+      <a-button v-has="'taskHeader:quickReceipt'" @click="stageingReceipt()" type="primary">暂存区入库</a-button>
+      <a-button v-has="'taskHeader:quickReceipt'" @click="cantaleverReceipt()" type="primary">悬臂库入库</a-button>
       <a-button v-has="'taskHeader:callReceiptBox'" @click="callReceiptBox()" type="primary" >呼叫入库有货托盘</a-button>
       <a-button v-has="'taskHeader:callReceiptBox'" @click="callReceiptEmptyBox()" type="primary" >呼叫入库空托盘</a-button>
       <a-button v-has="'taskHeader:emptyOut'" @click="createEmptyOut()" type="primary">空托出库</a-button>
+      <a-button v-has="'taskHeader:quickShipment'" @click="quickShipment()" type="primary">快速出库</a-button>
       <a-button v-has="'taskHeader:manyEmptyOut'" @click="batchCreateEmptyOut()" type="primary">批量空托出库</a-button>
       <a-button v-has="'taskHeader:manyEmptyOut'" @click="createManyEmptyOut()" type="primary">空托组出库</a-button>
       <a-button v-has="'taskHeader:callShipmentBox'" @click="callShipmentBox()" type="primary" >呼叫出库托盘</a-button>
@@ -193,6 +196,8 @@
     <empty-in-task-modal ref="emptyInModal" @ok="modalFormOk"></empty-in-task-modal>
     <many-empty-in-task-modal ref="manyEmptyInModal" @ok="modalFormOk"></many-empty-in-task-modal>
     <MaterialTaskModal ref="materialTaskModal" @ok="modalFormOk"></MaterialTaskModal>
+    <CantaleverTaskModal ref="cantaleverTaskModal"  @ok="modalFormOk"></CantaleverTaskModal>
+
     <call-receipt-box-modal ref="modalForm5" @ok="modalFormOk"></call-receipt-box-modal>
     <call-receipt-empty-box-modal ref="modalForm6" @ok="modalFormOk"></call-receipt-empty-box-modal>
 
@@ -203,6 +208,8 @@
     <check-out-task-modal ref="checkOutModal" @ok="modalFormOk"></check-out-task-modal>
     <transfer-task-modal ref="transferModal" @ok="modalFormOk"></transfer-task-modal>
     <over-station-task-modal ref="overStationModal" @ok="modalFormOk"></over-station-task-modal>
+    <StageingReceiptModal ref="stageingReceiptModal" @ok="modalFormOk"></StageingReceiptModal>
+    <shipment-material-modal ref="shipmentMaterialModal" @ok="modalFormOk"></shipment-material-modal>
 
   </a-card>
 </template>
@@ -231,11 +238,17 @@ import ManyEmptyOutTaskModal from "@views/system/task/modules/ManyEmptyOutTaskMo
 import CheckOutTaskModal from "@views/system/task/modules/CheckOutTaskModal.vue";
 import TransferTaskModal from "@views/system/task/modules/TransferTaskModal.vue";
 import OverStationTaskModal from "@views/system/task/modules/OverStationTaskModal.vue";
+import StageingReceiptModal from "@views/system/task/modules/StageingReceiptModal.vue";
+import ShipmentMaterialModal from "@views/system/task/modules/ShipmentMaterialModal.vue";
+import CantaleverTaskModal from "@views/system/task/modules/CantaleverTaskModal.vue";
 
 export default {
   name: "AllTaskHeaderList",
   mixins: [JeecgListMixin],
   components: {
+    CantaleverTaskModal,
+    ShipmentMaterialModal,
+    StageingReceiptModal,
     OverStationTaskModal, TransferTaskModal,
     CheckOutTaskModal,
     ManyEmptyOutTaskModal, EmptyOutTaskModal, CallShipmentBoxModal, BatchEmptyOutTaskModal,
@@ -512,6 +525,14 @@ export default {
       this.selectedRowKeys = selectedRowKeys;
       this.selectionRows = selectionRows;
     },
+    quickShipment(){
+      this.$refs.shipmentMaterialModal.edit();
+      this.$refs.shipmentMaterialModal.title = "快速出库";
+    },
+    stageingReceipt(){
+      this.$refs.stageingReceiptModal.edit();
+      this.$refs.stageingReceiptModal.title = "暂存区入库";
+    },
     loadData(arg) {
       if (!this.url.list) {
         this.$message.error("请设置url.list属性!")
@@ -561,6 +582,11 @@ export default {
     },
     quickReceipt(){
       this.$refs.materialTaskModal.edit();
+      this.$refs.materialTaskModal.title = "快速入库";
+    },
+    cantaleverReceipt(){
+      this.$refs.cantaleverTaskModal.edit();
+      this.$refs.cantaleverTaskModal.title = "悬臂库入库";
     },
     callReceiptBox() {
       this.$refs.modalForm5.edit();
diff --git a/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue b/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue
index 1f8c7b7..69e4124 100644
--- a/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/task/ReceiptTaskHeaderList.vue
@@ -91,6 +91,7 @@
       <a-button v-has="'taskHeader:emptyIn'"  @click="createEmptyIn()" type="primary">空托入库</a-button>
       <a-button v-has="'taskHeader:manyEmptyIn'" @click="createManyEmptyIn()"  type="primary">空托组入库</a-button>
       <a-button v-has="'taskHeader:quickReceipt'" @click="quickReceipt()" type="primary">快速入库</a-button>
+      <a-button v-has="'taskHeader:quickReceipt'" @click="stageingReceipt()" type="primary">暂存区入库</a-button>
       <a-button v-has="'taskHeader:callReceiptBox'" @click="callReceiptBox()" type="primary" >呼叫入库有货托盘</a-button>
       <a-button v-has="'taskHeader:callReceiptBox'" @click="callReceiptEmptyBox()" type="primary" >呼叫入库空托盘</a-button>
       <j-super-query :fieldList="superFieldList" v-has="'taskHeader:superQuery'" @handleSuperQuery="handleSuperQuery"/>
@@ -200,6 +201,7 @@
     <many-empty-in-task-modal ref="manyEmptyInModal" @ok="modalFormOk"></many-empty-in-task-modal>
     <update-priority ref="updatePriority" @ok="modalFormOk"></update-priority>
     <MaterialTaskModal ref="materialTaskModal" @ok="modalFormOk"></MaterialTaskModal>
+    <StageingReceiptModal ref="stageingReceiptModal" @ok="modalFormOk"></StageingReceiptModal>
     <call-receipt-box-modal ref="modalForm5" @ok="modalFormOk"></call-receipt-box-modal>
     <call-receipt-empty-box-modal ref="modalForm6" @ok="modalFormOk"></call-receipt-empty-box-modal>
 
@@ -225,12 +227,14 @@ import MaterialTaskModal from "./modules/MaterialTaskModal";
 import CallReceiptBoxModal from "@views/system/task/modules/CallReceiptBoxModal";
 import CallReceiptEmptyBoxModal from "@views/system/task/modules/CallReceiptEmptyBoxModal";
 import VideoModal from "@views/system/task/VideoModal.vue";
+import StageingReceiptModal from "@views/system/task/modules/StageingReceiptModal.vue";
 
 
 export default {
   name: "ReceiptTaskHeaderList",
   mixins: [JeecgListMixin],
   components: {
+    StageingReceiptModal,
     VideoModal,
     CallReceiptEmptyBoxModal,
     CallReceiptBoxModal,
@@ -574,6 +578,10 @@ export default {
       this.$refs.materialTaskModal.edit();
       this.$refs.materialTaskModal.title = "快速入库";
     },
+    stageingReceipt(){
+      this.$refs.stageingReceiptModal.edit();
+      this.$refs.stageingReceiptModal.title = "暂存区入库";
+    },
     handlePriority(record){
       this.$refs.updatePriority.edit(record);
       this.$refs.updatePriority.title = "修改优先级";
diff --git a/ant-design-vue-jeecg/src/views/system/task/TaskDetailList.vue b/ant-design-vue-jeecg/src/views/system/task/TaskDetailList.vue
index 13a1417..c61272e 100644
--- a/ant-design-vue-jeecg/src/views/system/task/TaskDetailList.vue
+++ b/ant-design-vue-jeecg/src/views/system/task/TaskDetailList.vue
@@ -183,6 +183,11 @@ export default {
           dataIndex: 'qty'
         },
         {
+          title: '位置',
+          align: 'center',
+          dataIndex: 'position'
+        },
+        {
           title: '批次',
           align: 'center',
           dataIndex: 'batch'
diff --git a/ant-design-vue-jeecg/src/views/system/task/modules/CantaleverTaskModal.vue b/ant-design-vue-jeecg/src/views/system/task/modules/CantaleverTaskModal.vue
new file mode 100644
index 0000000..27219bf
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/task/modules/CantaleverTaskModal.vue
@@ -0,0 +1,160 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :maskClosable="false"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel">
+
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :label-col="labelCol" :wrapper-col="wrapperCol" :model="model">
+
+      <!-- 子表单区域 -->
+      <a-tabs defaultActiveKey="1">
+        <a-tab-pane tab="物料信息" key="1">
+          <div>
+            <a-row type="flex" style="margin-bottom:10px" :gutter="24">
+              <a-col :span="12">物料编码</a-col>
+              <a-col :span="8">数量</a-col>
+              <a-col :span="4">操作</a-col>
+            </a-row>
+            <a-row type="flex" style="margin-bottom:-20px" :gutter="24" v-for="(item, index) in quickMainModel.receiptEntityList" :key="index">
+              <a-col style="display: none">
+                <a-form-model-item>
+                  <a-input placeholder="id" v-model="item.id"/>
+                </a-form-model-item>
+              </a-col>
+              <a-col :span="12">
+                <a-form-model-item>
+                  <j-search-select-tag
+                    placeholder="请选择"
+                    v-model="item.materialCode"
+                    :dict="'material,name,code'"
+                    :pageSize="5"
+                    :async="true">
+                  </j-search-select-tag>
+                </a-form-model-item>
+              </a-col>
+              <a-col :span="8">
+                <a-form-model-item>
+                  <a-input placeholder="数量" v-model="item.qty"/>
+                </a-form-model-item>
+              </a-col>
+              <a-col :span="4">
+                <a-form-model-item>
+                  <a-icon type="minus-circle" @click="delRowCustom(index)" style="fontSize :20px"/>
+                </a-form-model-item>
+              </a-col>
+            </a-row>
+            <a-button type="dashed" style="width: 100%;margin-top: 10px" @click="addRowCustom"><a-icon type="plus"/>添加物料信息</a-button>
+          </div>
+        </a-tab-pane>
+      </a-tabs>
+      </a-form-model>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+
+import JEditableTable from '@/components/jeecg/JEditableTable'
+import {cantaleverReceipt, execute, quickReceipt} from '@/api/api'
+import JDate from '@/components/jeecg/JDate'
+import JSelectMultiCanUseContainer from "../../../../components/jeecgbiz/JSelectMultiCanUseContainer";
+
+export default {
+  name: 'CantaleverTaskModal',
+  components: {
+    JDate, JEditableTable,JSelectMultiCanUseContainer
+  },
+  data() {
+    return {
+      title: '悬臂库入库',
+      visible: false,
+      confirmLoading: false,
+      model: {},
+      labelCol: {
+        xs: {span: 24},
+        sm: {span: 4}
+      },
+      wrapperCol: {
+        xs: {span: 24},
+        sm: {span: 24}
+      },
+      activeKey: '1',
+      quickMainModel: {
+        receiptEntityList: [{}],
+      },
+      // 客户信息
+      url: {
+        add: '/test/jeecgOrderMain/add',
+        edit: '/test/jeecgOrderMain/edit',
+      }
+    }
+  },
+  created() {
+  },
+  methods: {
+    handleOk() {
+      this.validateFields()
+    },
+    handleCancel() {
+      this.visible = false
+    },
+
+    addRowCustom() {
+      this.quickMainModel.receiptEntityList.push({});
+      this.$forceUpdate();
+    },
+    delRowCustom(index) {
+      console.log(index)
+      this.quickMainModel.receiptEntityList.splice(index, 1);
+      this.$forceUpdate();
+    },
+    addRowTicket() {
+      this.quickMainModel.jeecgOrderTicketList.push({});
+      console.log(this.quickMainModel.jeecgOrderTicketList)
+      this.$forceUpdate();
+    },
+    delRowTicket(index) {
+      console.log(index)
+      this.quickMainModel.jeecgOrderTicketList.splice(index, 1);
+      this.$forceUpdate();
+    },
+
+    edit(record) {
+      this.visible = true
+      this.activeKey = '1'
+      this.quickMainModel = Object.assign({
+        receiptEntityList: [{}]
+      }, record);
+    },
+    /** 触发表单验证 */
+    validateFields() {
+      // 触发表单验证
+      this.$refs.form.validate(valid => {
+        //alert(JSON.stringify(this.quickMainModel));
+        this.receipt(this.quickMainModel);
+      })
+    },
+
+    receipt(record) {
+      this.confirmLoading = true
+      this.model = Object.assign({}, record);
+      cantaleverReceipt(this.model).then((res) => {
+        this.loading = false;
+        if (res.success) {
+          this.$message.success(res.message);
+          this.$emit('ok');
+          this.visible = false
+        } else {
+          this.$message.error(res.message);
+        }
+        this.confirmLoading = false
+      });
+    },
+  }
+}
+</script>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/task/modules/StageingReceiptModal.vue b/ant-design-vue-jeecg/src/views/system/task/modules/StageingReceiptModal.vue
new file mode 100644
index 0000000..2923f81
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/task/modules/StageingReceiptModal.vue
@@ -0,0 +1,172 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :maskClosable="false"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel">
+
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :label-col="labelCol" :wrapper-col="wrapperCol" :model="model">
+        <!-- 主表单区域 -->
+        <a-row class="form-row" :gutter="24">
+          <a-col :lg="12">
+            <a-form-model-item label="托盘号"   :rules="[{ required: true, message: '请输入托盘号!' }]">
+              <a-input placeholder="请输入托盘号" v-model="quickMainModel.containerCode"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :lg="12">
+            <a-form-model-item label="暂存区"   :rules="[{ required: true, message: '请输入暂存区位置!' }]">
+              <a-input placeholder="请输入暂存区位置" v-model="quickMainModel.fromPort"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      <!-- 子表单区域 -->
+      <a-tabs defaultActiveKey="1">
+        <a-tab-pane tab="物料信息" key="1">
+          <div>
+            <a-row type="flex" style="margin-bottom:10px" :gutter="24">
+              <a-col :span="12">物料编码</a-col>
+              <a-col :span="8">数量</a-col>
+              <a-col :span="4">操作</a-col>
+            </a-row>
+            <a-row type="flex" style="margin-bottom:-20px" :gutter="24" v-for="(item, index) in quickMainModel.receiptEntityList" :key="index">
+              <a-col style="display: none">
+                <a-form-model-item>
+                  <a-input placeholder="id" v-model="item.id"/>
+                </a-form-model-item>
+              </a-col>
+              <a-col :span="12">
+                <a-form-model-item>
+                  <j-search-select-tag
+                    placeholder="请选择"
+                    v-model="item.materialCode"
+                    :dict="'material,name,code'"
+                    :pageSize="5"
+                    :async="true">
+                  </j-search-select-tag>
+                </a-form-model-item>
+              </a-col>
+              <a-col :span="8">
+                <a-form-model-item>
+                  <a-input placeholder="数量" v-model="item.qty"/>
+                </a-form-model-item>
+              </a-col>
+              <a-col :span="4">
+                <a-form-model-item>
+                  <a-icon type="minus-circle" @click="delRowCustom(index)" style="fontSize :20px"/>
+                </a-form-model-item>
+              </a-col>
+            </a-row>
+            <a-button type="dashed" style="width: 100%;margin-top: 10px" @click="addRowCustom"><a-icon type="plus"/>添加物料信息</a-button>
+          </div>
+        </a-tab-pane>
+      </a-tabs>
+      </a-form-model>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+
+import JEditableTable from '@/components/jeecg/JEditableTable'
+import {execute, quickReceipt, stageingReceipt} from '@/api/api'
+import JDate from '@/components/jeecg/JDate'
+import JSelectMultiCanUseContainer from "../../../../components/jeecgbiz/JSelectMultiCanUseContainer";
+
+export default {
+  name: 'StageingReceiptModal',
+  components: {
+    JDate, JEditableTable,JSelectMultiCanUseContainer
+  },
+  data() {
+    return {
+      title: '暂存区入库',
+      visible: false,
+      confirmLoading: false,
+      model: {},
+      labelCol: {
+        xs: {span: 24},
+        sm: {span: 4}
+      },
+      wrapperCol: {
+        xs: {span: 24},
+        sm: {span: 24}
+      },
+      activeKey: '1',
+      quickMainModel: {
+        receiptEntityList: [{}],
+      },
+      // 客户信息
+      url: {
+        add: '/test/jeecgOrderMain/add',
+        edit: '/test/jeecgOrderMain/edit',
+      }
+    }
+  },
+  created() {
+  },
+  methods: {
+    handleOk() {
+      this.validateFields()
+    },
+    handleCancel() {
+      this.visible = false
+    },
+
+    addRowCustom() {
+      this.quickMainModel.receiptEntityList.push({});
+      this.$forceUpdate();
+    },
+    delRowCustom(index) {
+      console.log(index)
+      this.quickMainModel.receiptEntityList.splice(index, 1);
+      this.$forceUpdate();
+    },
+    addRowTicket() {
+      this.quickMainModel.jeecgOrderTicketList.push({});
+      console.log(this.quickMainModel.jeecgOrderTicketList)
+      this.$forceUpdate();
+    },
+    delRowTicket(index) {
+      console.log(index)
+      this.quickMainModel.jeecgOrderTicketList.splice(index, 1);
+      this.$forceUpdate();
+    },
+
+    edit(record) {
+      this.visible = true
+      this.activeKey = '1'
+      this.quickMainModel = Object.assign({
+        receiptEntityList: [{}]
+      }, record);
+    },
+    /** 触发表单验证 */
+    validateFields() {
+      // 触发表单验证
+      this.$refs.form.validate(valid => {
+        //alert(JSON.stringify(this.quickMainModel));
+        this.receipt(this.quickMainModel);
+      })
+    },
+
+    receipt(record) {
+      this.confirmLoading = true
+      this.model = Object.assign({}, record);
+      stageingReceipt(this.model).then((res) => {
+        this.loading = false;
+        if (res.success) {
+          this.$message.success(res.message);
+          this.$emit('ok');
+          this.visible = false
+        } else {
+          this.$message.error(res.message);
+        }
+        this.confirmLoading = false
+      });
+    },
+  }
+}
+</script>
\ No newline at end of file
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 0cd2dab..e2555d3 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
@@ -539,7 +539,10 @@ public class WcsServiceImpl implements WcsService {
                     Integer minTaskPosition = Collections.min(positionList);
                     List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByLocationCodeAndNotPosition(fromLocationCode, positionList, warehouseCode);
                     List<Integer> inventoryPositionList = inventoryDetailList.stream().map(InventoryDetail::getPosition).collect(Collectors.toList());
-                    Integer minInventoryPosition = Collections.min(inventoryPositionList);
+                    Integer minInventoryPosition = 0;
+                    if (CollectionUtils.isNotEmpty(inventoryPositionList)) {
+                        minInventoryPosition = Collections.min(inventoryPositionList);
+                    }
                     if (minTaskPosition < minInventoryPosition) {
                         TaskHeader unCompleteTaskHeader = taskHeaderService.getUnCompleteTransferTaskByFromLocationCode(fromLocationCode, warehouseCode);
                         if (unCompleteTaskHeader != null) {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/IContainerService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/IContainerService.java
index edee32a..11da996 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/IContainerService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/IContainerService.java
@@ -45,4 +45,6 @@ public interface IContainerService extends IService<Container> {
     List<Container> getContainerListByCodeList(List<String> containerCodeList, String warehouseCode);
 
     List<Container> getCanUseListContainer(Container container, String warehouseCode);
+
+    List<Container> getCanDeleteListLSContainer(String warehouseCode);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java
index e6667c9..d8b4411 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java
@@ -248,6 +248,18 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container
         }
     }
 
+    @Override
+    public List<Container> getCanDeleteListLSContainer(String warehouseCode) {
+        LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery();
+        containerLambdaQueryWrapper.eq(Container::getContainerTypeCode, QuantityConstant.CONTAINER_TYPE_LS)
+                .eq(Container::getWarehouseCode, warehouseCode)
+                .eq(Container::getLocationCode, QuantityConstant.EMPTY_STRING)
+                .eq(Container::getStatus, QuantityConstant.STATUS_CONTAINER_EMPTY)
+                .eq(Container::getFillStatus, QuantityConstant.STATUS_CONTAINER_FILL_EMPTY);
+        List<Container> containerList = containerService.list(containerLambdaQueryWrapper);
+        return containerList;
+    }
+
     private int getStartNumber(String containerTypeCode, String warehouseCode) {
         LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery();
         containerLambdaQueryWrapper.eq(Container::getContainerTypeCode, containerTypeCode).eq(Container::getWarehouseCode, warehouseCode)
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoDeleteTask.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoDeleteTask.java
index f9d2704..b30b7fd 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoDeleteTask.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/AutoDeleteTask.java
@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.wms.api.erp.service.IErpService;
+import org.jeecg.modules.wms.config.container.entity.Container;
+import org.jeecg.modules.wms.config.container.service.IContainerService;
 import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService;
 import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService;
 import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction;
@@ -18,12 +20,14 @@ import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
 import org.jeecg.utils.StringUtils;
 import org.jeecg.utils.constant.QuantityConstant;
+import org.jeecg.utils.support.ApiAuthentication;
 import org.quartz.*;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 删除完成的单据
@@ -44,15 +48,28 @@ public class AutoDeleteTask implements Job {
 
     @Resource
     private IErpService erpService;
+
     @Resource
     private IHuahengMultiHandlerService huahengMultiHandlerService;
+
     @Resource
     private IParameterConfigurationService parameterConfigurationService;
+
     @Resource
     private ITaskHeaderService taskHeaderService;
+
     @Resource
     private IInventoryTransactionService inventoryTransactionService;
 
+    @Resource
+    private IContainerService containerService;
+
+    private String parameter;
+
+    public void setParameter(String parameter) {
+        this.parameter = parameter;
+    }
+
     @Override
     public void execute(JobExecutionContext context) throws JobExecutionException {
         String value = parameterConfigurationService.getValueByCode(QuantityConstant.RULE_DELETE_RECEIPT);
@@ -63,38 +80,66 @@ public class AutoDeleteTask implements Job {
         if (DELETE_RECEIPT == QuantityConstant.NOT_DELETE_RECEIPT) {
             return;
         }
+        // 入库单:按照 id 升序排序,先删除 id 小的记录,只保留最新的 100 条记录
         LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
-        receiptHeaderLambdaQueryWrapper.eq(ReceiptHeader::getLastStatus, QuantityConstant.RECEIPT_HEADER_COMPLETED).isNull(ReceiptHeader::getReferCode)
-                .le(ReceiptHeader::getCreateTime, DateUtil.offsetDay(new Date(), -30));
+        receiptHeaderLambdaQueryWrapper
+                .eq(ReceiptHeader::getLastStatus, QuantityConstant.RECEIPT_HEADER_COMPLETED)
+                .isNull(ReceiptHeader::getReferCode)
+                .orderByAsc(ReceiptHeader::getId);
         List<ReceiptHeader> receiptHeaderList = receiptHeaderService.list(receiptHeaderLambdaQueryWrapper);
-        log.info(String.format(" AutoDeleteTask 执行任务! receiptHeaderList :" + receiptHeaderList + "时间" + DateUtils.getTimestamp()));
-        for (ReceiptHeader receiptHeader : receiptHeaderList) {
-            receiptHeaderService.delMain(String.valueOf(receiptHeader.getId()), QuantityConstant.WMS_COMPLETE_DELETE_RECEIPT);
+        log.info(String.format("AutoDeleteTask receiptHeaderList: %s, 时间: %s", receiptHeaderList, DateUtils.getTimestamp()));
+        if (receiptHeaderList.size() > 10) {
+            int countToDelete = receiptHeaderList.size() - 10;
+            for (int i = 0; i < countToDelete; i++) {
+                ReceiptHeader receiptHeader = receiptHeaderList.get(i);
+                receiptHeaderService.delMain(String.valueOf(receiptHeader.getId()), QuantityConstant.WMS_COMPLETE_DELETE_RECEIPT);
+            }
         }
+
+        // 出库单:按照 id 升序排序,先删除 id 小的记录,只保留最新的 100 条记录
         LambdaQueryWrapper<ShipmentHeader> shipmentHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
-        shipmentHeaderLambdaQueryWrapper.eq(ShipmentHeader::getLastStatus, QuantityConstant.SHIPMENT_HEADER_COMPLETED).isNull(ShipmentHeader::getReferCode)
-                .le(ShipmentHeader::getCreateTime, DateUtil.offsetDay(new Date(), -30));
+        shipmentHeaderLambdaQueryWrapper
+                .eq(ShipmentHeader::getLastStatus, QuantityConstant.SHIPMENT_HEADER_COMPLETED)
+                .isNull(ShipmentHeader::getReferCode)
+                .orderByAsc(ShipmentHeader::getId);
         List<ShipmentHeader> shipmentHeaderList = shipmentHeaderService.list(shipmentHeaderLambdaQueryWrapper);
-        log.info(String.format(" AutoDeleteTask 执行任务! shipmentHeaderList :" + shipmentHeaderList + "时间" + DateUtils.getTimestamp()));
-        for (ShipmentHeader shipmentHeader : shipmentHeaderList) {
-            shipmentHeaderService.delMain(String.valueOf(shipmentHeader.getId()), QuantityConstant.WMS_COMPLETE_DELETE_RECEIPT);
+        log.info(String.format("AutoDeleteTask shipmentHeaderList: %s, 时间: %s", shipmentHeaderList, DateUtils.getTimestamp()));
+        if (shipmentHeaderList.size() > 10) {
+            int countToDelete = shipmentHeaderList.size() - 10;
+            for (int i = 0; i < countToDelete; i++) {
+                ShipmentHeader shipmentHeader = shipmentHeaderList.get(i);
+                shipmentHeaderService.delMain(String.valueOf(shipmentHeader.getId()), QuantityConstant.WMS_COMPLETE_DELETE_RECEIPT);
+            }
         }
+
+        // 任务:按照 id 升序排序,先删除 id 小的记录,只保留最新的 100 条记录
         LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
-        taskHeaderLambdaQueryWrapper.eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED).ne(TaskHeader::getExceptionState,
-                QuantityConstant.EXCEPTION_TASK_ERROR).le(TaskHeader::getCreateTime, DateUtil.offsetDay(new Date(), -30));
+        taskHeaderLambdaQueryWrapper
+                .eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED)
+                .ne(TaskHeader::getExceptionState, QuantityConstant.EXCEPTION_TASK_ERROR)
+                .orderByAsc(TaskHeader::getId);
         List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper);
-        log.info(String.format(" AutoDeleteTask 执行任务! taskHeaderList :" + taskHeaderList + "时间" + DateUtils.getTimestamp()));
-        for (TaskHeader taskHeader : taskHeaderList) {
-            taskHeaderService.delMain(taskHeader.getId());
+        log.info(String.format("AutoDeleteTask taskHeaderList: %s, 时间: %s", taskHeaderList, DateUtils.getTimestamp()));
+        if (taskHeaderList.size() > 10) {
+            int countToDelete = taskHeaderList.size() - 10;
+            for (int i = 0; i < countToDelete; i++) {
+                TaskHeader taskHeader = taskHeaderList.get(i);
+                taskHeaderService.delMain(taskHeader.getId());
+            }
         }
 
+
         LambdaQueryWrapper<InventoryTransaction> inventoryTransactionLambdaQueryWrapper = Wrappers.lambdaQuery();
         inventoryTransactionLambdaQueryWrapper.le(InventoryTransaction::getCreateTime, DateUtil.offsetDay(new Date(), -360));
         List<InventoryTransaction> inventoryTransactionList = inventoryTransactionService.list(inventoryTransactionLambdaQueryWrapper);
-        log.info(String.format(" AutoDeleteTask 执行任务! inventoryTransactionList :" + inventoryTransactionList + "时间" + DateUtils.getTimestamp()));
         if (!CollectionUtils.isEmpty(inventoryTransactionList)) {
             inventoryTransactionService.batchDelete(inventoryTransactionList);
         }
 
+        List<Container> containerList = containerService.getCanDeleteListLSContainer(QuantityConstant.DEFAULT_WAREHOUSE);
+        if (!CollectionUtils.isEmpty(containerList)) {
+            List<Integer> containerIdList = containerList.stream().map(Container::getId).collect(Collectors.toList());
+            containerService.removeByIds(containerIdList);
+        }
     }
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
index 6d1c974..189cdff 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/impl/ShipmentHeaderServiceImpl.java
@@ -504,6 +504,9 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
             if (taskType == QuantityConstant.TASK_TYPE_WHOLESHIPMENT) {
                 type = QuantityConstant.PORT_TYPE_OUT;
             }
+            if (zoneCode.equals(QuantityConstant.ZONE_B)) {
+                type = QuantityConstant.PORT_TYPE_OUT;
+            }
             String fromLocationCode = shipmentContainerHeader.getFromLocationCode();
             if (StringUtils.isEmpty(fromLocationCode)) {
                 throw new JeecgBootException("自动出库, 没有起始库位编码");
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/IAgvTaskService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/IAgvTaskService.java
index 173da6f..99d0582 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/IAgvTaskService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/IAgvTaskService.java
@@ -35,7 +35,7 @@ public interface IAgvTaskService extends IService<AgvTask> {
 
     AgvTask getAgvTaskByPort(String portCode, String warehouseCode);
 
-    AgvTask getAgvTaskBuContainerCode(String containerCode, String warehouseCode);
+    AgvTask getAgvTaskByContainerCode(String containerCode, String warehouseCode);
 
     AgvTask getAgvTaskBuFromPort(String fromPortCode, String warehouseCode);
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java
index 6e4fb9f..ce22c6e 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java
@@ -61,7 +61,7 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl
 //                throw new JeecgBootException("生成AGV任务,锁定容器失败:" + containerCode);
 //            }
 //        }
-        if (agvTaskService.getAgvTaskBuContainerCode(containerCode, warehouseCode) != null) {
+        if (agvTaskService.getAgvTaskByContainerCode(containerCode, warehouseCode) != null) {
             return Result.error("生成AGV任务失败,已经生成AGV任务");
         }
         agvTask.setWarehouseCode(warehouseCode);
@@ -208,7 +208,7 @@ public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> impl
     }
 
     @Override
-    public AgvTask getAgvTaskBuContainerCode(String containerCode, String warehouseCode) {
+    public AgvTask getAgvTaskByContainerCode(String containerCode, String warehouseCode) {
         LambdaQueryWrapper<AgvTask> agvTaskLambdaQueryWrapper = Wrappers.lambdaQuery();
         agvTaskLambdaQueryWrapper.eq(AgvTask::getContainerCode, containerCode).eq(AgvTask::getWarehouseCode, warehouseCode).lt(AgvTask::getStatus,
             QuantityConstant.AGV_TASK_STATUS_COMPLETED);
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java
index be3c7b6..82c25b2 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/controller/TaskHeaderController.java
@@ -30,10 +30,7 @@ import org.jeecg.modules.wms.framework.controller.HuahengBaseController;
 import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService;
 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader;
-import org.jeecg.modules.wms.task.taskHeader.entity.CantaleverTransfer;
-import org.jeecg.modules.wms.task.taskHeader.entity.QucikReceiptEntity;
-import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
-import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
+import org.jeecg.modules.wms.task.taskHeader.entity.*;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
 import org.jeecg.utils.ConvertUtils;
@@ -911,6 +908,46 @@ public class TaskHeaderController extends HuahengBaseController {
     }
 
     /**
+     * 快速入库
+     * @return
+     */
+    @AutoLog(value = "悬臂库入库", operateType = 2)
+    @PostMapping("cantaleverReceipt")
+    @ApiOperation("悬臂库入库")
+    public Result cantaleverReceipt(@RequestBody QucikReceiptEntity qucikReceiptEntity, HttpServletRequest req) {
+        String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
+        qucikReceiptEntity.setWarehouseCode(warehouseCode);
+        Result result = handleMultiProcess("cantaleverReceipt", new MultiProcessListener() {
+            @Override
+            public Result<?> doProcess() {
+                Result result = taskHeaderService.cantaleverReceipt(qucikReceiptEntity);
+                return result;
+            }
+        });
+        return result;
+    }
+
+    /**
+     * 暂存区入库
+     * @return
+     */
+    @AutoLog(value = "暂存区入库", operateType = 2)
+    @PostMapping("stageingReceipt")
+    @ApiOperation("暂存区入库")
+    public Result stageingReceipt(@RequestBody StageingReceiptEntity stageingReceiptEntity, HttpServletRequest req) {
+        String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
+        stageingReceiptEntity.setWarehouseCode(warehouseCode);
+        Result result = handleMultiProcess("stageingReceipt", new MultiProcessListener() {
+            @Override
+            public Result<?> doProcess() {
+                Result result = taskHeaderService.stageingReceipt(stageingReceiptEntity);
+                return result;
+            }
+        });
+        return result;
+    }
+
+    /**
      * 快速出库
      * @return
      */
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/StageingReceiptEntity.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/StageingReceiptEntity.java
new file mode 100644
index 0000000..9f8b83a
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/StageingReceiptEntity.java
@@ -0,0 +1,15 @@
+package org.jeecg.modules.wms.task.taskHeader.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class StageingReceiptEntity {
+
+    private String containerCode;
+    private String fromPort;
+    private String toPort;
+    private String warehouseCode;
+    private List<ReceiptEntity> receiptEntityList;
+}
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 fa40d40..03b91c0 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
@@ -10,6 +10,7 @@ import org.jeecg.modules.wms.config.location.entity.Location;
 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail;
 import org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryHeader;
 import org.jeecg.modules.wms.task.taskHeader.entity.QucikReceiptEntity;
+import org.jeecg.modules.wms.task.taskHeader.entity.StageingReceiptEntity;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -501,6 +502,19 @@ public interface ITaskHeaderService extends IService<TaskHeader> {
     Result quickReceipt(QucikReceiptEntity qucikReceiptEntity);
 
     /**
+     * add
+     * @return
+     */
+    Result cantaleverReceipt(QucikReceiptEntity qucikReceiptEntity);
+
+
+    /**
+     * add
+     * @return
+     */
+    Result stageingReceipt(StageingReceiptEntity stageingReceiptEntity);
+
+    /**
      * 切换任务
      * @param  id
      * @return
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 4d6088e..b965ef9 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
@@ -63,6 +63,8 @@ import org.jeecg.modules.wms.stocktaking.cycleCountDetail.entity.CycleCountDetai
 import org.jeecg.modules.wms.stocktaking.cycleCountDetail.service.impl.CycleCountDetailChildServiceImpl;
 import org.jeecg.modules.wms.stocktaking.cycleCountDetail.service.impl.CycleCountDetailServiceImpl;
 import org.jeecg.modules.wms.stocktaking.cycleCountHeader.service.impl.CycleCountHeaderServiceImpl;
+import org.jeecg.modules.wms.task.agvTask.entity.AgvTask;
+import org.jeecg.modules.wms.task.agvTask.service.IAgvTaskService;
 import org.jeecg.modules.wms.task.taskHeader.entity.*;
 import org.jeecg.modules.wms.task.taskHeader.mapper.TaskDetailMapper;
 import org.jeecg.modules.wms.task.taskHeader.mapper.TaskHeaderMapper;
@@ -204,6 +206,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     @Resource
     private IAddressService addressService;
 
+    @Resource
+    private IAgvTaskService agvTaskService;
 
     @Override
     @Transactional
@@ -1580,11 +1584,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             return Result.error("创建移库任务失败,起始库位:" + fromLocationCode + "和目标库位:" + toLocationCode + "是同一个");
         }
         String containerCode = fromLocation.getContainerCode();
-        TaskHeader unComleteTask = taskHeaderService.getUnCompleteTaskByContainerCode(containerCode, warehouseCode);
-        if (unComleteTask != null) {
-            Container container = containerService.createLSContainer(warehouseCode);
-            containerCode = container.getCode();
-        }
+//        TaskHeader unComleteTask = taskHeaderService.getUnCompleteTaskByContainerCode(containerCode, warehouseCode);
+//        if (unComleteTask != null) {
+//            Container container = containerService.createLSContainer(warehouseCode);
+//            containerCode = container.getCode();
+//        }
         List<InventoryDetail> toInventoryDetailList = inventoryDetailService.getInventoryDetailListByLocationCode(toLocationCode, warehouseCode);
         List<InventoryDetail> totalInventoryDetailList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(toInventoryDetailList)) {
@@ -1671,9 +1675,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (!success) {
             throw new JeecgBootException("创建移库任务时,创建任务失败");
         }
-        if (!taskHeaderService.updateTaskRoadWay(containerCode, fromLocationCode, warehouseCode)) {
-            throw new JeecgBootException("创建任务时,更新巷道值失败");
-        }
+//        if (!taskHeaderService.updateTaskRoadWay(containerCode, fromLocationCode, warehouseCode)) {
+//            throw new JeecgBootException("创建任务时,更新巷道值失败");
+//        }
         List<TaskDetail> taskDetailList = new ArrayList<>();
         fromInventoryDetailList = fromInventoryDetailList.stream().sorted(new Comparator<InventoryDetail>() {
             @Override
@@ -3177,6 +3181,259 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         return Result.OK("快速入库成功");
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result cantaleverReceipt(QucikReceiptEntity qucikReceiptEntity) {
+        boolean success = false;
+        String containerCode = qucikReceiptEntity.getContainerCode();
+        List<ReceiptEntity> receiptEntityList = qucikReceiptEntity.getReceiptEntityList();
+        String toPort = qucikReceiptEntity.getToPort();
+        String warehouseCode = qucikReceiptEntity.getWarehouseCode();
+        List<Receive> receiveList = new ArrayList<>();
+//        if (StringUtils.isEmpty(containerCode)) {
+//            return Result.error("快速入库,容器编码为空");
+//        }
+        if (StringUtils.isEmpty(warehouseCode)) {
+            return Result.error("悬臂库入库,仓库编码为空");
+        }
+        if (StringUtils.isEmpty(receiptEntityList)) {
+            return Result.error("悬臂库入库,入库信息为空");
+        }
+        Container container = containerService.createLSContainer(warehouseCode);
+        if (container == null) {
+            return Result.error("悬臂库入库,没有找到容器" + containerCode);
+        }
+        containerCode = container.getCode();
+//        Port port = portService.getPortByCode(toPort, warehouseCode);
+//        if (port != null) {
+//            int portType = Integer.parseInt(port.getType());
+//            if (portType == QuantityConstant.PORT_TYPE_OUT) {
+//                return Result.error("快速入库,不能选择出库口" + toPort);
+//            }
+//        }
+        for (ReceiptEntity receiptEntity : receiptEntityList) {
+            if(receiptEntity.getQty().compareTo(BigDecimal.ZERO) == 0) {
+                continue;
+            }
+            if(receiptEntity.getQty().compareTo(BigDecimal.ONE) != 0) {
+                throw new JeecgBootException("悬臂库入库,入库数量只能是1");
+            }
+        }
+        if (receiptEntityList.size() > 1) {
+            throw new JeecgBootException("悬臂库入库,每次只能入1个");
+        }
+        String receiptType = QuantityConstant.RECEIPT_BILL_TYPE_QTR;
+        String remark = "快速入库";
+        ReceiptHeader receiptHeader = new ReceiptHeader();
+        receiptHeader.setWarehouseCode(warehouseCode);
+        receiptHeader.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
+        receiptHeader.setType(receiptType);
+        receiptHeader.setRemark(remark);
+        Result result = receiptHeaderService.saveReceiptHeader(receiptHeader);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException("快速入库, 创建入库单头失败" + result.getMessage());
+        }
+        for (ReceiptEntity receiptEntity : receiptEntityList) {
+            BigDecimal qty = receiptEntity.getQty();
+            String materialCode = receiptEntity.getMaterialCode();
+            if (StringUtils.isEmpty(materialCode)) {
+                throw new JeecgBootException("快速入库, 物料编码为空");
+            }
+            if (qty == null) {
+                throw new JeecgBootException("快速入库, 数量必须填写");
+            }
+            if (qty.compareTo(BigDecimal.ZERO) <= 0) {
+                throw new JeecgBootException("快速入库, 数量必须大于0");
+            }
+            ReceiptDetail receiptDetail = new ReceiptDetail();
+            receiptDetail.setWarehouseCode(warehouseCode);
+            receiptDetail.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
+            receiptDetail.setReceiptCode(receiptHeader.getCode());
+            receiptDetail.setReceiptId(receiptHeader.getId());
+            receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
+            receiptDetail.setQty(qty);
+            Material material = materialService.getMaterialByCode(materialCode);
+            if (material == null) {
+                throw new JeecgBootException("快速入库, 获取物料:" + materialCode + " 信息失败");
+            }
+            receiptDetail.setInventoryStatus(QuantityConstant.QUALITY_GOOD);
+            receiptDetail.setMaterialCode(materialCode);
+            receiptDetail.setMaterialName(material.getName());
+            receiptDetail.setMaterialSpec(material.getSpec());
+            receiptDetail.setMaterialUnit(material.getUnit());
+            success = receiptDetailService.save(receiptDetail);
+            if (!success) {
+                throw new JeecgBootException("快速入库, 保存入库单详情失败");
+            }
+
+            Receive receive = new Receive();
+            receive.setId(receiptDetail.getId());
+            receive.setContainerCode(containerCode);
+            receive.setMaterialCode(materialCode);
+            receive.setMaterialName(receiptDetail.getMaterialName());
+            receive.setMaterialSpec(receiptDetail.getMaterialSpec());
+            receive.setMaterialUnit(receiptDetail.getMaterialUnit());
+            receive.setInventoryStatus(receiptDetail.getInventoryStatus());
+            receive.setQty(receiptDetail.getQty());
+            receive.setTaskQty(receiptDetail.getQty());
+            receiveList.add(receive);
+        }
+        result = receiveService.receiving(receiveList, warehouseCode);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException(result.getMessage());
+        }
+        ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getUnCompleteReceiptContainerByCode(containerCode, warehouseCode);
+        if (receiptContainerHeader == null) {
+            throw new JeecgBootException(result.getMessage());
+        }
+        receiptContainerHeader.setToPort(toPort);
+        success = receiptContainerHeaderService.updateById(receiptContainerHeader);
+        if (!success) {
+            throw new JeecgBootException("快速入库,更新入库组盘头失败");
+        }
+        result = receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException(result.getMessage());
+        }
+//        TaskHeader taskHeader = (TaskHeader)result.getResult();
+//        if (taskHeader.getTaskType() == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) {
+//            if (port == null) {
+//                throw new JeecgBootException("快速入库, 生成补充任务时必须有入库口");
+//            }
+//        }
+        if (!receiptHeaderService.updateReceiptHeader(receiptHeader.getId())) {
+            throw new JeecgBootException("快速入库, 更新入库表单头失败");
+        }
+        return Result.OK("快速入库成功");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result stageingReceipt(StageingReceiptEntity stageingReceiptEntity) {
+        boolean success = false;
+        String containerCode = stageingReceiptEntity.getContainerCode();
+        List<ReceiptEntity> receiptEntityList = stageingReceiptEntity.getReceiptEntityList();
+        String fromPort = stageingReceiptEntity.getFromPort();
+        String toPort = stageingReceiptEntity.getToPort();
+        toPort = "P1001";
+        String warehouseCode = stageingReceiptEntity.getWarehouseCode();
+        List<Receive> receiveList = new ArrayList<>();
+        if (StringUtils.isEmpty(containerCode)) {
+            return Result.error("快速入库,容器编码为空");
+        }
+        if (StringUtils.isEmpty(warehouseCode)) {
+            return Result.error("快速入库,仓库编码为空");
+        }
+        if (StringUtils.isEmpty(receiptEntityList)) {
+            return Result.error("快速入库,入库信息为空");
+        }
+        Container container = containerService.getContainerByCode(containerCode, warehouseCode);
+        if (container == null) {
+            return Result.error("快速入库,没有找到容器" + containerCode);
+        }
+        Port port = portService.getPortByCode(toPort, warehouseCode);
+        if (port != null) {
+            int portType = Integer.parseInt(port.getType());
+            if (portType == QuantityConstant.PORT_TYPE_OUT) {
+                return Result.error("快速入库,不能选择出库口" + toPort);
+            }
+        }
+        String receiptType = QuantityConstant.RECEIPT_BILL_TYPE_QTR;
+        String remark = "快速入库";
+        ReceiptHeader receiptHeader = new ReceiptHeader();
+        receiptHeader.setWarehouseCode(warehouseCode);
+        receiptHeader.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
+        receiptHeader.setType(receiptType);
+        receiptHeader.setRemark(remark);
+        Result result = receiptHeaderService.saveReceiptHeader(receiptHeader);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException("快速入库, 创建入库单头失败" + result.getMessage());
+        }
+        for (ReceiptEntity receiptEntity : receiptEntityList) {
+            BigDecimal qty = receiptEntity.getQty();
+            String materialCode = receiptEntity.getMaterialCode();
+            if (StringUtils.isEmpty(materialCode)) {
+                throw new JeecgBootException("快速入库, 物料编码为空");
+            }
+            if (qty == null) {
+                throw new JeecgBootException("快速入库, 数量必须填写");
+            }
+            if (qty.compareTo(BigDecimal.ZERO) <= 0) {
+                throw new JeecgBootException("快速入库, 数量必须大于0");
+            }
+            ReceiptDetail receiptDetail = new ReceiptDetail();
+            receiptDetail.setWarehouseCode(warehouseCode);
+            receiptDetail.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);
+            receiptDetail.setReceiptCode(receiptHeader.getCode());
+            receiptDetail.setReceiptId(receiptHeader.getId());
+            receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
+            receiptDetail.setQty(qty);
+            Material material = materialService.getMaterialByCode(materialCode);
+            if (material == null) {
+                throw new JeecgBootException("快速入库, 获取物料:" + materialCode + " 信息失败");
+            }
+            receiptDetail.setInventoryStatus(QuantityConstant.QUALITY_GOOD);
+            receiptDetail.setMaterialCode(materialCode);
+            receiptDetail.setMaterialName(material.getName());
+            receiptDetail.setMaterialSpec(material.getSpec());
+            receiptDetail.setMaterialUnit(material.getUnit());
+            success = receiptDetailService.save(receiptDetail);
+            if (!success) {
+                throw new JeecgBootException("快速入库, 保存入库单详情失败");
+            }
+
+            Receive receive = new Receive();
+            receive.setId(receiptDetail.getId());
+            receive.setContainerCode(containerCode);
+            receive.setMaterialCode(materialCode);
+            receive.setMaterialName(receiptDetail.getMaterialName());
+            receive.setMaterialSpec(receiptDetail.getMaterialSpec());
+            receive.setMaterialUnit(receiptDetail.getMaterialUnit());
+            receive.setInventoryStatus(receiptDetail.getInventoryStatus());
+            receive.setQty(receiptDetail.getQty());
+            receive.setTaskQty(receiptDetail.getQty());
+            receiveList.add(receive);
+        }
+        result = receiveService.receiving(receiveList, warehouseCode);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException(result.getMessage());
+        }
+        ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getUnCompleteReceiptContainerByCode(containerCode, warehouseCode);
+        if (receiptContainerHeader == null) {
+            throw new JeecgBootException(result.getMessage());
+        }
+        receiptContainerHeader.setToPort(toPort);
+        success = receiptContainerHeaderService.updateById(receiptContainerHeader);
+        if (!success) {
+            throw new JeecgBootException("快速入库,更新入库组盘头失败");
+        }
+        result = receiptContainerHeaderService.createReceiptTask(receiptContainerHeader, warehouseCode);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException(result.getMessage());
+        }
+        TaskHeader taskHeader = (TaskHeader)result.getResult();
+        if (taskHeader.getTaskType() == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) {
+            if (port == null) {
+                throw new JeecgBootException("快速入库, 生成补充任务时必须有入库口");
+            }
+        }
+        if (!receiptHeaderService.updateReceiptHeader(receiptHeader.getId())) {
+            throw new JeecgBootException("快速入库, 更新入库表单头失败");
+        }
+
+        AgvTask agvTask = new AgvTask();
+        agvTask.setWarehouseCode(warehouseCode);
+        agvTask.setTaskType(QuantityConstant.AGV_TYPE_TAKE_AND_RELEASE);
+        agvTask.setStatus(QuantityConstant.AGV_TASK_STATUS_BUILD);
+        agvTask.setContainerCode(containerCode);
+        agvTask.setFromPort(fromPort);
+        agvTask.setToPort(toPort);
+        agvTask.setPriority(10);
+        result = agvTaskService.addAgvTask(agvTask, warehouseCode);
+        log.info(String.format("AutoCreateAgvTask 生成AGV任务执行:" + result.getMessage()));
+        return Result.OK("快速入库成功");
+    }
+
     /**
      * 切换任务
      * 1. 判断满足切换任务的条件
@@ -4587,7 +4844,16 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
         String receiptType = QuantityConstant.SHIPMENT_BILL_TYPE_QTC;
         String remark = "快速出库";
-        String zoneCode = "L";
+        String zoneCode = "A";
+        for (ReceiptEntity receiptEntity : receiptEntityList) {
+            BigDecimal qty = receiptEntity.getQty();
+            String materialCode = receiptEntity.getMaterialCode();
+            List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByMaterialCode(materialCode, warehouseCode);
+            if (CollectionUtils.isNotEmpty(inventoryDetailList)) {
+                InventoryDetail inventoryDetail = inventoryDetailList.get(0);
+                zoneCode = inventoryDetail.getZoneCode();
+            }
+        }
         ShipmentHeader shipmentHeader = new ShipmentHeader();
         shipmentHeader.setWarehouseCode(warehouseCode);
         shipmentHeader.setCompanyCode(QuantityConstant.DEFAULT_COMPANY);