diff --git a/ant-design-vue-jeecg/src/views/system/config/AgvPortList.vue b/ant-design-vue-jeecg/src/views/system/config/AgvPortList.vue
new file mode 100644
index 0000000..fcb31b4
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/config/AgvPortList.vue
@@ -0,0 +1,227 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="编码">
+              <a-input placeholder="请输入编码" v-model="queryParam.code"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="名称">
+              <a-input placeholder="请输入名称" v-model="queryParam.name"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('AGV点位')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <!-- 高级查询区域 -->
+      <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        :scroll="{x:true}"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        class="j-table-force-nowrap"
+        @change="handleTableChange">
+
+        <template slot="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
+          <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            下载
+          </a-button>
+        </template>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleDetail(record)">详情</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+    <agv-port-modal ref="modalForm" @ok="modalFormOk"></agv-port-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import AgvPortModal from './modules/AgvPortModal'
+
+  export default {
+    name: 'AgvPortList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      AgvPortModal
+    },
+    data () {
+      return {
+        description: 'AGV点位管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'编码',
+            align:"center",
+            dataIndex: 'code'
+          },
+          {
+            title:'名称',
+            align:"center",
+            dataIndex: 'name'
+          },
+          {
+            title:'备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'创建人',
+            align:"center",
+            dataIndex: 'createBy'
+          },
+          {
+            title:'创建日期',
+            align:"center",
+            dataIndex: 'createTime'
+          },
+          {
+            title:'更新人',
+            align:"center",
+            dataIndex: 'updateBy'
+          },
+          {
+            title:'更新日期',
+            align:"center",
+            dataIndex: 'updateTime'
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/config/agvPort/list",
+          delete: "/config/agvPort/delete",
+          deleteBatch: "/config/agvPort/deleteBatch",
+          exportXlsUrl: "/config/agvPort/exportXls",
+          importExcelUrl: "config/agvPort/importExcel",
+          
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'string',value:'code',text:'编码',dictCode:''})
+        fieldList.push({type:'string',value:'name',text:'名称',dictCode:''})
+        fieldList.push({type:'string',value:'remark',text:'备注',dictCode:''})
+        fieldList.push({type:'string',value:'createBy',text:'创建人',dictCode:''})
+        fieldList.push({type:'datetime',value:'createTime',text:'创建日期'})
+        fieldList.push({type:'string',value:'updateBy',text:'更新人',dictCode:''})
+        fieldList.push({type:'datetime',value:'updateTime',text:'更新日期'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/config/modules/AgvPortForm.vue b/ant-design-vue-jeecg/src/views/system/config/modules/AgvPortForm.vue
new file mode 100644
index 0000000..8ae4882
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/config/modules/AgvPortForm.vue
@@ -0,0 +1,120 @@
+<template>
+  <a-spin :spinning="confirmLoading">
+    <j-form-container :disabled="formDisabled">
+      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="code">
+              <a-input v-model="model.code" placeholder="请输入编码"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="name">
+              <a-input v-model="model.name" placeholder="请输入名称"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+              <a-input v-model="model.remark" placeholder="请输入备注"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </j-form-container>
+  </a-spin>
+</template>
+
+<script>
+
+  import { httpAction, getAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+
+  export default {
+    name: 'AgvPortForm',
+    components: {
+    },
+    props: {
+      //表单禁用
+      disabled: {
+        type: Boolean,
+        default: false,
+        required: false
+      }
+    },
+    data () {
+      return {
+        model:{
+         },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+        confirmLoading: false,
+validatorRules: {
+        code: [
+            { required: true, message: '请输入编码!'},
+        ],
+        name: [
+            { required: true, message: '请输入名称!'},
+        ],
+},
+        url: {
+          add: "/config/agvPort/add",
+          edit: "/config/agvPort/edit",
+          queryById: "/config/agvPort/queryById"
+        }
+      }
+    },
+    computed: {
+      formDisabled(){
+        return this.disabled
+      },
+    },
+    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;
+      },
+      submitForm () {
+        const that = this;
+        // 触发表单验证
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+            })
+          }
+         
+        })
+      },
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/config/modules/AgvPortModal.Style#Drawer.vue b/ant-design-vue-jeecg/src/views/system/config/modules/AgvPortModal.Style#Drawer.vue
new file mode 100644
index 0000000..027cd77
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/config/modules/AgvPortModal.Style#Drawer.vue
@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <agv-port-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></agv-port-form>
+    <div class="drawer-footer">
+      <a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
+      <a-button v-if="!disableSubmit"  @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
+    </div>
+  </a-drawer>
+</template>
+
+<script>
+
+  import AgvPortForm from './AgvPortForm'
+
+  export default {
+    name: 'AgvPortModal',
+    components: {
+      AgvPortForm
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        });
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+  .drawer-footer{
+    position: absolute;
+    bottom: -8px;
+    width: 100%;
+    border-top: 1px solid #e8e8e8;
+    padding: 10px 16px;
+    text-align: right;
+    left: 0;
+    background: #fff;
+    border-radius: 0 0 2px 2px;
+  }
+</style>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/config/modules/AgvPortModal.vue b/ant-design-vue-jeecg/src/views/system/config/modules/AgvPortModal.vue
new file mode 100644
index 0000000..6baad78
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/config/modules/AgvPortModal.vue
@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <agv-port-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></agv-port-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import AgvPortForm from './AgvPortForm'
+  export default {
+    name: 'AgvPortModal',
+    components: {
+      AgvPortForm
+    },
+    data () {
+      return {
+        title:'',
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        })
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/task/AgvTaskList.vue b/ant-design-vue-jeecg/src/views/system/task/AgvTaskList.vue
new file mode 100644
index 0000000..20266be
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/task/AgvTaskList.vue
@@ -0,0 +1,271 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="任务类型">
+              <j-dict-select-tag placeholder="请选择任务类型" v-model="queryParam.taskType" dictCode="agv_task_type"/>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="容器编码">
+              <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input>
+            </a-form-item>
+          </a-col>
+          <template v-if="toggleSearchStatus">
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="状态">
+                <j-dict-select-tag placeholder="请选择状态" v-model="queryParam.status" dictCode="agv_task_status"/>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="起始点位">
+                <a-input placeholder="请输入起始点位" v-model="queryParam.fromPort"></a-input>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="7" :md="8" :sm="24">
+              <a-form-item label="目标点位">
+                <a-input placeholder="请输入目标点位" v-model="queryParam.toPort"></a-input>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '收起' : '展开' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('AGV任务')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <!-- 高级查询区域 -->
+      <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        :scroll="{x:true}"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        class="j-table-force-nowrap"
+        @change="handleTableChange">
+
+        <template slot="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
+          <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            下载
+          </a-button>
+        </template>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleDetail(record)">详情</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+    <agv-task-modal ref="modalForm" @ok="modalFormOk"></agv-task-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import AgvTaskModal from './modules/AgvTaskModal'
+  import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
+
+  export default {
+    name: 'AgvTaskList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      AgvTaskModal
+    },
+    data () {
+      return {
+        description: 'AGV任务管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'任务类型',
+            align:"center",
+            dataIndex: 'taskType_dictText'
+          },
+          {
+            title:'容器编码',
+            align:"center",
+            dataIndex: 'containerCode'
+          },
+          {
+            title:'小车编码',
+            align:"center",
+            dataIndex: 'carno'
+          },
+          {
+            title:'优先级',
+            align:"center",
+            dataIndex: 'priority'
+          },
+          {
+            title:'状态',
+            align:"center",
+            dataIndex: 'status_dictText'
+          },
+          {
+            title:'起始点位',
+            align:"center",
+            dataIndex: 'fromPort'
+          },
+          {
+            title:'目标点位',
+            align:"center",
+            dataIndex: 'toPort'
+          },
+          {
+            title:'创建人',
+            align:"center",
+            dataIndex: 'createBy'
+          },
+          {
+            title:'创建日期',
+            align:"center",
+            dataIndex: 'createTime'
+          },
+          {
+            title:'更新人',
+            align:"center",
+            dataIndex: 'updateBy'
+          },
+          {
+            title:'更新日期',
+            align:"center",
+            dataIndex: 'updateTime'
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/task/agvTask/list",
+          delete: "/task/agvTask/delete",
+          deleteBatch: "/task/agvTask/deleteBatch",
+          exportXlsUrl: "/task/agvTask/exportXls",
+          importExcelUrl: "task/agvTask/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'string',value:'warehouseCode',text:'仓库编码',dictCode:''})
+        fieldList.push({type:'string',value:'zoneCode',text:'库区',dictCode:''})
+        fieldList.push({type:'int',value:'taskType',text:'任务类型',dictCode:'agv_task_type'})
+        fieldList.push({type:'string',value:'containerCode',text:'容器编码',dictCode:''})
+        fieldList.push({type:'string',value:'carno',text:'小车编码',dictCode:''})
+        fieldList.push({type:'int',value:'priority',text:'优先级',dictCode:''})
+        fieldList.push({type:'int',value:'status',text:'状态',dictCode:'agv_task_status'})
+        fieldList.push({type:'string',value:'fromPort',text:'起始点位',dictCode:''})
+        fieldList.push({type:'string',value:'toPort',text:'目标点位',dictCode:''})
+        fieldList.push({type:'string',value:'createBy',text:'创建人',dictCode:''})
+        fieldList.push({type:'datetime',value:'createTime',text:'创建日期'})
+        fieldList.push({type:'string',value:'updateBy',text:'更新人',dictCode:''})
+        fieldList.push({type:'datetime',value:'updateTime',text:'更新日期'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/task/modules/AgvTaskForm.vue b/ant-design-vue-jeecg/src/views/system/task/modules/AgvTaskForm.vue
new file mode 100644
index 0000000..bd665e3
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/task/modules/AgvTaskForm.vue
@@ -0,0 +1,114 @@
+<template>
+  <a-spin :spinning="confirmLoading">
+    <j-form-container :disabled="formDisabled">
+      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="容器编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="containerCode">
+              <a-input v-model="model.containerCode" placeholder="请输入容器编码"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="起始点位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fromPort">
+              <a-input v-model="model.fromPort" placeholder="请输入起始点位"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="目标点位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="toPort">
+              <a-input v-model="model.toPort" placeholder="请输入目标点位"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </j-form-container>
+  </a-spin>
+</template>
+
+<script>
+
+  import { httpAction, getAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+
+  export default {
+    name: 'AgvTaskForm',
+    components: {
+    },
+    props: {
+      //表单禁用
+      disabled: {
+        type: Boolean,
+        default: false,
+        required: false
+      }
+    },
+    data () {
+      return {
+        model:{
+         },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+        confirmLoading: false,
+validatorRules: {
+},
+        url: {
+          add: "/task/agvTask/add",
+          edit: "/task/agvTask/edit",
+          queryById: "/task/agvTask/queryById"
+        }
+      }
+    },
+    computed: {
+      formDisabled(){
+        return this.disabled
+      },
+    },
+    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;
+      },
+      submitForm () {
+        const that = this;
+        // 触发表单验证
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+            })
+          }
+
+        })
+      },
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/task/modules/AgvTaskModal.Style#Drawer.vue b/ant-design-vue-jeecg/src/views/system/task/modules/AgvTaskModal.Style#Drawer.vue
new file mode 100644
index 0000000..7769129
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/task/modules/AgvTaskModal.Style#Drawer.vue
@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <agv-task-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></agv-task-form>
+    <div class="drawer-footer">
+      <a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
+      <a-button v-if="!disableSubmit"  @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
+    </div>
+  </a-drawer>
+</template>
+
+<script>
+
+  import AgvTaskForm from './AgvTaskForm'
+
+  export default {
+    name: 'AgvTaskModal',
+    components: {
+      AgvTaskForm
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        });
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+  .drawer-footer{
+    position: absolute;
+    bottom: -8px;
+    width: 100%;
+    border-top: 1px solid #e8e8e8;
+    padding: 10px 16px;
+    text-align: right;
+    left: 0;
+    background: #fff;
+    border-radius: 0 0 2px 2px;
+  }
+</style>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/task/modules/AgvTaskModal.vue b/ant-design-vue-jeecg/src/views/system/task/modules/AgvTaskModal.vue
new file mode 100644
index 0000000..a26c6c8
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/task/modules/AgvTaskModal.vue
@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <agv-task-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></agv-task-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import AgvTaskForm from './AgvTaskForm'
+  export default {
+    name: 'AgvTaskModal',
+    components: {
+      AgvTaskForm
+    },
+    data () {
+      return {
+        title:'',
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        })
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/controller/AgvPortController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/controller/AgvPortController.java
new file mode 100644
index 0000000..40e3cd8
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/controller/AgvPortController.java
@@ -0,0 +1,148 @@
+package org.jeecg.modules.wms.config.agvPort.controller;
+
+import java.util.Arrays;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.wms.config.agvPort.entity.AgvPort;
+import org.jeecg.modules.wms.config.agvPort.service.IAgvPortService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @Description: AGV点位
+ * @Author:      jeecg-boot
+ * @Date:        2023-02-01
+ * @Version:     V1.0
+ */
+@Api(tags = "AGV点位")
+@RestController
+@RequestMapping("/config/agvPort")
+@Slf4j
+public class AgvPortController extends JeecgController<AgvPort, IAgvPortService> {
+    @Autowired
+    private IAgvPortService agvPortService;
+
+    /**
+     * 分页列表查询
+     * @param  agvPort
+     * @param  pageNo
+     * @param  pageSize
+     * @param  req
+     * @return
+     */
+    // @AutoLog(value = "AGV点位-分页列表查询")
+    @ApiOperation(value = "AGV点位-分页列表查询", notes = "AGV点位-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<AgvPort>> queryPageList(AgvPort agvPort, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
+        QueryWrapper<AgvPort> queryWrapper = QueryGenerator.initQueryWrapper(agvPort, req.getParameterMap());
+        Page<AgvPort> page = new Page<AgvPort>(pageNo, pageSize);
+        IPage<AgvPort> pageList = agvPortService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     * @param  agvPort
+     * @return
+     */
+    @AutoLog(value = "AGV点位-添加")
+    @ApiOperation(value = "AGV点位-添加", notes = "AGV点位-添加")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody AgvPort agvPort) {
+        agvPortService.save(agvPort);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     * @param  agvPort
+     * @return
+     */
+    @AutoLog(value = "AGV点位-编辑")
+    @ApiOperation(value = "AGV点位-编辑", notes = "AGV点位-编辑")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody AgvPort agvPort) {
+        agvPortService.updateById(agvPort);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     * @param  id
+     * @return
+     */
+    @AutoLog(value = "AGV点位-通过id删除")
+    @ApiOperation(value = "AGV点位-通过id删除", notes = "AGV点位-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        agvPortService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     * @param  ids
+     * @return
+     */
+    @AutoLog(value = "AGV点位-批量删除")
+    @ApiOperation(value = "AGV点位-批量删除", notes = "AGV点位-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.agvPortService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 通过id查询
+     * @param  id
+     * @return
+     */
+    // @AutoLog(value = "AGV点位-通过id查询")
+    @ApiOperation(value = "AGV点位-通过id查询", notes = "AGV点位-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<AgvPort> queryById(@RequestParam(name = "id", required = true) String id) {
+        AgvPort agvPort = agvPortService.getById(id);
+        if (agvPort == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(agvPort);
+    }
+
+    /**
+     * 导出excel
+     * @param request
+     * @param agvPort
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, AgvPort agvPort) {
+        return super.exportXls(request, agvPort, AgvPort.class, "AGV点位");
+    }
+
+    /**
+     * 通过excel导入数据
+     * @param  request
+     * @param  response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, AgvPort.class);
+    }
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/entity/AgvPort.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/entity/AgvPort.java
new file mode 100644
index 0000000..e9ad3b1
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/entity/AgvPort.java
@@ -0,0 +1,64 @@
+package org.jeecg.modules.wms.config.agvPort.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: AGV点位
+ * @Author:      jeecg-boot
+ * @Date:        2023-02-01
+ * @Version:     V1.0
+ */
+@Data
+@TableName("agv_port")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "agv_port对象", description = "AGV点位")
+public class AgvPort implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private String id;
+    /** 仓库编码 */
+    @Excel(name = "仓库编码", width = 15)
+    @ApiModelProperty(value = "仓库编码")
+    private String warehouseCode;
+    /** 编码 */
+    @Excel(name = "编码", width = 15)
+    @ApiModelProperty(value = "编码")
+    private String code;
+    /** 名称 */
+    @Excel(name = "名称", width = 15)
+    @ApiModelProperty(value = "名称")
+    private String name;
+    /** 备注 */
+    @Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private String remark;
+    /** 创建人 */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /** 创建日期 */
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    /** 更新人 */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /** 更新日期 */
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/mapper/AgvPortMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/mapper/AgvPortMapper.java
new file mode 100644
index 0000000..2b47bda
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/mapper/AgvPortMapper.java
@@ -0,0 +1,15 @@
+package org.jeecg.modules.wms.config.agvPort.mapper;
+
+import org.jeecg.modules.wms.config.agvPort.entity.AgvPort;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: AGV点位
+ * @Author:      jeecg-boot
+ * @Date:        2023-02-01
+ * @Version:     V1.0
+ */
+public interface AgvPortMapper extends BaseMapper<AgvPort> {
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/mapper/xml/AgvPortMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/mapper/xml/AgvPortMapper.xml
new file mode 100644
index 0000000..9659ff8
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/mapper/xml/AgvPortMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.wms.config.mapper.AgvPortMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/service/IAgvPortService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/service/IAgvPortService.java
new file mode 100644
index 0000000..53a1cb6
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/service/IAgvPortService.java
@@ -0,0 +1,15 @@
+package org.jeecg.modules.wms.config.agvPort.service;
+
+import org.jeecg.modules.wms.config.agvPort.entity.AgvPort;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: AGV点位
+ * @Author:      jeecg-boot
+ * @Date:        2023-02-01
+ * @Version:     V1.0
+ */
+public interface IAgvPortService extends IService<AgvPort> {
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/service/impl/AgvPortServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/service/impl/AgvPortServiceImpl.java
new file mode 100644
index 0000000..15f63ac
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/agvPort/service/impl/AgvPortServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.wms.config.agvPort.service.impl;
+
+import org.jeecg.modules.wms.config.agvPort.entity.AgvPort;
+import org.jeecg.modules.wms.config.agvPort.mapper.AgvPortMapper;
+import org.jeecg.modules.wms.config.agvPort.service.IAgvPortService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: AGV点位
+ * @Author:      jeecg-boot
+ * @Date:        2023-02-01
+ * @Version:     V1.0
+ */
+@Service
+public class AgvPortServiceImpl extends ServiceImpl<AgvPortMapper, AgvPort> implements IAgvPortService {
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/MesTrYTask.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/MesTryTask.java
index 8211ec1..4a0505a 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/MesTrYTask.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/MesTryTask.java
@@ -24,7 +24,7 @@ import lombok.extern.slf4j.Slf4j;
  * @author 游杰
  */
 @Slf4j
-public class MesTrYTask implements Job {
+public class MesTryTask implements Job {
 
     @Resource
     private IMesService mesService;
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/RyTask.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/WcsTask.java
index 9a08dca..e45c15b 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/RyTask.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/job/WcsTask.java
@@ -25,7 +25,7 @@ import lombok.extern.slf4j.Slf4j;
  */
 
 @Slf4j
-public class RyTask implements Job {
+public class WcsTask implements Job {
 
     // 并发控制
     Map<String, Boolean> runningTaskMap = new HashMap<>();
@@ -42,7 +42,7 @@ public class RyTask implements Job {
         try {
             runningTaskMap.put(taskKey, true);
             LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
-            taskHeaderLambdaQueryWrapper.eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_BUILD);
+            taskHeaderLambdaQueryWrapper.eq(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_BUILD).eq(TaskHeader::getAgvTaskId, 0);
             List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper);
             for (TaskHeader taskHeader : taskHeaderList) {
                 try {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/controller/AgvTaskController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/controller/AgvTaskController.java
new file mode 100644
index 0000000..bad74a8
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/controller/AgvTaskController.java
@@ -0,0 +1,155 @@
+package org.jeecg.modules.wms.task.agvTask.controller;
+
+import java.util.Arrays;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.wms.task.agvTask.entity.AgvTask;
+import org.jeecg.modules.wms.task.agvTask.service.IAgvTaskService;
+import org.jeecg.utils.HuahengJwtUtil;
+import org.jeecg.utils.constant.QuantityConstant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @Description: AGV任务
+ * @Author:      jeecg-boot
+ * @Date:        2023-02-01
+ * @Version:     V1.0
+ */
+@Api(tags = "AGV任务")
+@RestController
+@RequestMapping("/task/agvTask")
+@Slf4j
+public class AgvTaskController extends JeecgController<AgvTask, IAgvTaskService> {
+    @Autowired
+    private IAgvTaskService agvTaskService;
+
+    /**
+     * 分页列表查询
+     * @param  agvTask
+     * @param  pageNo
+     * @param  pageSize
+     * @param  req
+     * @return
+     */
+    // @AutoLog(value = "AGV任务-分页列表查询")
+    @ApiOperation(value = "AGV任务-分页列表查询", notes = "AGV任务-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<AgvTask>> queryPageList(AgvTask agvTask, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
+        QueryWrapper<AgvTask> queryWrapper = QueryGenerator.initQueryWrapper(agvTask, req.getParameterMap());
+        Page<AgvTask> page = new Page<AgvTask>(pageNo, pageSize);
+        IPage<AgvTask> pageList = agvTaskService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     * @param  agvTask
+     * @return
+     */
+    @AutoLog(value = "AGV任务-添加")
+    @ApiOperation(value = "AGV任务-添加", notes = "AGV任务-添加")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody AgvTask agvTask, HttpServletRequest req) {
+        String warehouseCode = HuahengJwtUtil.getWarehouseCodeByToken(req);
+        agvTask.setWarehouseCode(warehouseCode);
+        agvTask.setTaskType(QuantityConstant.AGV_TYPE_TAKE_AND_RELEASE);
+        agvTask.setStatus(QuantityConstant.AGV_TASK_STATUS_BUILD);
+        agvTask.setPriority(10);
+        agvTaskService.save(agvTask);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     * @param  agvTask
+     * @return
+     */
+    @AutoLog(value = "AGV任务-编辑")
+    @ApiOperation(value = "AGV任务-编辑", notes = "AGV任务-编辑")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody AgvTask agvTask) {
+        agvTaskService.updateById(agvTask);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     * @param  id
+     * @return
+     */
+    @AutoLog(value = "AGV任务-通过id删除")
+    @ApiOperation(value = "AGV任务-通过id删除", notes = "AGV任务-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        agvTaskService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     * @param  ids
+     * @return
+     */
+    @AutoLog(value = "AGV任务-批量删除")
+    @ApiOperation(value = "AGV任务-批量删除", notes = "AGV任务-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.agvTaskService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 通过id查询
+     * @param  id
+     * @return
+     */
+    // @AutoLog(value = "AGV任务-通过id查询")
+    @ApiOperation(value = "AGV任务-通过id查询", notes = "AGV任务-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<AgvTask> queryById(@RequestParam(name = "id", required = true) String id) {
+        AgvTask agvTask = agvTaskService.getById(id);
+        if (agvTask == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(agvTask);
+    }
+
+    /**
+     * 导出excel
+     * @param request
+     * @param agvTask
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, AgvTask agvTask) {
+        return super.exportXls(request, agvTask, AgvTask.class, "AGV任务");
+    }
+
+    /**
+     * 通过excel导入数据
+     * @param  request
+     * @param  response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, AgvTask.class);
+    }
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/entity/AgvTask.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/entity/AgvTask.java
new file mode 100644
index 0000000..1edef85
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/entity/AgvTask.java
@@ -0,0 +1,90 @@
+package org.jeecg.modules.wms.task.agvTask.entity;
+
+import java.io.Serializable;
+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.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: AGV任务
+ * @Author:      jeecg-boot
+ * @Date:        2023-02-01
+ * @Version:     V1.0
+ */
+@Data
+@TableName("agv_task")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "agv_task对象", description = "AGV任务")
+public class AgvTask implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+    /** 前置任务号 */
+    @ApiModelProperty(value = "前置任务号")
+    private Integer preTaskNo;
+    /** 仓库编码 */
+    @Excel(name = "仓库编码", width = 15)
+    @ApiModelProperty(value = "仓库编码")
+    private String warehouseCode;
+    /** 库区 */
+    @Excel(name = "库区", width = 15)
+    @ApiModelProperty(value = "库区")
+    private String zoneCode;
+    /** 任务类型 */
+    @Excel(name = "任务类型", width = 15, dicCode = "agv_task_type")
+    @Dict(dicCode = "agv_task_type")
+    @ApiModelProperty(value = "任务类型")
+    private Integer taskType;
+    /** 容器编码 */
+    @Excel(name = "容器编码", width = 15)
+    @ApiModelProperty(value = "容器编码")
+    private String containerCode;
+    /** 小车编码 */
+    @Excel(name = "小车编码", width = 15)
+    @ApiModelProperty(value = "小车编码")
+    private String carno;
+    /** 优先级 */
+    @Excel(name = "优先级", width = 15)
+    @ApiModelProperty(value = "优先级")
+    private Integer priority;
+    /** 状态 */
+    @Excel(name = "状态", width = 15, dicCode = "agv_task_status")
+    @Dict(dicCode = "agv_task_status")
+    @ApiModelProperty(value = "状态")
+    private Integer status;
+    /** 起始点位 */
+    @Excel(name = "起始点位", width = 15)
+    @ApiModelProperty(value = "起始点位")
+    private String fromPort;
+    /** 目标点位 */
+    @Excel(name = "目标点位", width = 15)
+    @ApiModelProperty(value = "目标点位")
+    private String toPort;
+    /** 创建人 */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /** 创建日期 */
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    /** 更新人 */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /** 更新日期 */
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/mapper/AgvTaskMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/mapper/AgvTaskMapper.java
new file mode 100644
index 0000000..8fe5e5b
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/mapper/AgvTaskMapper.java
@@ -0,0 +1,15 @@
+package org.jeecg.modules.wms.task.agvTask.mapper;
+
+import org.jeecg.modules.wms.task.agvTask.entity.AgvTask;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: AGV任务
+ * @Author:      jeecg-boot
+ * @Date:        2023-02-01
+ * @Version:     V1.0
+ */
+public interface AgvTaskMapper extends BaseMapper<AgvTask> {
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/mapper/xml/AgvTaskMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/mapper/xml/AgvTaskMapper.xml
new file mode 100644
index 0000000..557cc0d
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/mapper/xml/AgvTaskMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.wms.task.agvTask.mapper.AgvTaskMapper">
+
+</mapper>
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
new file mode 100644
index 0000000..bae480c
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/IAgvTaskService.java
@@ -0,0 +1,15 @@
+package org.jeecg.modules.wms.task.agvTask.service;
+
+import org.jeecg.modules.wms.task.agvTask.entity.AgvTask;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: AGV任务
+ * @Author:      jeecg-boot
+ * @Date:        2023-02-01
+ * @Version:     V1.0
+ */
+public interface IAgvTaskService extends IService<AgvTask> {
+
+}
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
new file mode 100644
index 0000000..330566c
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/agvTask/service/impl/AgvTaskServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.wms.task.agvTask.service.impl;
+
+import org.jeecg.modules.wms.task.agvTask.entity.AgvTask;
+import org.jeecg.modules.wms.task.agvTask.mapper.AgvTaskMapper;
+import org.jeecg.modules.wms.task.agvTask.service.IAgvTaskService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: AGV任务
+ * @Author:      jeecg-boot
+ * @Date:        2023-02-01
+ * @Version:     V1.0
+ */
+@Service
+public class AgvTaskServiceImpl extends ServiceImpl<AgvTaskMapper, AgvTask> implements IAgvTaskService {
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
index b7dbd00..6e457ce 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
@@ -7,6 +7,7 @@ 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;
 
@@ -102,6 +103,9 @@ public class TaskHeader implements Serializable {
     @Excel(name = "目标出入口", width = 15)
     @ApiModelProperty(value = "目标出入口")
     private String toPortCode;
+    @ApiModelProperty(value = "AGV关联任务ID")
+    @TableField(value = "agvTaskId")
+    private int agvTaskId;
     @ApiModelProperty(value = "生成agv任务")
     private Integer sendAgv;
     @ApiModelProperty(value = "回传MES信息")