diff --git a/ant-design-vue-jeecg/src/api/api.js b/ant-design-vue-jeecg/src/api/api.js
index be3b7fd..a78b413 100644
--- a/ant-design-vue-jeecg/src/api/api.js
+++ b/ant-design-vue-jeecg/src/api/api.js
@@ -139,6 +139,8 @@ export const execute = (params) => postAction('/task/taskHeader/execute', params
 export const cancelTask = (params) => postAction('/task/taskHeader/cancelTask?ids=' + params, params);
 //自动配盘
 export const autoCombination = (params) => postAction('/shipment/shipmentCombination/autoCombination', params);
+//自动出库
+export const autoShipment = (params) => postAction('/shipment/shipmentHeader/autoShipment', params);
 //创建出库任务
 export const createShipmentTask = (params) => postAction('/shipment/shipmentCombination/createShipmentTask', params);
 //批量创建出库任务
diff --git a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue
index 2e18a95..38d876a 100644
--- a/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue
+++ b/ant-design-vue-jeecg/src/views/system/shipment/ShipmentHeaderList.vue
@@ -196,6 +196,8 @@
           </a-popconfirm>
           <a v-if="((record.firstStatus >= 15 && record.firstStatus != '20' && record.lastStatus <= 200))
             || (flowOff == '0' && record.lastStatus <= 200)" @click="autoShipmentCombine(record)" v-has="'shipmentHeader:autoShipmentCombine'"><a-button type="primary">自动配盘</a-button> <a-divider type="vertical"/></a>
+          <a v-if="((record.firstStatus >= 15 && record.firstStatus != '20' && record.lastStatus < 800))
+            || (flowOff == '0' && record.lastStatus < 800)" @click="openAutoShipmentCombine(record)" v-has="'shipmentHeader:autoShipment'"><a-button type="primary">自动出库</a-button> <a-divider type="vertical"/></a>
           <a-dropdown>
             <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
             <a-menu slot="overlay">
@@ -223,8 +225,9 @@
     </a-tabs>
 
     <shipmentHeader-modal ref="modalForm" @ok="modalFormOk"></shipmentHeader-modal>
-    <shipment-audit-modal ref="auditForm"></shipment-audit-modal>
-    <flow-process ref="porcessForm"></flow-process>
+    <shipment-audit-modal ref="auditForm" @ok="modalFormOk"></shipment-audit-modal>
+    <flow-process ref="porcessForm" @ok="modalFormOk"></flow-process>
+    <auto-shipment-select-modal ref="autoShipmentForm" @ok="modalFormOk"></auto-shipment-select-modal>
   </a-card>
 </template>
 
@@ -240,15 +243,17 @@ import {getCompanyList, backErpShipment} from '@/api/api'
 import {getShipmentTypeList} from '@/api/api'
 import {getCustomerList} from '@/api/api'
 import {autoCombination} from '@/api/api'
-import {createShipmentAuditFlow, getDocumentAduitFlow, mergeShipment} from '@/api/api'
+import {createShipmentAuditFlow, getDocumentAduitFlow, mergeShipment, autoShipment} from '@/api/api'
 import store from '@/store'
 import ShipmentAuditModal from "./modules/ShipmentAuditModal";
 import FlowProcess from "../flow/FlowProcess";
+import AutoShipmentSelectModal from "@views/system/shipment/modules/AutoShipmentSelectModal";
 
 export default {
   name: "ShipmentHeaderList",
   mixins: [JeecgListMixin],
   components: {
+    AutoShipmentSelectModal,
     ShipmentAuditModal,
     ShipmentDetailList,
     ShipmentHeaderModal,
@@ -557,6 +562,10 @@ export default {
       })
       return actions.join('')
     },
+    openAutoShipmentCombine(record) {
+      this.$refs.autoShipmentForm.title = "自动出库";
+      this.$refs.autoShipmentForm.edit(record);
+    },
     autoShipmentCombine(record) {
       this.loading = true;
       autoCombination(record).then((res) => {
@@ -569,6 +578,18 @@ export default {
         this.searchQuery();
       });
     },
+    autoShipment(record) {
+      this.loading = true;
+      autoShipment(record).then((res) => {
+        if (res.success) {
+          this.$message.success(res.message);
+        } else {
+          this.$message.warning(res.message)
+        }
+        this.loading = false;
+        this.searchQuery();
+      });
+    },
     loadData(arg) {
       if (!this.url.list) {
         this.$message.error("请设置url.list属性!")
diff --git a/ant-design-vue-jeecg/src/views/system/shipment/modules/AutoShipmentSelectModal.vue b/ant-design-vue-jeecg/src/views/system/shipment/modules/AutoShipmentSelectModal.vue
new file mode 100644
index 0000000..9cdf356
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/shipment/modules/AutoShipmentSelectModal.vue
@@ -0,0 +1,107 @@
+<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-col :span="24">
+              <a-form-model-item label="出库口" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toPort">
+                <a-input v-model="model.toPort" placeholder="请输入出库口" style="width: 100%"/>
+              </a-form-model-item>
+            </a-col>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+
+import {httpAction} from '@/api/manage'
+import {validateDuplicateValue} from '@/utils/util'
+import {autoShipment} from '@/api/api'
+import {selectSortingPort} from '@/api/api'
+
+export default {
+  name: "AutoShipmentSelectModal",
+  components: {},
+  props: {
+    mainId: {
+      type: String,
+      required: false,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      portList: [],
+      flag:'0',
+      shipmentContainerHeaderList:[],
+      title: "操作",
+      width: 500,
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: {span: 24},
+        sm: {span: 5},
+      },
+      wrapperCol: {
+        xs: {span: 24},
+        sm: {span: 16},
+      },
+
+      confirmLoading: false,
+      validatorRules: {},
+      url: {
+        createTask: "/shipment/shipmentContainerHeader/createShipmentTask",
+      }
+
+    }
+  },
+  created() {
+    //备份model原始值
+    this.modelDefault = JSON.parse(JSON.stringify(this.model));
+  },
+  methods: {
+    add() {
+      this.edit(this.modelDefault);
+    },
+    edit(record) {
+      this.model = Object.assign({}, record);
+      this.visible = true;
+    },
+    close() {
+      this.$emit('close');
+      this.visible = false;
+      this.$refs.form.clearValidate();
+    },
+    handleOk() {
+      const that = this;
+      this.confirmLoading = true;
+      autoShipment(this.model).then((res) => {
+        if (res.success) {
+          this.$message.success(res.message);
+        } else {
+          this.$message.warning(res.message)
+        }
+        this.confirmLoading = false;
+        that.close();
+        that.$emit('ok');
+      });
+    },
+    handleCancel() {
+      this.close()
+    },
+
+  }
+}
+</script>
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
index bf56550..40fadd4 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/IHuahengMultiHandlerService.java
@@ -36,6 +36,8 @@ public interface IHuahengMultiHandlerService {
 
     Result autoCombination(String shipmentCode, String warehouseCode);
 
+    Result autoShipment(String shipmentCode, String toPort, String warehouseCode);
+
     Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode, long shipmentOrder, int sequence, int sequenceNumber);
 
     Result callBox(CallBoxBean bean, String warehouseCode);
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
index 70c0c6d..e9bd497 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/service/impl/HuahengMultiHandlerServiceImpl.java
@@ -25,6 +25,7 @@ import org.jeecg.modules.wms.shipment.shipmentHeader.entity.CombinationParam;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;
 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService;
+import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
 import org.springframework.scheduling.annotation.Async;
@@ -49,6 +50,9 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem
     private IShipmentCombinationService shipmentCombinationService;
 
     @Resource
+    private IShipmentHeaderService shipmentHeaderService;
+
+    @Resource
     private IShipmentDetailService shipmentDetailService;
 
     @Resource
@@ -176,6 +180,18 @@ public class HuahengMultiHandlerServiceImpl extends HuahengBaseController implem
     }
 
     @Override
+    public Result autoShipment(String shipmentCode, String toPort, String warehouseCode) {
+        Result result = handleMultiProcess("combination", new MultiProcessListener() {
+            @Override
+            public Result<?> doProcess() {
+                Result result = shipmentHeaderService.autoShipment(shipmentCode, toPort, warehouseCode);
+                return result;
+            }
+        });
+        return result;
+    }
+
+    @Override
     public Result createShipmentTask(ShipmentContainerHeader shipmentContainerHeader, String warehouseCode, long shipmentOrder, int sequence, int sequenceNumber) {
         Result result = handleMultiProcess("createShipmentTask", new MultiProcessListener() {
             @Override
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java
index 78a03bd..0dfd7c5 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/controller/ShipmentHeaderController.java
@@ -398,4 +398,16 @@ public class ShipmentHeaderController extends JeecgController<ShipmentHeader, IS
         Result result = huahengMultiHandlerService.callBox(bean, warehouseCode);
         return result;
     }
+
+    @AutoLog(value = "快速出库")
+    @ApiOperation(value = "快速出库", notes = "快速出库")
+    @PostMapping("/autoShipment")
+    @ResponseBody
+    public Result<TaskHeader> autoShipment(@RequestBody ShipmentHeader shipmentHeader, HttpServletRequest req) {
+        String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
+        String toPort = shipmentHeader.getToPort();
+        String shipmentCode = shipmentHeader.getCode();
+        Result result = huahengMultiHandlerService.autoShipment(shipmentCode, toPort, warehouseCode);
+        return result;
+    }
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/entity/ShipmentHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/entity/ShipmentHeader.java
index fadc650..76e9618 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/entity/ShipmentHeader.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/entity/ShipmentHeader.java
@@ -1,18 +1,19 @@
 package org.jeecg.modules.wms.shipment.shipmentHeader.entity;
 
 import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
 import java.util.Date;
+
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import org.jeecgframework.poi.excel.annotation.Excel;
-import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.jeecg.common.aspect.annotation.Dict;
+
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 /**
  * @Description: 出库单
@@ -80,6 +81,9 @@ public class ShipmentHeader implements Serializable {
     @Excel(name = "出库单备注", width = 15)
     @ApiModelProperty(value = "出库单备注")
     private String remark;
+    /** 出库口 */
+    @TableField(exist = false)
+    private String toPort;
     /** 备用字段1 */
     @Excel(name = "备用字段1", width = 15)
     @ApiModelProperty(value = "备用字段1")
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java
index 6cd53a4..672c65c 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/shipment/shipmentHeader/service/IShipmentHeaderService.java
@@ -42,4 +42,6 @@ public interface IShipmentHeaderService extends IService<ShipmentHeader> {
     boolean updateFirstStatusAndLastStatusById(Integer firstStatus, Integer lastStatus, int id);
 
     public Result<Object> mergeShipment(List<ShipmentHeader> shipmentHeaderList);
+
+    Result autoShipment(String shipmentCode, String toPort, String warehouseCode);
 }
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 e7403b6..e65b56a 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
@@ -15,10 +15,17 @@ import org.jeecg.common.exception.JeecgBootException;
 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.port.entity.Port;
+import org.jeecg.modules.wms.config.port.service.IPortService;
 import org.jeecg.modules.wms.config.shipmentType.entity.ShipmentType;
 import org.jeecg.modules.wms.config.shipmentType.service.IShipmentTypeService;
+import org.jeecg.modules.wms.framework.service.IHuahengMultiHandlerService;
 import org.jeecg.modules.wms.inventory.inventoryHeader.service.IInventoryDetailService;
+import org.jeecg.modules.wms.shipment.shipmentCombination.service.IShipmentCombinationService;
+import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerDetail;
+import org.jeecg.modules.wms.shipment.shipmentContainerHeader.entity.ShipmentContainerHeader;
 import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerDetailService;
+import org.jeecg.modules.wms.shipment.shipmentContainerHeader.service.IShipmentContainerHeaderService;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;
 import org.jeecg.modules.wms.shipment.shipmentHeader.mapper.ShipmentDetailMapper;
@@ -26,6 +33,7 @@ import org.jeecg.modules.wms.shipment.shipmentHeader.mapper.ShipmentHeaderMapper
 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService;
 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService;
 import org.jeecg.modules.wms.shipment.shipmentHeaderHistory.service.IShipmentHeaderHistoryService;
+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;
@@ -86,6 +94,14 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
 
     @Resource
     private IShipmentHeaderHistoryService shipmentHeaderHistoryService;
+    @Resource
+    private IShipmentCombinationService shipmentCombinationService;
+    @Resource
+    private IShipmentContainerHeaderService shipmentContainerHeaderService;
+    @Resource
+    private IHuahengMultiHandlerService huahengMultiHandlerService;
+    @Resource
+    private IPortService portService;
 
     @Override
     @Transactional
@@ -329,4 +345,74 @@ public class ShipmentHeaderServiceImpl extends ServiceImpl<ShipmentHeaderMapper,
         }
         return Result.OK("合并成功");
     }
+
+    @Override
+    @Transactional(rollbackFor = JeecgBootException.class)
+    public Result autoShipment(String shipmentCode, String toPort, String warehouseCode) {
+        if (StringUtils.isEmpty(shipmentCode)) {
+            return Result.error("自动出库, 出库单编码为空");
+        }
+        if (StringUtils.isEmpty(toPort)) {
+            return Result.error("自动出库, 出库口为空");
+        }
+        if (StringUtils.isEmpty(warehouseCode)) {
+            return Result.error("自动出库, 仓库编码为空");
+        }
+        Port port = portService.getPortByCode(toPort, warehouseCode);
+        if (port == null) {
+            return Result.error("自动出库, 出库口为空");
+        }
+        int type = Integer.parseInt(port.getType());
+        if (type == QuantityConstant.PORT_TYPE_IN) {
+            return Result.error("自动出库, 不能选择入库口来出库");
+        }
+        Result result = shipmentCombinationService.autoCombination(shipmentCode, warehouseCode);
+        if (!result.isSuccess()) {
+            throw new JeecgBootException("自动出库," + result.getMessage());
+        }
+        List<ShipmentContainerDetail> shipmentContainerDetailList = shipmentContainerDetailService.getShipmentContainerDetailListByShipmentCode(shipmentCode);
+        if (shipmentContainerDetailList == null) {
+            throw new JeecgBootException("自动出库, 没有找到出库配盘详情");
+        }
+        List<Integer> shipmentContainerIdList =
+            shipmentContainerDetailList.stream().map(ShipmentContainerDetail::getShipmentContainerId).distinct().collect(Collectors.toList());
+        long shipmentOrder = System.currentTimeMillis();
+        int sequenceNumber = shipmentContainerIdList.size();
+        int sequence = 0;
+        for (int shipmentContainerId : shipmentContainerIdList) {
+            sequence++;
+            ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(shipmentContainerId);
+            if (shipmentContainerHeader == null) {
+                throw new JeecgBootException("自动出库, 没有找到出库表头:" + shipmentContainerId);
+            }
+            shipmentContainerHeader.setToPort(toPort);
+            boolean success = shipmentContainerHeaderService.updateById(shipmentContainerHeader);
+            if (!success) {
+                throw new JeecgBootException("自动出库, 更新出库组盘头失败");
+            }
+            result = huahengMultiHandlerService.createShipmentTask(shipmentContainerHeader, warehouseCode, shipmentOrder, sequence, sequenceNumber);
+            if (!result.isSuccess()) {
+                throw new JeecgBootException("自动出库, " + result.getMessage());
+            }
+            String containerCode = shipmentContainerHeader.getContainerCode();
+            if (StringUtils.isEmpty(containerCode)) {
+                throw new JeecgBootException("自动出库, 容器号为空");
+            }
+            TaskHeader taskHeader = taskHeaderService.getUnCompleteTaskByContainerCode(containerCode, warehouseCode);
+            if (taskHeader == null) {
+                throw new JeecgBootException("自动出库, 没有找到容器号对应任务" + containerCode);
+            }
+            if (taskHeader.getTaskType() == QuantityConstant.TASK_TYPE_WHOLESHIPMENT) {
+                if (type != QuantityConstant.PORT_TYPE_OUT) {
+                    throw new JeecgBootException("自动出库, 出库口和整出任务不匹配" + toPort);
+                }
+            }
+            if (taskHeader.getTaskType() == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT) {
+                if (type != QuantityConstant.PORT_TYPE_PICK) {
+                    throw new JeecgBootException("自动出库, 出库口和分拣任务不匹配" + toPort);
+                }
+            }
+        }
+        return Result.OK("自动出库成功");
+    }
 }
diff --git a/huaheng-wms-core/src/main/resources/application-dev.yml b/huaheng-wms-core/src/main/resources/application-dev.yml
index 7bcba6a..35b729a 100644
--- a/huaheng-wms-core/src/main/resources/application-dev.yml
+++ b/huaheng-wms-core/src/main/resources/application-dev.yml
@@ -138,7 +138,7 @@ spring:
         master:
           url: jdbc:log4jdbc:mysql://localhost:3306/wms4?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
           username: root
-          password: 123456
+          password: HHsoft123.
           driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
           # sqlserver 数据源配置
           # url: jdbc:sqlserver://172.16.29.88:1433;DatabaseName=wms4;encrypt=false;SelectMethod=cursor;
@@ -161,7 +161,7 @@ spring:
     database: 0
     host: 127.0.0.1
     port: 6379
-    password:
+    password: 123456
     timeout: 5000 #超时时间ms
     lettuce:
       pool:
@@ -283,7 +283,7 @@ jeecg:
   #分布式锁配置
   redisson:
     address: 127.0.0.1:6379
-    password:
+    password: 123456
     type: STANDALONE
     enabled: true
 #cas单点登录