From 8f82164ccc074676e995f762a56036face7186fc Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期二, 24 九月 2024 15:00:12 +0800
Subject: [PATCH] #

---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformService.java                 |   11 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java                            |    4 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/TaskServiceImpl.java            |    5 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetlLog.java                     |    6 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveDetlLogMapper.java                |   12 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformDetlService.java             |    8 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/CacheSite.java                        |   14 
 zy-asrs-wms/src/main/resources/sql/menu/platformDetlLog.sql                                 |    9 
 zy-asrs-admin/src/views/out/cacheSite/edit.vue                                              |    0 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/CacheSiteController.java          |   67 
 zy-asrs-wms/src/main/resources/mapper/asrs/PlatformDetlMapper.xml                           |    5 
 zy-asrs-wms/src/main/resources/mapper/asrs/PlatformMapper.xml                               |    5 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformDetlLogServiceImpl.java |   12 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformMapper.java                   |   12 
 zy-asrs-wms/src/main/resources/mapper/asrs/PlatformDetlLogMapper.xml                        |    5 
 zy-asrs-wms/src/main/resources/sql/menu/platformDetl.sql                                    |    9 
 zy-asrs-wms/src/main/resources/sql/menu/platform.sql                                        |    9 
 zy-asrs-admin/src/views/out/platformDetl/edit.vue                                           |  203 +
 zy-asrs-admin/src/views/asrs/waveSeedLog/edit.vue                                           |  316 +++
 zy-asrs-wms/src/main/resources/mapper/asrs/WaveLogMapper.xml                                |    5 
 zy-asrs-wms/src/main/resources/sql/menu/waveLog.sql                                         |    9 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PlatformDetl.java                     |  294 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformDetlMapper.java               |   12 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PlatformInParam.java            |   14 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java        |  166 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveDetlLogService.java              |    8 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveLogServiceImpl.java         |   12 
 zy-asrs-admin/src/views/asrs/waveDetlLog/edit.vue                                           |  277 ++
 zy-asrs-admin/src/views/out/platform/index.vue                                              |   99 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveSeedLog.java                      |  297 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveSeed.java                         |   19 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PlatformDetlLog.java                  |  297 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/TaskStsType.java                |   25 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveLog.java                          |  239 ++
 zy-asrs-wms/src/main/resources/sql/menu/waveDetlLog.sql                                     |    9 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java                        |   13 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/BindPlatformParam.java          |   12 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderLog.java                         |   26 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/CacheSiteEmptyInParam.java      |   11 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveDetlLogController.java        |  102 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveSeedLogController.java        |  102 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/CacheSiteService.java                |    5 
 zy-asrs-admin/src/views/asrs/platformDetlLog/edit.vue                                       |  316 +++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformController.java           |  111 +
 zy-asrs-admin/src/views/asrs/waveLog/index.vue                                              |  153 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformDetlLogService.java          |    8 
 zy-asrs-admin/src/views/out/cacheSite/index.vue                                             |  430 ++++
 zy-asrs-admin/src/views/asrs/platformDetlLog/index.vue                                      |  283 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/SeedCompleteParam.java          |   11 
 zy-asrs-admin/src/views/out/platformDetl/index.vue                                          |  141 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveLogController.java            |  102 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/LocManage.java                        |    3 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/CacheSiteServiceImpl.java       |  182 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PlatformShippedParam.java       |   10 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java                      |   36 
 zy-asrs-admin/src/views/asrs/waveDetlLog/index.vue                                          |  276 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformDetlController.java       |  102 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java                     |   10 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveDetlLogServiceImpl.java     |   12 
 zy-asrs-admin/src/views/out/wave/index.vue                                                  |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveDetlLog.java                      |  279 ++
 zy-asrs-wms/src/main/resources/sql/menu/waveSeedLog.sql                                     |    9 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformDetlLogMapper.java            |   12 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveLogService.java                  |    8 
 zy-asrs-wms/src/main/resources/mapper/asrs/TaskMapper.xml                                   |   11 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveSeedLogService.java              |    8 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedLogServiceImpl.java     |   12 
 zy-asrs-admin/src/views/asrs/waveLog/edit.vue                                               |  205 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveSeedLogMapper.java                |   12 
 zy-asrs-admin/src/views/asrs/waveSeedLog/index.vue                                          |  283 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/TaskMapper.java                       |    4 
 zy-asrs-wms/src/main/resources/mapper/asrs/WaveDetlLogMapper.xml                            |    5 
 zy-asrs-admin/src/views/out/platform/edit.vue                                               |  126 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformDetlLogController.java    |  102 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformDetlServiceImpl.java    |   12 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveLogMapper.java                    |   12 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java            |   12 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/TaskService.java                     |    3 
 zy-asrs-wms/src/main/resources/mapper/asrs/WaveSeedLogMapper.xml                            |    5 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java                         |    9 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/Platform.java                         |  195 +
 81 files changed, 6,048 insertions(+), 229 deletions(-)

diff --git a/zy-asrs-admin/src/views/asrs/platformDetlLog/edit.vue b/zy-asrs-admin/src/views/asrs/platformDetlLog/edit.vue
new file mode 100644
index 0000000..7bb6db8
--- /dev/null
+++ b/zy-asrs-admin/src/views/asrs/platformDetlLog/edit.vue
@@ -0,0 +1,316 @@
+<script setup>
+import { ref, nextTick } from 'vue';
+import { get, post, postBlob, postForm } from '@/utils/request.js'
+import { formatMessage } from '@/utils/localeUtils.js';
+import { message } from 'ant-design-vue';
+
+const formTable = ref(null);
+const submitButton = ref(null);
+const isSave = ref(true);
+const open = ref(false);
+const initFormData = {}
+let formData = ref(initFormData);
+
+const emit = defineEmits(['tableReload'])
+
+const handleOk = (e) => {
+    nextTick(() => {
+        setTimeout(() => {
+            submitButton.value.$el.click();
+        }, 100);
+    });
+};
+
+const onFinish = values => {
+    // console.log('Success:', values);
+    open.value = false;
+    post(isSave.value ? '/api/platformDetlLog/save' : '/api/platformDetlLog/update', formData.value).then((resp) => {
+        let result = resp.data;
+        if (result.code === 200) {
+            message.success(isSave.value ? formatMessage('page.add.success', '鏂板鎴愬姛') : formatMessage('page.update.success', '鏇存柊鎴愬姛'));
+        } else {
+            message.error(result.msg);
+        }
+        emit('tableReload', 'reload')
+        nextTick(() => {
+            formTable.value.resetFields()
+        })
+    })
+};
+const onFinishFailed = errorInfo => {
+    console.log('Failed:', errorInfo);
+};
+
+const platformQueryList = ref(null); 
+platformQuery();
+function platformQuery() { 
+    postForm('/api/platform/query', {}).then(resp => { 
+        let result = resp.data;
+        platformQueryList.value = result.data;
+    })
+}
+const orderQueryList = ref(null); 
+orderQuery();
+function orderQuery() { 
+    postForm('/api/order/query', {}).then(resp => { 
+        let result = resp.data;
+        orderQueryList.value = result.data;
+    })
+}
+const orderDetlQueryList = ref(null); 
+orderDetlQuery();
+function orderDetlQuery() { 
+    postForm('/api/orderDetl/query', {}).then(resp => { 
+        let result = resp.data;
+        orderDetlQueryList.value = result.data;
+    })
+}
+const taskDetlQueryList = ref(null); 
+taskDetlQuery();
+function taskDetlQuery() { 
+    postForm('/api/taskDetl/query', {}).then(resp => { 
+        let result = resp.data;
+        taskDetlQueryList.value = result.data;
+    })
+}
+const userQueryList = ref(null); 
+userQuery();
+function userQuery() { 
+    postForm('/api/user/query', {}).then(resp => { 
+        let result = resp.data;
+        userQueryList.value = result.data;
+    })
+}
+
+
+defineExpose({
+    open,
+    formData,
+    initFormData,
+    isSave,
+})
+
+</script>
+
+<script>
+export default {
+    name: '闆嗚揣鍖哄煙搴撳瓨鍘嗗彶-edit'
+}
+</script>
+
+<template>
+    <div>
+        <a-modal v-model:open="open"
+            :title="isSave ? formatMessage('page.add', '娣诲姞') : formatMessage('page.edit', '缂栬緫')" @ok="handleOk"
+            style="width: 600px;">
+            <a-form :model="formData" ref="formTable" name="formTable" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }"
+                style="display: flex;justify-content: space-between;flex-wrap: wrap;" autocomplete="off"
+                @finish="onFinish" @finishFailed="onFinishFailed">
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.platform_id', '闆嗚揣ID') " 
+                      name="platformId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.platformId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="platformQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.platform_no', '闆嗚揣缂栧彿') " 
+                      name="platformNo" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.platformNo" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.order_id', '璁㈠崟') " 
+                      name="orderId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.orderId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="orderQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.order_detl_id', '璁㈠崟鏄庣粏') " 
+                      name="orderDetlId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.orderDetlId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="orderDetlQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.task_detl_id', '浠诲姟鏄庣粏') " 
+                      name="taskDetlId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.taskDetlId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="taskDetlQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.matnr', '鍟嗗搧缂栧彿') " 
+                      name="matnr" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.matnr" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.batch', '鎵瑰彿') " 
+                      name="batch" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.batch" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.field_params', '绱㈠紩瀛楁') " 
+                      name="fieldParams" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.fieldParams" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.anfme', '闇�姹傛暟閲�') " 
+                      name="anfme" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.anfme" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.qty', '瀹為檯鏁伴噺') " 
+                      name="qty" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.qty" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.status', '鐘舵��') " 
+                      name="status" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.status" 
+                        :options="[
+                                { label: '姝e父', value: 1 },
+                                { label: '绂佺敤', value: 0 },
+                            ]"
+                        >
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.create_time', '娣诲姞鏃堕棿') " 
+                      name="createTime" 
+                      style="width: 250px;" 
+                            >
+                    <a-date-picker 
+                        v-model:value="formData.createTime" 
+                        show-time 
+                        format="YYYY-MM-DD HH:mm:ss" 
+                        value-format="YYYY-MM-DD HH:mm:ss" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.create_by', '娣诲姞浜哄憳') " 
+                      name="createBy" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.createBy" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="userQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.update_time', '淇敼鏃堕棿') " 
+                      name="updateTime" 
+                      style="width: 250px;" 
+                            >
+                    <a-date-picker 
+                        v-model:value="formData.updateTime" 
+                        show-time 
+                        format="YYYY-MM-DD HH:mm:ss" 
+                        value-format="YYYY-MM-DD HH:mm:ss" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.update_by', '淇敼浜哄憳') " 
+                      name="updateBy" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.updateBy" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="userQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_platform_detl_log.memo', '澶囨敞') " 
+                      name="memo" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.memo" 
+                     /> 
+                        </a-form-item>
+
+                <a-form-item>
+                    <a-button type="primary" html-type="submit" ref="submitButton"
+                        style="visibility: hidden;">Submit</a-button>
+                </a-form-item>
+            </a-form>
+        </a-modal>
+    </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/asrs/platformDetlLog/index.vue b/zy-asrs-admin/src/views/asrs/platformDetlLog/index.vue
new file mode 100644
index 0000000..e972864
--- /dev/null
+++ b/zy-asrs-admin/src/views/asrs/platformDetlLog/index.vue
@@ -0,0 +1,283 @@
+<script setup>
+import { getCurrentInstance, ref, computed, reactive } from 'vue';
+import { useRouter } from "vue-router";
+import { get, post, postBlob } from '@/utils/request.js'
+import { message, Modal } from 'ant-design-vue';
+import { logout } from '@/config.js';
+import EditView from './edit.vue'
+import { formatMessage } from '@/utils/localeUtils.js';
+import useTableSearch from '@/utils/tableUtils.jsx';
+const context = getCurrentInstance()?.appContext.config.globalProperties;
+
+const router = useRouter();
+
+const TABLE_KEY = 'table-platformDetlLog';
+let currentPage = 1;
+let pageSize = 10;
+const searchInput = ref("")
+const editChild = ref(null)
+
+const state = reactive({
+  selectedRowKeys: [],
+  loading: false,
+});
+
+let tableData = ref([]);
+getPage();
+
+const {
+  getColumnSearchProps,
+  handleResizeColumn,
+} = useTableSearch();
+
+const columns = [
+        {
+            title: formatMessage('db.man_platform_detl_log.platform_id', '闆嗚揣ID'),
+            dataIndex: 'platformId$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('platformId$'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.platform_no', '闆嗚揣缂栧彿'),
+            dataIndex: 'platformNo',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('platformNo'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.order_id', '璁㈠崟'),
+            dataIndex: 'orderId',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('orderId'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.order_detl_id', '璁㈠崟鏄庣粏'),
+            dataIndex: 'orderDetlId$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('orderDetlId$'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.task_detl_id', '浠诲姟鏄庣粏'),
+            dataIndex: 'taskDetlId$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('taskDetlId$'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.matnr', '鍟嗗搧缂栧彿'),
+            dataIndex: 'matnr',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('matnr'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.batch', '鎵瑰彿'),
+            dataIndex: 'batch',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('batch'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.field_params', '绱㈠紩瀛楁'),
+            dataIndex: 'fieldParams',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('fieldParams'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.anfme', '闇�姹傛暟閲�'),
+            dataIndex: 'anfme',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('anfme'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.qty', '瀹為檯鏁伴噺'),
+            dataIndex: 'qty',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('qty'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.status', '鐘舵��'),
+            dataIndex: 'status$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('status$'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.create_time', '娣诲姞鏃堕棿'),
+            dataIndex: 'createTime$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('createTime$'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.create_by', '娣诲姞浜哄憳'),
+            dataIndex: 'createBy$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('createBy$'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.update_time', '淇敼鏃堕棿'),
+            dataIndex: 'updateTime$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('updateTime$'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.update_by', '淇敼浜哄憳'),
+            dataIndex: 'updateBy$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('updateBy$'),
+        },
+        {
+            title: formatMessage('db.man_platform_detl_log.memo', '澶囨敞'),
+            dataIndex: 'memo',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('memo'),
+        },
+
+  {
+    title: formatMessage('common.operation', '鎿嶄綔'),
+    name: 'oper',
+    dataIndex: 'oper',
+    key: 'oper',
+    width: 140,
+    fixed: 'right',
+  },
+];
+
+const hasSelected = computed(() => state.selectedRowKeys.length > 0);
+const start = () => {
+  state.loading = true;
+  // ajax request after empty completing
+  setTimeout(() => {
+    state.loading = false;
+    state.selectedRowKeys = [];
+  }, 1000);
+};
+const onSelectChange = selectedRowKeys => {
+  // console.log('selectedRowKeys changed: ', selectedRowKeys);
+  state.selectedRowKeys = selectedRowKeys;
+};
+
+function getPage() {
+  state.loading = true;
+  post('/api/platformDetlLog/page', {
+    current: currentPage,
+    pageSize: pageSize,
+    condition: searchInput.value
+  }).then((resp) => {
+    let result = resp.data;
+    if (result.code == 200) {
+      let data = result.data;
+      tableData.value = data;
+
+      state.loading = false;
+    } else if (result.code === 401) {
+      message.error(result.msg);
+      logout()
+    } else {
+      message.error(result.msg);
+    }
+  })
+}
+
+const handleEdit = (item) => {
+  editChild.value.open = true;
+  editChild.value.formData = item == null ? editChild.value.initFormData : JSON.parse(JSON.stringify(item));
+  editChild.value.isSave = item == null;
+}
+
+const handleDel = (rows) => {
+  Modal.confirm({
+    title: formatMessage('page.delete', '鍒犻櫎'),
+    content: formatMessage('page.delete.confirm', '纭畾鍒犻櫎璇ラ」鍚楋紵'),
+    maskClosable: true,
+    onOk: async () => {
+      const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+      try {
+        post('/api/platformDetlLog/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+          let result = resp.data;
+          if (result.code === 200) {
+            message.success(result.msg);
+          } else {
+            message.error(result.msg);
+          }
+          getPage()
+          hide()
+        })
+      } catch (error) {
+        message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+      }
+    },
+  });
+}
+
+const handleExport = async (intl) => {
+  postBlob('/api/platformDetlLog/export', {}).then(result => {
+    const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
+    window.location.href = window.URL.createObjectURL(blob);
+    return true;
+  })
+};
+
+const onSearch = () => {
+  // console.log('search');
+  getPage()
+}
+
+const onPageChange = (page, size) => {
+  currentPage = page;
+  pageSize = size;
+  getPage();
+}
+
+function handleTableReload(value) {
+  getPage()
+}
+
+</script>
+
+<script>
+export default {
+  name: '闆嗚揣鍖哄煙搴撳瓨鍘嗗彶'
+}
+</script>
+
+<template>
+  <div>
+    <EditView ref="editChild" @tableReload="handleTableReload" />
+    <div class="table-header">
+      <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
+        style="width: 200px;" @search="onSearch" />
+      <div class="table-header-right">
+        <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '娣诲姞') }}</a-button>
+        <a-button @click="handleExport">{{ formatMessage('page.export', '瀵煎嚭') }}</a-button>
+      </div>
+    </div>
+    <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"
+      :data-source="tableData.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"
+      :pagination="{ total: tableData.total, onChange: onPageChange }"
+      :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns" @resizeColumn="handleResizeColumn" :loading="state.loading">
+      <template #bodyCell="{ column, text, record }">
+        <template v-if="column.dataIndex === 'oper'">
+          <div style="display: flex;justify-content: space-evenly;">
+            <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '缂栬緫') }}</a-button>
+            <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '鍒犻櫎')
+              }}</a-button>
+          </div>
+        </template>
+      </template>
+    </a-table>
+  </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/asrs/waveDetlLog/edit.vue b/zy-asrs-admin/src/views/asrs/waveDetlLog/edit.vue
new file mode 100644
index 0000000..d0b845b
--- /dev/null
+++ b/zy-asrs-admin/src/views/asrs/waveDetlLog/edit.vue
@@ -0,0 +1,277 @@
+<script setup>
+import { ref, nextTick } from 'vue';
+import { get, post, postBlob, postForm } from '@/utils/request.js'
+import { formatMessage } from '@/utils/localeUtils.js';
+import { message } from 'ant-design-vue';
+
+const formTable = ref(null);
+const submitButton = ref(null);
+const isSave = ref(true);
+const open = ref(false);
+const initFormData = {}
+let formData = ref(initFormData);
+
+const emit = defineEmits(['tableReload'])
+
+const handleOk = (e) => {
+    nextTick(() => {
+        setTimeout(() => {
+            submitButton.value.$el.click();
+        }, 100);
+    });
+};
+
+const onFinish = values => {
+    // console.log('Success:', values);
+    open.value = false;
+    post(isSave.value ? '/api/waveDetlLog/save' : '/api/waveDetlLog/update', formData.value).then((resp) => {
+        let result = resp.data;
+        if (result.code === 200) {
+            message.success(isSave.value ? formatMessage('page.add.success', '鏂板鎴愬姛') : formatMessage('page.update.success', '鏇存柊鎴愬姛'));
+        } else {
+            message.error(result.msg);
+        }
+        emit('tableReload', 'reload')
+        nextTick(() => {
+            formTable.value.resetFields()
+        })
+    })
+};
+const onFinishFailed = errorInfo => {
+    console.log('Failed:', errorInfo);
+};
+
+const waveLogQueryList = ref(null); 
+waveLogQuery();
+function waveLogQuery() { 
+    postForm('/api/waveLog/query', {}).then(resp => { 
+        let result = resp.data;
+        waveLogQueryList.value = result.data;
+    })
+}
+const matQueryList = ref(null); 
+matQuery();
+function matQuery() { 
+    postForm('/api/mat/query', {}).then(resp => { 
+        let result = resp.data;
+        matQueryList.value = result.data;
+    })
+}
+const userQueryList = ref(null); 
+userQuery();
+function userQuery() { 
+    postForm('/api/user/query', {}).then(resp => { 
+        let result = resp.data;
+        userQueryList.value = result.data;
+    })
+}
+
+
+defineExpose({
+    open,
+    formData,
+    initFormData,
+    isSave,
+})
+
+</script>
+
+<script>
+export default {
+    name: '娉㈡鏄庣粏鍘嗗彶-edit'
+}
+</script>
+
+<template>
+    <div>
+        <a-modal v-model:open="open"
+            :title="isSave ? formatMessage('page.add', '娣诲姞') : formatMessage('page.edit', '缂栬緫')" @ok="handleOk"
+            style="width: 600px;">
+            <a-form :model="formData" ref="formTable" name="formTable" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }"
+                style="display: flex;justify-content: space-between;flex-wrap: wrap;" autocomplete="off"
+                @finish="onFinish" @finishFailed="onFinishFailed">
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.wave_id', '娉㈡ID') " 
+                      name="waveId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.waveId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="waveLogQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.wave_no', '娉㈡鍙�') " 
+                      name="waveNo" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.waveNo" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.mat_id', '鍟嗗搧ID') " 
+                      name="matId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.matId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="matQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.matnr', '鍟嗗搧缂栧彿') " 
+                      name="matnr" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.matnr" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.batch', '鎵瑰彿') " 
+                      name="batch" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.batch" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.stock_index', '鍟嗗搧搴撳瓨绱㈠紩') " 
+                      name="stockIndex" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.stockIndex" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.anfme', '鏁伴噺') " 
+                      name="anfme" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.anfme" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.work_qty', '宸ヤ綔鏁伴噺') " 
+                      name="workQty" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.workQty" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.status', '鐘舵��') " 
+                      name="status" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.status" 
+                        :options="[
+                                { label: '姝e父', value: 1 },
+                                { label: '绂佺敤', value: 0 },
+                            ]"
+                        >
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.create_time', '娣诲姞鏃堕棿') " 
+                      name="createTime" 
+                      style="width: 250px;" 
+                            >
+                    <a-date-picker 
+                        v-model:value="formData.createTime" 
+                        show-time 
+                        format="YYYY-MM-DD HH:mm:ss" 
+                        value-format="YYYY-MM-DD HH:mm:ss" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.create_by', '娣诲姞浜哄憳') " 
+                      name="createBy" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.createBy" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="userQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.update_time', '淇敼鏃堕棿') " 
+                      name="updateTime" 
+                      style="width: 250px;" 
+                            >
+                    <a-date-picker 
+                        v-model:value="formData.updateTime" 
+                        show-time 
+                        format="YYYY-MM-DD HH:mm:ss" 
+                        value-format="YYYY-MM-DD HH:mm:ss" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.update_by', '淇敼浜哄憳') " 
+                      name="updateBy" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.updateBy" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="userQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.memo', '澶囨敞') " 
+                      name="memo" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.memo" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_detl_log.field_params', '绱㈠紩瀛楁') " 
+                      name="fieldParams" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.fieldParams" 
+                     /> 
+                        </a-form-item>
+
+                <a-form-item>
+                    <a-button type="primary" html-type="submit" ref="submitButton"
+                        style="visibility: hidden;">Submit</a-button>
+                </a-form-item>
+            </a-form>
+        </a-modal>
+    </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/asrs/waveDetlLog/index.vue b/zy-asrs-admin/src/views/asrs/waveDetlLog/index.vue
new file mode 100644
index 0000000..eebb390
--- /dev/null
+++ b/zy-asrs-admin/src/views/asrs/waveDetlLog/index.vue
@@ -0,0 +1,276 @@
+<script setup>
+import { getCurrentInstance, ref, computed, reactive } from 'vue';
+import { useRouter } from "vue-router";
+import { get, post, postBlob } from '@/utils/request.js'
+import { message, Modal } from 'ant-design-vue';
+import { logout } from '@/config.js';
+import EditView from './edit.vue'
+import { formatMessage } from '@/utils/localeUtils.js';
+import useTableSearch from '@/utils/tableUtils.jsx';
+const context = getCurrentInstance()?.appContext.config.globalProperties;
+
+const router = useRouter();
+
+const TABLE_KEY = 'table-waveDetlLog';
+let currentPage = 1;
+let pageSize = 10;
+const searchInput = ref("")
+const editChild = ref(null)
+
+const state = reactive({
+  selectedRowKeys: [],
+  loading: false,
+});
+
+let tableData = ref([]);
+getPage();
+
+const {
+  getColumnSearchProps,
+  handleResizeColumn,
+} = useTableSearch();
+
+const columns = [
+        {
+            title: formatMessage('db.man_wave_detl_log.wave_id', '娉㈡ID'),
+            dataIndex: 'waveId$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('waveId$'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.wave_no', '娉㈡鍙�'),
+            dataIndex: 'waveNo',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('waveNo'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.mat_id', '鍟嗗搧ID'),
+            dataIndex: 'matId$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('matId$'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.matnr', '鍟嗗搧缂栧彿'),
+            dataIndex: 'matnr',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('matnr'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.batch', '鎵瑰彿'),
+            dataIndex: 'batch',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('batch'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.stock_index', '鍟嗗搧搴撳瓨绱㈠紩'),
+            dataIndex: 'stockIndex',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('stockIndex'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.anfme', '鏁伴噺'),
+            dataIndex: 'anfme',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('anfme'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.work_qty', '宸ヤ綔鏁伴噺'),
+            dataIndex: 'workQty',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('workQty'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.status', '鐘舵��'),
+            dataIndex: 'status$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('status$'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.create_time', '娣诲姞鏃堕棿'),
+            dataIndex: 'createTime$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('createTime$'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.create_by', '娣诲姞浜哄憳'),
+            dataIndex: 'createBy$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('createBy$'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.update_time', '淇敼鏃堕棿'),
+            dataIndex: 'updateTime$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('updateTime$'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.update_by', '淇敼浜哄憳'),
+            dataIndex: 'updateBy$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('updateBy$'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.memo', '澶囨敞'),
+            dataIndex: 'memo',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('memo'),
+        },
+        {
+            title: formatMessage('db.man_wave_detl_log.field_params', '绱㈠紩瀛楁'),
+            dataIndex: 'fieldParams',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('fieldParams'),
+        },
+
+  {
+    title: formatMessage('common.operation', '鎿嶄綔'),
+    name: 'oper',
+    dataIndex: 'oper',
+    key: 'oper',
+    width: 140,
+    fixed: 'right',
+  },
+];
+
+const hasSelected = computed(() => state.selectedRowKeys.length > 0);
+const start = () => {
+  state.loading = true;
+  // ajax request after empty completing
+  setTimeout(() => {
+    state.loading = false;
+    state.selectedRowKeys = [];
+  }, 1000);
+};
+const onSelectChange = selectedRowKeys => {
+  // console.log('selectedRowKeys changed: ', selectedRowKeys);
+  state.selectedRowKeys = selectedRowKeys;
+};
+
+function getPage() {
+  state.loading = true;
+  post('/api/waveDetlLog/page', {
+    current: currentPage,
+    pageSize: pageSize,
+    condition: searchInput.value
+  }).then((resp) => {
+    let result = resp.data;
+    if (result.code == 200) {
+      let data = result.data;
+      tableData.value = data;
+
+      state.loading = false;
+    } else if (result.code === 401) {
+      message.error(result.msg);
+      logout()
+    } else {
+      message.error(result.msg);
+    }
+  })
+}
+
+const handleEdit = (item) => {
+  editChild.value.open = true;
+  editChild.value.formData = item == null ? editChild.value.initFormData : JSON.parse(JSON.stringify(item));
+  editChild.value.isSave = item == null;
+}
+
+const handleDel = (rows) => {
+  Modal.confirm({
+    title: formatMessage('page.delete', '鍒犻櫎'),
+    content: formatMessage('page.delete.confirm', '纭畾鍒犻櫎璇ラ」鍚楋紵'),
+    maskClosable: true,
+    onOk: async () => {
+      const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+      try {
+        post('/api/waveDetlLog/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+          let result = resp.data;
+          if (result.code === 200) {
+            message.success(result.msg);
+          } else {
+            message.error(result.msg);
+          }
+          getPage()
+          hide()
+        })
+      } catch (error) {
+        message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+      }
+    },
+  });
+}
+
+const handleExport = async (intl) => {
+  postBlob('/api/waveDetlLog/export', {}).then(result => {
+    const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
+    window.location.href = window.URL.createObjectURL(blob);
+    return true;
+  })
+};
+
+const onSearch = () => {
+  // console.log('search');
+  getPage()
+}
+
+const onPageChange = (page, size) => {
+  currentPage = page;
+  pageSize = size;
+  getPage();
+}
+
+function handleTableReload(value) {
+  getPage()
+}
+
+</script>
+
+<script>
+export default {
+  name: '娉㈡鏄庣粏鍘嗗彶'
+}
+</script>
+
+<template>
+  <div>
+    <EditView ref="editChild" @tableReload="handleTableReload" />
+    <div class="table-header">
+      <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
+        style="width: 200px;" @search="onSearch" />
+      <div class="table-header-right">
+        <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '娣诲姞') }}</a-button>
+        <a-button @click="handleExport">{{ formatMessage('page.export', '瀵煎嚭') }}</a-button>
+      </div>
+    </div>
+    <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"
+      :data-source="tableData.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"
+      :pagination="{ total: tableData.total, onChange: onPageChange }"
+      :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns" @resizeColumn="handleResizeColumn" :loading="state.loading">
+      <template #bodyCell="{ column, text, record }">
+        <template v-if="column.dataIndex === 'oper'">
+          <div style="display: flex;justify-content: space-evenly;">
+            <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '缂栬緫') }}</a-button>
+            <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '鍒犻櫎')
+              }}</a-button>
+          </div>
+        </template>
+      </template>
+    </a-table>
+  </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/asrs/waveLog/edit.vue b/zy-asrs-admin/src/views/asrs/waveLog/edit.vue
new file mode 100644
index 0000000..b6990aa
--- /dev/null
+++ b/zy-asrs-admin/src/views/asrs/waveLog/edit.vue
@@ -0,0 +1,205 @@
+<script setup>
+import { ref, nextTick } from 'vue';
+import { get, post, postBlob, postForm } from '@/utils/request.js'
+import { formatMessage } from '@/utils/localeUtils.js';
+import { message } from 'ant-design-vue';
+
+const formTable = ref(null);
+const submitButton = ref(null);
+const isSave = ref(true);
+const open = ref(false);
+const initFormData = {}
+let formData = ref(initFormData);
+
+const emit = defineEmits(['tableReload'])
+
+const handleOk = (e) => {
+    nextTick(() => {
+        setTimeout(() => {
+            submitButton.value.$el.click();
+        }, 100);
+    });
+};
+
+const onFinish = values => {
+    // console.log('Success:', values);
+    open.value = false;
+    post(isSave.value ? '/api/waveLog/save' : '/api/waveLog/update', formData.value).then((resp) => {
+        let result = resp.data;
+        if (result.code === 200) {
+            message.success(isSave.value ? formatMessage('page.add.success', '鏂板鎴愬姛') : formatMessage('page.update.success', '鏇存柊鎴愬姛'));
+        } else {
+            message.error(result.msg);
+        }
+        emit('tableReload', 'reload')
+        nextTick(() => {
+            formTable.value.resetFields()
+        })
+    })
+};
+const onFinishFailed = errorInfo => {
+    console.log('Failed:', errorInfo);
+};
+
+const userQueryList = ref(null); 
+userQuery();
+function userQuery() { 
+    postForm('/api/user/query', {}).then(resp => { 
+        let result = resp.data;
+        userQueryList.value = result.data;
+    })
+}
+
+
+defineExpose({
+    open,
+    formData,
+    initFormData,
+    isSave,
+})
+
+</script>
+
+<script>
+export default {
+    name: '娉㈡鍘嗗彶-edit'
+}
+</script>
+
+<template>
+    <div>
+        <a-modal v-model:open="open"
+            :title="isSave ? formatMessage('page.add', '娣诲姞') : formatMessage('page.edit', '缂栬緫')" @ok="handleOk"
+            style="width: 600px;">
+            <a-form :model="formData" ref="formTable" name="formTable" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }"
+                style="display: flex;justify-content: space-between;flex-wrap: wrap;" autocomplete="off"
+                @finish="onFinish" @finishFailed="onFinishFailed">
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_log.wave_no', '娉㈡鍙�') " 
+                      name="waveNo" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.waveNo" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_log.wave_type', '娉㈡绫诲瀷') " 
+                      name="waveType" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.waveType" 
+                        :options="[
+                                { label: '鎵嬪姩', value: 0 },
+                                { label: '鑷姩', value: 1 },
+                            ]"
+                        >
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_log.wave_status', '娉㈡鐘舵��') " 
+                      name="waveStatus" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.waveStatus" 
+                        :options="[
+                                { label: '鍒濆鍖�', value: 0 },
+                                { label: '鐢熸垚浠诲姟', value: 1 },
+                                { label: '浠诲姟鎾', value: 2 },
+                                { label: '瀹屾垚', value: 3 },
+                            ]"
+                        >
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_log.status', '鐘舵��') " 
+                      name="status" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.status" 
+                        :options="[
+                                { label: '姝e父', value: 1 },
+                                { label: '绂佺敤', value: 0 },
+                            ]"
+                        >
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_log.create_time', '娣诲姞鏃堕棿') " 
+                      name="createTime" 
+                      style="width: 250px;" 
+                            >
+                    <a-date-picker 
+                        v-model:value="formData.createTime" 
+                        show-time 
+                        format="YYYY-MM-DD HH:mm:ss" 
+                        value-format="YYYY-MM-DD HH:mm:ss" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_log.create_by', '娣诲姞浜哄憳') " 
+                      name="createBy" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.createBy" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="userQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_log.update_time', '淇敼鏃堕棿') " 
+                      name="updateTime" 
+                      style="width: 250px;" 
+                            >
+                    <a-date-picker 
+                        v-model:value="formData.updateTime" 
+                        show-time 
+                        format="YYYY-MM-DD HH:mm:ss" 
+                        value-format="YYYY-MM-DD HH:mm:ss" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_log.update_by', '淇敼浜哄憳') " 
+                      name="updateBy" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.updateBy" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="userQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_log.memo', '澶囨敞') " 
+                      name="memo" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.memo" 
+                     /> 
+                        </a-form-item>
+
+                <a-form-item>
+                    <a-button type="primary" html-type="submit" ref="submitButton"
+                        style="visibility: hidden;">Submit</a-button>
+                </a-form-item>
+            </a-form>
+        </a-modal>
+    </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/base/cacheSite/index.vue b/zy-asrs-admin/src/views/asrs/waveLog/index.vue
similarity index 65%
copy from zy-asrs-admin/src/views/base/cacheSite/index.vue
copy to zy-asrs-admin/src/views/asrs/waveLog/index.vue
index 1a5fd32..b93d6f8 100644
--- a/zy-asrs-admin/src/views/base/cacheSite/index.vue
+++ b/zy-asrs-admin/src/views/asrs/waveLog/index.vue
@@ -11,7 +11,7 @@
 
 const router = useRouter();
 
-const TABLE_KEY = 'table-cacheSite';
+const TABLE_KEY = 'table-waveLog';
 let currentPage = 1;
 let pageSize = 10;
 const searchInput = ref("")
@@ -31,83 +31,69 @@
 } = useTableSearch();
 
 const columns = [
-  {
-    title: formatMessage('db.man_cache_site.channel', '閫氶亾'),
-    dataIndex: 'channel',
-    width: 140,
-    ellipsis: true,
-    ...getColumnSearchProps('channel'),
-  },
-  {
-    title: formatMessage('db.man_cache_site.site_no', '绔欑偣缂栧彿'),
-    dataIndex: 'siteNo',
-    width: 140,
-    ellipsis: true,
-    ...getColumnSearchProps('siteNo'),
-  },
-  {
-    title: formatMessage('db.man_cache_site.site_status', '绔欑偣鐘舵��'),
-    dataIndex: 'siteStatus$',
-    width: 140,
-    ellipsis: true,
-    ...getColumnSearchProps('siteStatus$'),
-  },
-  {
-    title: formatMessage('db.man_cache_site.order_id', '璁㈠崟ID'),
-    dataIndex: 'orderId$',
-    width: 140,
-    ellipsis: true,
-    ...getColumnSearchProps('orderId$'),
-  },
-  {
-    title: formatMessage('db.man_cache_site.order_no', '璁㈠崟缂栧彿'),
-    dataIndex: 'orderNo',
-    width: 140,
-    ellipsis: true,
-    ...getColumnSearchProps('orderNo'),
-  },
-  // {
-  //   title: formatMessage('db.man_cache_site.status', '鐘舵��'),
-  //   dataIndex: 'status$',
-  //   width: 140,
-  //   ellipsis: true,
-  //   ...getColumnSearchProps('status$'),
-  // },
-  // {
-  //   title: formatMessage('db.man_cache_site.create_time', '娣诲姞鏃堕棿'),
-  //   dataIndex: 'createTime$',
-  //   width: 140,
-  //   ellipsis: true,
-  //   ...getColumnSearchProps('createTime$'),
-  // },
-  // {
-  //   title: formatMessage('db.man_cache_site.create_by', '娣诲姞浜哄憳'),
-  //   dataIndex: 'createBy$',
-  //   width: 140,
-  //   ellipsis: true,
-  //   ...getColumnSearchProps('createBy$'),
-  // },
-  {
-    title: formatMessage('db.man_cache_site.update_time', '淇敼鏃堕棿'),
-    dataIndex: 'updateTime$',
-    width: 140,
-    ellipsis: true,
-    ...getColumnSearchProps('updateTime$'),
-  },
-  {
-    title: formatMessage('db.man_cache_site.update_by', '淇敼浜哄憳'),
-    dataIndex: 'updateBy$',
-    width: 140,
-    ellipsis: true,
-    ...getColumnSearchProps('updateBy$'),
-  },
-  {
-    title: formatMessage('db.man_cache_site.memo', '澶囨敞'),
-    dataIndex: 'memo',
-    width: 140,
-    ellipsis: true,
-    ...getColumnSearchProps('memo'),
-  },
+        {
+            title: formatMessage('db.man_wave_log.wave_no', '娉㈡鍙�'),
+            dataIndex: 'waveNo',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('waveNo'),
+        },
+        {
+            title: formatMessage('db.man_wave_log.wave_type', '娉㈡绫诲瀷'),
+            dataIndex: 'waveType$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('waveType$'),
+        },
+        {
+            title: formatMessage('db.man_wave_log.wave_status', '娉㈡鐘舵��'),
+            dataIndex: 'waveStatus$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('waveStatus$'),
+        },
+        {
+            title: formatMessage('db.man_wave_log.status', '鐘舵��'),
+            dataIndex: 'status$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('status$'),
+        },
+        {
+            title: formatMessage('db.man_wave_log.create_time', '娣诲姞鏃堕棿'),
+            dataIndex: 'createTime$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('createTime$'),
+        },
+        {
+            title: formatMessage('db.man_wave_log.create_by', '娣诲姞浜哄憳'),
+            dataIndex: 'createBy$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('createBy$'),
+        },
+        {
+            title: formatMessage('db.man_wave_log.update_time', '淇敼鏃堕棿'),
+            dataIndex: 'updateTime$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('updateTime$'),
+        },
+        {
+            title: formatMessage('db.man_wave_log.update_by', '淇敼浜哄憳'),
+            dataIndex: 'updateBy$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('updateBy$'),
+        },
+        {
+            title: formatMessage('db.man_wave_log.memo', '澶囨敞'),
+            dataIndex: 'memo',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('memo'),
+        },
 
   {
     title: formatMessage('common.operation', '鎿嶄綔'),
@@ -135,7 +121,7 @@
 
 function getPage() {
   state.loading = true;
-  post('/api/cacheSite/page', {
+  post('/api/waveLog/page', {
     current: currentPage,
     pageSize: pageSize,
     condition: searchInput.value
@@ -169,7 +155,7 @@
     onOk: async () => {
       const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
       try {
-        post('/api/cacheSite/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+        post('/api/waveLog/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
           let result = resp.data;
           if (result.code === 200) {
             message.success(result.msg);
@@ -187,7 +173,7 @@
 }
 
 const handleExport = async (intl) => {
-  postBlob('/api/cacheSite/export', {}).then(result => {
+  postBlob('/api/waveLog/export', {}).then(result => {
     const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
     window.location.href = window.URL.createObjectURL(blob);
     return true;
@@ -213,7 +199,7 @@
 
 <script>
 export default {
-  name: '鎾绔欑偣'
+  name: '娉㈡鍘嗗彶'
 }
 </script>
 
@@ -231,8 +217,7 @@
     <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"
       :data-source="tableData.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"
       :pagination="{ total: tableData.total, onChange: onPageChange }"
-      :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns" @resizeColumn="handleResizeColumn"
-      :loading="state.loading">
+      :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns" @resizeColumn="handleResizeColumn" :loading="state.loading">
       <template #bodyCell="{ column, text, record }">
         <template v-if="column.dataIndex === 'oper'">
           <div style="display: flex;justify-content: space-evenly;">
diff --git a/zy-asrs-admin/src/views/asrs/waveSeedLog/edit.vue b/zy-asrs-admin/src/views/asrs/waveSeedLog/edit.vue
new file mode 100644
index 0000000..809d08d
--- /dev/null
+++ b/zy-asrs-admin/src/views/asrs/waveSeedLog/edit.vue
@@ -0,0 +1,316 @@
+<script setup>
+import { ref, nextTick } from 'vue';
+import { get, post, postBlob, postForm } from '@/utils/request.js'
+import { formatMessage } from '@/utils/localeUtils.js';
+import { message } from 'ant-design-vue';
+
+const formTable = ref(null);
+const submitButton = ref(null);
+const isSave = ref(true);
+const open = ref(false);
+const initFormData = {}
+let formData = ref(initFormData);
+
+const emit = defineEmits(['tableReload'])
+
+const handleOk = (e) => {
+    nextTick(() => {
+        setTimeout(() => {
+            submitButton.value.$el.click();
+        }, 100);
+    });
+};
+
+const onFinish = values => {
+    // console.log('Success:', values);
+    open.value = false;
+    post(isSave.value ? '/api/waveSeedLog/save' : '/api/waveSeedLog/update', formData.value).then((resp) => {
+        let result = resp.data;
+        if (result.code === 200) {
+            message.success(isSave.value ? formatMessage('page.add.success', '鏂板鎴愬姛') : formatMessage('page.update.success', '鏇存柊鎴愬姛'));
+        } else {
+            message.error(result.msg);
+        }
+        emit('tableReload', 'reload')
+        nextTick(() => {
+            formTable.value.resetFields()
+        })
+    })
+};
+const onFinishFailed = errorInfo => {
+    console.log('Failed:', errorInfo);
+};
+
+const cacheSiteQueryList = ref(null); 
+cacheSiteQuery();
+function cacheSiteQuery() { 
+    postForm('/api/cacheSite/query', {}).then(resp => { 
+        let result = resp.data;
+        cacheSiteQueryList.value = result.data;
+    })
+}
+const orderQueryList = ref(null); 
+orderQuery();
+function orderQuery() { 
+    postForm('/api/order/query', {}).then(resp => { 
+        let result = resp.data;
+        orderQueryList.value = result.data;
+    })
+}
+const orderDetlQueryList = ref(null); 
+orderDetlQuery();
+function orderDetlQuery() { 
+    postForm('/api/orderDetl/query', {}).then(resp => { 
+        let result = resp.data;
+        orderDetlQueryList.value = result.data;
+    })
+}
+const taskDetlQueryList = ref(null); 
+taskDetlQuery();
+function taskDetlQuery() { 
+    postForm('/api/taskDetl/query', {}).then(resp => { 
+        let result = resp.data;
+        taskDetlQueryList.value = result.data;
+    })
+}
+const userQueryList = ref(null); 
+userQuery();
+function userQuery() { 
+    postForm('/api/user/query', {}).then(resp => { 
+        let result = resp.data;
+        userQueryList.value = result.data;
+    })
+}
+
+
+defineExpose({
+    open,
+    formData,
+    initFormData,
+    isSave,
+})
+
+</script>
+
+<script>
+export default {
+    name: '娉㈡鎾鍘嗗彶-edit'
+}
+</script>
+
+<template>
+    <div>
+        <a-modal v-model:open="open"
+            :title="isSave ? formatMessage('page.add', '娣诲姞') : formatMessage('page.edit', '缂栬緫')" @ok="handleOk"
+            style="width: 600px;">
+            <a-form :model="formData" ref="formTable" name="formTable" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }"
+                style="display: flex;justify-content: space-between;flex-wrap: wrap;" autocomplete="off"
+                @finish="onFinish" @finishFailed="onFinishFailed">
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.site_id', '绔欑偣ID') " 
+                      name="siteId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.siteId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="cacheSiteQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.site_no', '绔欑偣缂栧彿') " 
+                      name="siteNo" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.siteNo" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.order_id', '璁㈠崟') " 
+                      name="orderId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.orderId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="orderQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.order_detl_id', '璁㈠崟鏄庣粏') " 
+                      name="orderDetlId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.orderDetlId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="orderDetlQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.task_detl_id', '浠诲姟鏄庣粏') " 
+                      name="taskDetlId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.taskDetlId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="taskDetlQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.anfme', '鏁伴噺') " 
+                      name="anfme" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.anfme" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.work_qty', '澶嶆牳鏁伴噺') " 
+                      name="workQty" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.workQty" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.status', '鐘舵��') " 
+                      name="status" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.status" 
+                        :options="[
+                                { label: '姝e父', value: 1 },
+                                { label: '绂佺敤', value: 0 },
+                            ]"
+                        >
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.create_time', '娣诲姞鏃堕棿') " 
+                      name="createTime" 
+                      style="width: 250px;" 
+                            >
+                    <a-date-picker 
+                        v-model:value="formData.createTime" 
+                        show-time 
+                        format="YYYY-MM-DD HH:mm:ss" 
+                        value-format="YYYY-MM-DD HH:mm:ss" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.create_by', '娣诲姞浜哄憳') " 
+                      name="createBy" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.createBy" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="userQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.update_time', '淇敼鏃堕棿') " 
+                      name="updateTime" 
+                      style="width: 250px;" 
+                            >
+                    <a-date-picker 
+                        v-model:value="formData.updateTime" 
+                        show-time 
+                        format="YYYY-MM-DD HH:mm:ss" 
+                        value-format="YYYY-MM-DD HH:mm:ss" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.update_by', '淇敼浜哄憳') " 
+                      name="updateBy" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.updateBy" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="userQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.memo', '澶囨敞') " 
+                      name="memo" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.memo" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.matnr', '鍟嗗搧缂栧彿') " 
+                      name="matnr" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.matnr" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.batch', '鎵瑰彿') " 
+                      name="batch" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.batch" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.man_wave_seed_log.field_params', '绱㈠紩瀛楁') " 
+                      name="fieldParams" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.fieldParams" 
+                     /> 
+                        </a-form-item>
+
+                <a-form-item>
+                    <a-button type="primary" html-type="submit" ref="submitButton"
+                        style="visibility: hidden;">Submit</a-button>
+                </a-form-item>
+            </a-form>
+        </a-modal>
+    </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/asrs/waveSeedLog/index.vue b/zy-asrs-admin/src/views/asrs/waveSeedLog/index.vue
new file mode 100644
index 0000000..3c79374
--- /dev/null
+++ b/zy-asrs-admin/src/views/asrs/waveSeedLog/index.vue
@@ -0,0 +1,283 @@
+<script setup>
+import { getCurrentInstance, ref, computed, reactive } from 'vue';
+import { useRouter } from "vue-router";
+import { get, post, postBlob } from '@/utils/request.js'
+import { message, Modal } from 'ant-design-vue';
+import { logout } from '@/config.js';
+import EditView from './edit.vue'
+import { formatMessage } from '@/utils/localeUtils.js';
+import useTableSearch from '@/utils/tableUtils.jsx';
+const context = getCurrentInstance()?.appContext.config.globalProperties;
+
+const router = useRouter();
+
+const TABLE_KEY = 'table-waveSeedLog';
+let currentPage = 1;
+let pageSize = 10;
+const searchInput = ref("")
+const editChild = ref(null)
+
+const state = reactive({
+  selectedRowKeys: [],
+  loading: false,
+});
+
+let tableData = ref([]);
+getPage();
+
+const {
+  getColumnSearchProps,
+  handleResizeColumn,
+} = useTableSearch();
+
+const columns = [
+        {
+            title: formatMessage('db.man_wave_seed_log.site_id', '绔欑偣ID'),
+            dataIndex: 'siteId$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('siteId$'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.site_no', '绔欑偣缂栧彿'),
+            dataIndex: 'siteNo',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('siteNo'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.order_id', '璁㈠崟'),
+            dataIndex: 'orderId',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('orderId'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.order_detl_id', '璁㈠崟鏄庣粏'),
+            dataIndex: 'orderDetlId$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('orderDetlId$'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.task_detl_id', '浠诲姟鏄庣粏'),
+            dataIndex: 'taskDetlId$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('taskDetlId$'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.anfme', '鏁伴噺'),
+            dataIndex: 'anfme',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('anfme'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.work_qty', '澶嶆牳鏁伴噺'),
+            dataIndex: 'workQty',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('workQty'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.status', '鐘舵��'),
+            dataIndex: 'status$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('status$'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.create_time', '娣诲姞鏃堕棿'),
+            dataIndex: 'createTime$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('createTime$'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.create_by', '娣诲姞浜哄憳'),
+            dataIndex: 'createBy$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('createBy$'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.update_time', '淇敼鏃堕棿'),
+            dataIndex: 'updateTime$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('updateTime$'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.update_by', '淇敼浜哄憳'),
+            dataIndex: 'updateBy$',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('updateBy$'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.memo', '澶囨敞'),
+            dataIndex: 'memo',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('memo'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.matnr', '鍟嗗搧缂栧彿'),
+            dataIndex: 'matnr',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('matnr'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.batch', '鎵瑰彿'),
+            dataIndex: 'batch',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('batch'),
+        },
+        {
+            title: formatMessage('db.man_wave_seed_log.field_params', '绱㈠紩瀛楁'),
+            dataIndex: 'fieldParams',
+            width: 140,
+            ellipsis: true,
+            ...getColumnSearchProps('fieldParams'),
+        },
+
+  {
+    title: formatMessage('common.operation', '鎿嶄綔'),
+    name: 'oper',
+    dataIndex: 'oper',
+    key: 'oper',
+    width: 140,
+    fixed: 'right',
+  },
+];
+
+const hasSelected = computed(() => state.selectedRowKeys.length > 0);
+const start = () => {
+  state.loading = true;
+  // ajax request after empty completing
+  setTimeout(() => {
+    state.loading = false;
+    state.selectedRowKeys = [];
+  }, 1000);
+};
+const onSelectChange = selectedRowKeys => {
+  // console.log('selectedRowKeys changed: ', selectedRowKeys);
+  state.selectedRowKeys = selectedRowKeys;
+};
+
+function getPage() {
+  state.loading = true;
+  post('/api/waveSeedLog/page', {
+    current: currentPage,
+    pageSize: pageSize,
+    condition: searchInput.value
+  }).then((resp) => {
+    let result = resp.data;
+    if (result.code == 200) {
+      let data = result.data;
+      tableData.value = data;
+
+      state.loading = false;
+    } else if (result.code === 401) {
+      message.error(result.msg);
+      logout()
+    } else {
+      message.error(result.msg);
+    }
+  })
+}
+
+const handleEdit = (item) => {
+  editChild.value.open = true;
+  editChild.value.formData = item == null ? editChild.value.initFormData : JSON.parse(JSON.stringify(item));
+  editChild.value.isSave = item == null;
+}
+
+const handleDel = (rows) => {
+  Modal.confirm({
+    title: formatMessage('page.delete', '鍒犻櫎'),
+    content: formatMessage('page.delete.confirm', '纭畾鍒犻櫎璇ラ」鍚楋紵'),
+    maskClosable: true,
+    onOk: async () => {
+      const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+      try {
+        post('/api/waveSeedLog/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+          let result = resp.data;
+          if (result.code === 200) {
+            message.success(result.msg);
+          } else {
+            message.error(result.msg);
+          }
+          getPage()
+          hide()
+        })
+      } catch (error) {
+        message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+      }
+    },
+  });
+}
+
+const handleExport = async (intl) => {
+  postBlob('/api/waveSeedLog/export', {}).then(result => {
+    const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
+    window.location.href = window.URL.createObjectURL(blob);
+    return true;
+  })
+};
+
+const onSearch = () => {
+  // console.log('search');
+  getPage()
+}
+
+const onPageChange = (page, size) => {
+  currentPage = page;
+  pageSize = size;
+  getPage();
+}
+
+function handleTableReload(value) {
+  getPage()
+}
+
+</script>
+
+<script>
+export default {
+  name: '娉㈡鎾鍘嗗彶'
+}
+</script>
+
+<template>
+  <div>
+    <EditView ref="editChild" @tableReload="handleTableReload" />
+    <div class="table-header">
+      <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
+        style="width: 200px;" @search="onSearch" />
+      <div class="table-header-right">
+        <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '娣诲姞') }}</a-button>
+        <a-button @click="handleExport">{{ formatMessage('page.export', '瀵煎嚭') }}</a-button>
+      </div>
+    </div>
+    <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"
+      :data-source="tableData.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"
+      :pagination="{ total: tableData.total, onChange: onPageChange }"
+      :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns" @resizeColumn="handleResizeColumn" :loading="state.loading">
+      <template #bodyCell="{ column, text, record }">
+        <template v-if="column.dataIndex === 'oper'">
+          <div style="display: flex;justify-content: space-evenly;">
+            <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '缂栬緫') }}</a-button>
+            <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '鍒犻櫎')
+              }}</a-button>
+          </div>
+        </template>
+      </template>
+    </a-table>
+  </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/base/cacheSite/edit.vue b/zy-asrs-admin/src/views/out/cacheSite/edit.vue
similarity index 100%
rename from zy-asrs-admin/src/views/base/cacheSite/edit.vue
rename to zy-asrs-admin/src/views/out/cacheSite/edit.vue
diff --git a/zy-asrs-admin/src/views/out/cacheSite/index.vue b/zy-asrs-admin/src/views/out/cacheSite/index.vue
new file mode 100644
index 0000000..348ab53
--- /dev/null
+++ b/zy-asrs-admin/src/views/out/cacheSite/index.vue
@@ -0,0 +1,430 @@
+<script setup>
+import { getCurrentInstance, ref, computed, reactive } from 'vue';
+import { useRouter } from "vue-router";
+import { get, post, postForm, postBlob } from '@/utils/request.js'
+import { message, Modal } from 'ant-design-vue';
+import { logout } from '@/config.js';
+import EditView from './edit.vue'
+import { formatMessage } from '@/utils/localeUtils.js';
+import useTableSearch from '@/utils/tableUtils.jsx';
+const context = getCurrentInstance()?.appContext.config.globalProperties;
+
+const router = useRouter();
+
+const TABLE_KEY = 'table-cacheSite';
+let currentPage = 1;
+let pageSize = 10;
+const searchInput = ref("")
+const editChild = ref(null)
+
+const state = reactive({
+  selectedRowKeys: [],
+  loading: false,
+});
+
+let tableData = ref([]);
+getPage();
+
+const {
+  getColumnSearchProps,
+  handleResizeColumn,
+} = useTableSearch();
+
+const columns = [
+  {
+    title: formatMessage('db.man_cache_site.channel', '閫氶亾'),
+    dataIndex: 'channel',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('channel'),
+  },
+  {
+    title: formatMessage('db.man_cache_site.site_no', '绔欑偣缂栧彿'),
+    dataIndex: 'siteNo',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('siteNo'),
+  },
+  {
+    title: formatMessage('db.man_cache_site.site_status', '绔欑偣鐘舵��'),
+    dataIndex: 'siteStatus$',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('siteStatus$'),
+  },
+  {
+    title: formatMessage('db.man_cache_site.order_id', '璁㈠崟ID'),
+    dataIndex: 'orderId$',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('orderId$'),
+  },
+  {
+    title: formatMessage('db.man_cache_site.order_no', '璁㈠崟缂栧彿'),
+    dataIndex: 'orderNo',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('orderNo'),
+  },
+  {
+    title: formatMessage('db.man_cache_site.platform_no', '闆嗚揣缂栧彿'),
+    dataIndex: 'platformNo',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('platformNo'),
+  },
+  // {
+  //   title: formatMessage('db.man_cache_site.status', '鐘舵��'),
+  //   dataIndex: 'status$',
+  //   width: 140,
+  //   ellipsis: true,
+  //   ...getColumnSearchProps('status$'),
+  // },
+  // {
+  //   title: formatMessage('db.man_cache_site.create_time', '娣诲姞鏃堕棿'),
+  //   dataIndex: 'createTime$',
+  //   width: 140,
+  //   ellipsis: true,
+  //   ...getColumnSearchProps('createTime$'),
+  // },
+  // {
+  //   title: formatMessage('db.man_cache_site.create_by', '娣诲姞浜哄憳'),
+  //   dataIndex: 'createBy$',
+  //   width: 140,
+  //   ellipsis: true,
+  //   ...getColumnSearchProps('createBy$'),
+  // },
+  {
+    title: formatMessage('db.man_cache_site.update_time', '淇敼鏃堕棿'),
+    dataIndex: 'updateTime$',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('updateTime$'),
+  },
+  {
+    title: formatMessage('db.man_cache_site.update_by', '淇敼浜哄憳'),
+    dataIndex: 'updateBy$',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('updateBy$'),
+  },
+  {
+    title: formatMessage('db.man_cache_site.memo', '澶囨敞'),
+    dataIndex: 'memo',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('memo'),
+  },
+
+  {
+    title: formatMessage('common.operation', '鎿嶄綔'),
+    name: 'oper',
+    dataIndex: 'oper',
+    key: 'oper',
+    width: 340,
+    fixed: 'right',
+  },
+];
+
+const hasSelected = computed(() => state.selectedRowKeys.length > 0);
+const start = () => {
+  state.loading = true;
+  // ajax request after empty completing
+  setTimeout(() => {
+    state.loading = false;
+    state.selectedRowKeys = [];
+  }, 1000);
+};
+const onSelectChange = selectedRowKeys => {
+  // console.log('selectedRowKeys changed: ', selectedRowKeys);
+  state.selectedRowKeys = selectedRowKeys;
+};
+
+function getPage() {
+  state.loading = true;
+  post('/api/cacheSite/page', {
+    current: currentPage,
+    pageSize: pageSize,
+    condition: searchInput.value
+  }).then((resp) => {
+    let result = resp.data;
+    if (result.code == 200) {
+      let data = result.data;
+      tableData.value = data;
+
+      state.loading = false;
+    } else if (result.code === 401) {
+      message.error(result.msg);
+      logout()
+    } else {
+      message.error(result.msg);
+    }
+  })
+}
+
+const handleEdit = (item) => {
+  editChild.value.open = true;
+  editChild.value.formData = item == null ? editChild.value.initFormData : JSON.parse(JSON.stringify(item));
+  editChild.value.isSave = item == null;
+}
+
+const handleDel = (rows) => {
+  Modal.confirm({
+    title: formatMessage('page.delete', '鍒犻櫎'),
+    content: formatMessage('page.delete.confirm', '纭畾鍒犻櫎璇ラ」鍚楋紵'),
+    maskClosable: true,
+    onOk: async () => {
+      const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+      try {
+        post('/api/cacheSite/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+          let result = resp.data;
+          if (result.code === 200) {
+            message.success(result.msg);
+          } else {
+            message.error(result.msg);
+          }
+          getPage()
+          hide()
+        })
+      } catch (error) {
+        message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+      }
+    },
+  });
+}
+
+const handleExport = async (intl) => {
+  postBlob('/api/cacheSite/export', {}).then(result => {
+    const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
+    window.location.href = window.URL.createObjectURL(blob);
+    return true;
+  })
+};
+
+const onSearch = () => {
+  // console.log('search');
+  getPage()
+}
+
+const onPageChange = (page, size) => {
+  currentPage = page;
+  pageSize = size;
+  getPage();
+}
+
+function handleTableReload(value) {
+  getPage()
+}
+
+const openBindPlatform = ref(false);
+const currentCacheSite = ref(null)
+const platform = ref(null)
+const platformQueryList = ref(null);
+platformQuery();
+function platformQuery() {
+  postForm('/api/platform/query', {}).then(resp => {
+    let result = resp.data;
+    platformQueryList.value = result.data;
+
+    if (platformQueryList.value.length > 0) {
+      platform.value = platformQueryList.value[0];
+    }
+  })
+}
+
+const handleBindPlatform = (item) => {
+  openBindPlatform.value = true;
+  currentCacheSite.value = item;
+}
+
+const handleBindPlatformOk = (item) => {
+  const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+  try {
+    post('/api/cacheSite/bindPlatform', {
+      siteNo: currentCacheSite.value.siteNo,
+      platformId: platform.value.value,
+    }).then(resp => {
+      let result = resp.data;
+      console.log(result);
+
+      if (result.code === 200) {
+        message.success(result.msg);
+      } else {
+        message.error(result.msg);
+      }
+      getPage()
+      hide()
+      openBindPlatform.value = false;
+    })
+  } catch (error) {
+    message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+  }
+}
+
+function seedComplete(item) {
+  const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+  try {
+    post('/api/cacheSite/seedComplete', {
+      siteNo: item.siteNo,
+    }).then(resp => {
+      let result = resp.data;
+      console.log(result);
+
+      if (result.code === 200) {
+        message.success(result.msg);
+      } else {
+        message.error(result.msg);
+      }
+      getPage()
+      hide()
+    })
+  } catch (error) {
+    message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+  }
+}
+
+const handleSeedComplete = (item) => {
+  if (item.platformId == null) {
+    message.error(formatMessage('page.cacheSite.bindPlatform.fail', '璇峰厛缁戝畾闆嗚揣鍖哄煙缂栧彿'));
+    return;
+  }
+
+  Modal.confirm({
+    title: formatMessage('page.cacheSite.seedComplete', '鎾瀹屾垚'),
+    content: formatMessage('page.cacheSite.seedComplete.confirm', '纭畾鎾瀹屾垚鍚楋紵'),
+    maskClosable: true,
+    onOk: async () => {
+      let resp = await post('/api/cacheSite/seedCompletePreview', {
+        siteNo: item.siteNo,
+      })
+      let check = resp.data.data;
+
+      if (check) {
+        seedComplete(item)
+      } else {
+        Modal.confirm({
+          title: formatMessage('page.notice', '閫氱煡'),
+          content: formatMessage('page.cacheSite.seedComplete.confirm', '璁㈠崟鏈畬鎴愶紝鏄惁缁х画锛�'),
+          maskClosable: true,
+          onOk: async () => {
+            seedComplete(item)
+          },
+        });
+      }
+
+    },
+  });
+}
+
+const handlePlatformIn = (item) => {
+  if (item.platformId == null) {
+    message.error(formatMessage('page.cacheSite.bindPlatform.fail', '璇峰厛缁戝畾闆嗚揣鍖哄煙缂栧彿'));
+    return;
+  }
+
+  Modal.confirm({
+    title: formatMessage('page.cacheSite.platformIn', '闆嗚揣鍏ュ簱'),
+    content: formatMessage('page.cacheSite.platformIn.confirm', '纭畾闆嗚揣鍏ュ簱鍚楋紵'),
+    maskClosable: true,
+    onOk: async () => {
+      const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+      try {
+        post('/api/cacheSite/platformIn', {
+          siteNo: item.siteNo,
+          platformNo: 'A1'
+        }).then(resp => {
+          let result = resp.data;
+          if (result.code === 200) {
+            message.success(result.msg);
+          } else {
+            message.error(result.msg);
+          }
+          getPage()
+          hide()
+        })
+      } catch (error) {
+        message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+      }
+    },
+  });
+}
+
+const handleEmptyIn = (item) => {
+  Modal.confirm({
+    title: formatMessage('page.cacheSite.emptyIn', '绌烘墭鐩樺叆绔�'),
+    content: formatMessage('page.cacheSite.emptyIn.confirm', '纭畾绌烘墭鐩樺叆绔欏悧锛�'),
+    maskClosable: true,
+    onOk: async () => {
+      const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+      try {
+        post('/api/cacheSite/emptyIn', {
+          siteNo: item.siteNo,
+        }).then(resp => {
+          let result = resp.data;
+          if (result.code === 200) {
+            message.success(result.msg);
+          } else {
+            message.error(result.msg);
+          }
+          getPage()
+          hide()
+        })
+      } catch (error) {
+        message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+      }
+    },
+  });
+}
+
+</script>
+
+<script>
+export default {
+  name: '鎾绔欑偣'
+}
+</script>
+
+<template>
+  <div>
+    <EditView ref="editChild" @tableReload="handleTableReload" />
+    <div class="table-header">
+      <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
+        style="width: 200px;" @search="onSearch" />
+      <div class="table-header-right">
+        <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '娣诲姞') }}</a-button>
+        <a-button @click="handleExport">{{ formatMessage('page.export', '瀵煎嚭') }}</a-button>
+      </div>
+    </div>
+    <a-table :row-selection="{ selectedRowKeys: state.selectedRowKeys, onChange: onSelectChange }"
+      :data-source="tableData.records" :defaultExpandAllRows="false" :key="TABLE_KEY" rowKey="id"
+      :pagination="{ total: tableData.total, onChange: onPageChange }"
+      :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="columns" @resizeColumn="handleResizeColumn"
+      :loading="state.loading">
+      <template #bodyCell="{ column, text, record }">
+        <template v-if="column.dataIndex === 'oper'">
+          <div style="display: flex;justify-content: space-evenly;">
+            <a-button v-if="record.platformId == null" type="link" primary @click="handleBindPlatform(record)">{{
+              formatMessage('page.cacheSite.platform', '闆嗚揣鍖哄煙') }}</a-button>
+            <a-button type="link" primary @click="handleSeedComplete(record)">{{
+              formatMessage('page.cacheSite.seedComplete', '鎾瀹屾垚') }}</a-button>
+            <a-button type="link" primary @click="handlePlatformIn(record)">{{
+              formatMessage('page.cacheSite.platformIn', '闆嗚揣鍏ュ簱') }}</a-button>
+            <a-button type="link" primary @click="handleEmptyIn(record)">{{ formatMessage('page.cacheSite.emptyIn',
+              '绌烘墭鐩樺叆绔�') }}</a-button>
+            <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '缂栬緫') }}</a-button>
+            <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '鍒犻櫎')
+              }}</a-button>
+          </div>
+        </template>
+      </template>
+    </a-table>
+
+    <a-modal v-model:open="openBindPlatform" @ok="handleBindPlatformOk">
+      <div style="display: flex;justify-content: center;align-items: center;">
+        缁戝畾闆嗚揣鍖哄煙锛�<a-select v-model:value="platform" :options="platformQueryList" style="width: 100px;"></a-select>
+      </div>
+    </a-modal>
+  </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/out/platform/edit.vue b/zy-asrs-admin/src/views/out/platform/edit.vue
new file mode 100644
index 0000000..43d5bdd
--- /dev/null
+++ b/zy-asrs-admin/src/views/out/platform/edit.vue
@@ -0,0 +1,126 @@
+<script setup>
+import { ref, nextTick } from 'vue';
+import { get, post, postBlob, postForm } from '@/utils/request.js'
+import { formatMessage } from '@/utils/localeUtils.js';
+import { message } from 'ant-design-vue';
+
+const formTable = ref(null);
+const submitButton = ref(null);
+const isSave = ref(true);
+const open = ref(false);
+const initFormData = {}
+let formData = ref(initFormData);
+
+const emit = defineEmits(['tableReload'])
+
+const handleOk = (e) => {
+    nextTick(() => {
+        setTimeout(() => {
+            submitButton.value.$el.click();
+        }, 100);
+    });
+};
+
+const onFinish = values => {
+    // console.log('Success:', values);
+    open.value = false;
+    post(isSave.value ? '/api/platform/save' : '/api/platform/update', formData.value).then((resp) => {
+        let result = resp.data;
+        if (result.code === 200) {
+            message.success(isSave.value ? formatMessage('page.add.success', '鏂板鎴愬姛') : formatMessage('page.update.success', '鏇存柊鎴愬姛'));
+        } else {
+            message.error(result.msg);
+        }
+        emit('tableReload', 'reload')
+        nextTick(() => {
+            formTable.value.resetFields()
+        })
+    })
+};
+const onFinishFailed = errorInfo => {
+    console.log('Failed:', errorInfo);
+};
+
+const userQueryList = ref(null);
+userQuery();
+function userQuery() {
+    postForm('/api/user/query', {}).then(resp => {
+        let result = resp.data;
+        userQueryList.value = result.data;
+    })
+}
+
+
+defineExpose({
+    open,
+    formData,
+    initFormData,
+    isSave,
+})
+
+</script>
+
+<script>
+export default {
+    name: '闆嗚揣绠$悊-edit'
+}
+</script>
+
+<template>
+    <div>
+        <a-modal v-model:open="open"
+            :title="isSave ? formatMessage('page.add', '娣诲姞') : formatMessage('page.edit', '缂栬緫')" @ok="handleOk"
+            style="width: 600px;">
+            <a-form :model="formData" ref="formTable" name="formTable" :label-col="{ span: 8 }"
+                :wrapper-col="{ span: 16 }" style="display: flex;justify-content: space-between;flex-wrap: wrap;"
+                autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
+                <a-form-item :label="formatMessage('db.man_platform.platform_no', '闆嗚揣缂栧彿')" name="platformNo"
+                    style="width: 250px;">
+                    <a-input v-model:value="formData.platformNo" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform.status', '鐘舵��')" name="status"
+                    style="width: 250px;">
+                    <a-select v-model:value="formData.status" :options="[
+                        { label: '姝e父', value: 1 },
+                        { label: '绂佺敤', value: 0 },
+                    ]">
+                    </a-select>
+                </a-form-item>
+                <!-- <a-form-item :label="formatMessage('db.man_platform.create_time', '娣诲姞鏃堕棿')" name="createTime"
+                    style="width: 250px;">
+                    <a-date-picker v-model:value="formData.createTime" show-time format="YYYY-MM-DD HH:mm:ss"
+                        value-format="YYYY-MM-DD HH:mm:ss" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform.create_by', '娣诲姞浜哄憳')" name="createBy"
+                    style="width: 250px;">
+                    <a-select v-model:value="formData.createBy" :placeholder="formatMessage('common.select', '璇烽�夋嫨')"
+                        style="width: 100%" show-search :options="userQueryList" optionFilterProp="label"
+                        optionLabelProp="label">
+                    </a-select>
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform.update_time', '淇敼鏃堕棿')" name="updateTime"
+                    style="width: 250px;">
+                    <a-date-picker v-model:value="formData.updateTime" show-time format="YYYY-MM-DD HH:mm:ss"
+                        value-format="YYYY-MM-DD HH:mm:ss" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform.update_by', '淇敼浜哄憳')" name="updateBy"
+                    style="width: 250px;">
+                    <a-select v-model:value="formData.updateBy" :placeholder="formatMessage('common.select', '璇烽�夋嫨')"
+                        style="width: 100%" show-search :options="userQueryList" optionFilterProp="label"
+                        optionLabelProp="label">
+                    </a-select>
+                </a-form-item> -->
+                <a-form-item :label="formatMessage('db.man_platform.memo', '澶囨敞')" name="memo" style="width: 250px;">
+                    <a-input v-model:value="formData.memo" />
+                </a-form-item>
+
+                <a-form-item>
+                    <a-button type="primary" html-type="submit" ref="submitButton"
+                        style="visibility: hidden;">Submit</a-button>
+                </a-form-item>
+            </a-form>
+        </a-modal>
+    </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/base/cacheSite/index.vue b/zy-asrs-admin/src/views/out/platform/index.vue
similarity index 72%
rename from zy-asrs-admin/src/views/base/cacheSite/index.vue
rename to zy-asrs-admin/src/views/out/platform/index.vue
index 1a5fd32..08ed9a8 100644
--- a/zy-asrs-admin/src/views/base/cacheSite/index.vue
+++ b/zy-asrs-admin/src/views/out/platform/index.vue
@@ -11,7 +11,7 @@
 
 const router = useRouter();
 
-const TABLE_KEY = 'table-cacheSite';
+const TABLE_KEY = 'table-platform';
 let currentPage = 1;
 let pageSize = 10;
 const searchInput = ref("")
@@ -32,77 +32,49 @@
 
 const columns = [
   {
-    title: formatMessage('db.man_cache_site.channel', '閫氶亾'),
-    dataIndex: 'channel',
+    title: formatMessage('db.man_platform.platform_no', '闆嗚揣缂栧彿'),
+    dataIndex: 'platformNo',
     width: 140,
     ellipsis: true,
-    ...getColumnSearchProps('channel'),
+    ...getColumnSearchProps('platformNo'),
   },
   {
-    title: formatMessage('db.man_cache_site.site_no', '绔欑偣缂栧彿'),
-    dataIndex: 'siteNo',
+    title: formatMessage('db.man_platform.status', '鐘舵��'),
+    dataIndex: 'status$',
     width: 140,
     ellipsis: true,
-    ...getColumnSearchProps('siteNo'),
+    ...getColumnSearchProps('status$'),
   },
   {
-    title: formatMessage('db.man_cache_site.site_status', '绔欑偣鐘舵��'),
-    dataIndex: 'siteStatus$',
+    title: formatMessage('db.man_platform.create_time', '娣诲姞鏃堕棿'),
+    dataIndex: 'createTime$',
     width: 140,
     ellipsis: true,
-    ...getColumnSearchProps('siteStatus$'),
+    ...getColumnSearchProps('createTime$'),
   },
   {
-    title: formatMessage('db.man_cache_site.order_id', '璁㈠崟ID'),
-    dataIndex: 'orderId$',
+    title: formatMessage('db.man_platform.create_by', '娣诲姞浜哄憳'),
+    dataIndex: 'createBy$',
     width: 140,
     ellipsis: true,
-    ...getColumnSearchProps('orderId$'),
+    ...getColumnSearchProps('createBy$'),
   },
   {
-    title: formatMessage('db.man_cache_site.order_no', '璁㈠崟缂栧彿'),
-    dataIndex: 'orderNo',
-    width: 140,
-    ellipsis: true,
-    ...getColumnSearchProps('orderNo'),
-  },
-  // {
-  //   title: formatMessage('db.man_cache_site.status', '鐘舵��'),
-  //   dataIndex: 'status$',
-  //   width: 140,
-  //   ellipsis: true,
-  //   ...getColumnSearchProps('status$'),
-  // },
-  // {
-  //   title: formatMessage('db.man_cache_site.create_time', '娣诲姞鏃堕棿'),
-  //   dataIndex: 'createTime$',
-  //   width: 140,
-  //   ellipsis: true,
-  //   ...getColumnSearchProps('createTime$'),
-  // },
-  // {
-  //   title: formatMessage('db.man_cache_site.create_by', '娣诲姞浜哄憳'),
-  //   dataIndex: 'createBy$',
-  //   width: 140,
-  //   ellipsis: true,
-  //   ...getColumnSearchProps('createBy$'),
-  // },
-  {
-    title: formatMessage('db.man_cache_site.update_time', '淇敼鏃堕棿'),
+    title: formatMessage('db.man_platform.update_time', '淇敼鏃堕棿'),
     dataIndex: 'updateTime$',
     width: 140,
     ellipsis: true,
     ...getColumnSearchProps('updateTime$'),
   },
   {
-    title: formatMessage('db.man_cache_site.update_by', '淇敼浜哄憳'),
+    title: formatMessage('db.man_platform.update_by', '淇敼浜哄憳'),
     dataIndex: 'updateBy$',
     width: 140,
     ellipsis: true,
     ...getColumnSearchProps('updateBy$'),
   },
   {
-    title: formatMessage('db.man_cache_site.memo', '澶囨敞'),
+    title: formatMessage('db.man_platform.memo', '澶囨敞'),
     dataIndex: 'memo',
     width: 140,
     ellipsis: true,
@@ -114,7 +86,7 @@
     name: 'oper',
     dataIndex: 'oper',
     key: 'oper',
-    width: 140,
+    width: 200,
     fixed: 'right',
   },
 ];
@@ -135,7 +107,7 @@
 
 function getPage() {
   state.loading = true;
-  post('/api/cacheSite/page', {
+  post('/api/platform/page', {
     current: currentPage,
     pageSize: pageSize,
     condition: searchInput.value
@@ -169,7 +141,7 @@
     onOk: async () => {
       const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
       try {
-        post('/api/cacheSite/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+        post('/api/platform/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
           let result = resp.data;
           if (result.code === 200) {
             message.success(result.msg);
@@ -187,7 +159,7 @@
 }
 
 const handleExport = async (intl) => {
-  postBlob('/api/cacheSite/export', {}).then(result => {
+  postBlob('/api/platform/export', {}).then(result => {
     const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
     window.location.href = window.URL.createObjectURL(blob);
     return true;
@@ -209,11 +181,38 @@
   getPage()
 }
 
+const handleShipped = (item) => {
+  Modal.confirm({
+    title: formatMessage('page.shipped', '鍙戣揣'),
+    content: formatMessage('page.shipped.confirm', '纭畾鍙戣揣鍚楋紵'),
+    maskClosable: true,
+    onOk: async () => {
+      const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
+      try {
+        post('/api/platform/shipped', {
+          platformId: item.id,
+        }).then(resp => {
+          let result = resp.data;
+          if (result.code === 200) {
+            message.success(result.msg);
+          } else {
+            message.error(result.msg);
+          }
+          getPage()
+          hide()
+        })
+      } catch (error) {
+        message.error(formatMessage('common.fail', '璇锋眰澶辫触'));
+      }
+    },
+  });
+}
+
 </script>
 
 <script>
 export default {
-  name: '鎾绔欑偣'
+  name: '闆嗚揣绠$悊'
 }
 </script>
 
@@ -236,6 +235,8 @@
       <template #bodyCell="{ column, text, record }">
         <template v-if="column.dataIndex === 'oper'">
           <div style="display: flex;justify-content: space-evenly;">
+            <a-button type="link" primary @click="handleShipped(record)">{{ formatMessage('page.platform.shipped', '鍙戣揣')
+              }}</a-button>
             <a-button type="link" primary @click="handleEdit(record)">{{ formatMessage('page.edit', '缂栬緫') }}</a-button>
             <a-button type="link" danger @click="handleDel([record])">{{ formatMessage('page.delete', '鍒犻櫎')
               }}</a-button>
diff --git a/zy-asrs-admin/src/views/out/platformDetl/edit.vue b/zy-asrs-admin/src/views/out/platformDetl/edit.vue
new file mode 100644
index 0000000..d32642b
--- /dev/null
+++ b/zy-asrs-admin/src/views/out/platformDetl/edit.vue
@@ -0,0 +1,203 @@
+<script setup>
+import { ref, nextTick } from 'vue';
+import { get, post, postBlob, postForm } from '@/utils/request.js'
+import { formatMessage } from '@/utils/localeUtils.js';
+import { message } from 'ant-design-vue';
+
+const formTable = ref(null);
+const submitButton = ref(null);
+const isSave = ref(true);
+const open = ref(false);
+const initFormData = {}
+let formData = ref(initFormData);
+
+const emit = defineEmits(['tableReload'])
+
+const handleOk = (e) => {
+    nextTick(() => {
+        setTimeout(() => {
+            submitButton.value.$el.click();
+        }, 100);
+    });
+};
+
+const onFinish = values => {
+    // console.log('Success:', values);
+    open.value = false;
+    post(isSave.value ? '/api/platformDetl/save' : '/api/platformDetl/update', formData.value).then((resp) => {
+        let result = resp.data;
+        if (result.code === 200) {
+            message.success(isSave.value ? formatMessage('page.add.success', '鏂板鎴愬姛') : formatMessage('page.update.success', '鏇存柊鎴愬姛'));
+        } else {
+            message.error(result.msg);
+        }
+        emit('tableReload', 'reload')
+        nextTick(() => {
+            formTable.value.resetFields()
+        })
+    })
+};
+const onFinishFailed = errorInfo => {
+    console.log('Failed:', errorInfo);
+};
+
+const platformQueryList = ref(null);
+platformQuery();
+function platformQuery() {
+    postForm('/api/platform/query', {}).then(resp => {
+        let result = resp.data;
+        platformQueryList.value = result.data;
+    })
+}
+const orderQueryList = ref(null);
+orderQuery();
+function orderQuery() {
+    postForm('/api/order/query', {}).then(resp => {
+        let result = resp.data;
+        orderQueryList.value = result.data;
+    })
+}
+const orderDetlQueryList = ref(null);
+orderDetlQuery();
+function orderDetlQuery() {
+    postForm('/api/orderDetl/query', {}).then(resp => {
+        let result = resp.data;
+        orderDetlQueryList.value = result.data;
+    })
+}
+const taskDetlQueryList = ref(null);
+taskDetlQuery();
+function taskDetlQuery() {
+    postForm('/api/taskDetl/query', {}).then(resp => {
+        let result = resp.data;
+        taskDetlQueryList.value = result.data;
+    })
+}
+const userQueryList = ref(null);
+userQuery();
+function userQuery() {
+    postForm('/api/user/query', {}).then(resp => {
+        let result = resp.data;
+        userQueryList.value = result.data;
+    })
+}
+
+
+defineExpose({
+    open,
+    formData,
+    initFormData,
+    isSave,
+})
+
+</script>
+
+<script>
+export default {
+    name: '闆嗚揣搴撳瓨-edit'
+}
+</script>
+
+<template>
+    <div>
+        <a-modal v-model:open="open"
+            :title="isSave ? formatMessage('page.add', '娣诲姞') : formatMessage('page.edit', '缂栬緫')" @ok="handleOk"
+            style="width: 600px;">
+            <a-form :model="formData" ref="formTable" name="formTable" :label-col="{ span: 8 }"
+                :wrapper-col="{ span: 16 }" style="display: flex;justify-content: space-between;flex-wrap: wrap;"
+                autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
+                <a-form-item :label="formatMessage('db.man_platform_detl.platform_id', '闆嗚揣ID')" name="platformId"
+                    style="width: 250px;">
+                    <a-select v-model:value="formData.platformId" :placeholder="formatMessage('common.select', '璇烽�夋嫨')"
+                        style="width: 100%" show-search :options="platformQueryList" optionFilterProp="label"
+                        optionLabelProp="label">
+                    </a-select>
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.platform_no', '闆嗚揣缂栧彿')" name="platformNo"
+                    style="width: 250px;">
+                    <a-input v-model:value="formData.platformNo" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.order_id', '璁㈠崟')" name="orderId"
+                    style="width: 250px;">
+                    <a-select v-model:value="formData.orderId" :placeholder="formatMessage('common.select', '璇烽�夋嫨')"
+                        style="width: 100%" show-search :options="orderQueryList" optionFilterProp="label"
+                        optionLabelProp="label">
+                    </a-select>
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.order_detl_id', '璁㈠崟鏄庣粏')" name="orderDetlId"
+                    style="width: 250px;">
+                    <a-select v-model:value="formData.orderDetlId" :placeholder="formatMessage('common.select', '璇烽�夋嫨')"
+                        style="width: 100%" show-search :options="orderDetlQueryList" optionFilterProp="label"
+                        optionLabelProp="label">
+                    </a-select>
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.task_detl_id', '浠诲姟鏄庣粏')" name="taskDetlId"
+                    style="width: 250px;">
+                    <a-select v-model:value="formData.taskDetlId" :placeholder="formatMessage('common.select', '璇烽�夋嫨')"
+                        style="width: 100%" show-search :options="taskDetlQueryList" optionFilterProp="label"
+                        optionLabelProp="label">
+                    </a-select>
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.matnr', '鍟嗗搧缂栧彿')" name="matnr"
+                    style="width: 250px;">
+                    <a-input v-model:value="formData.matnr" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.batch', '鎵瑰彿')" name="batch"
+                    style="width: 250px;">
+                    <a-input v-model:value="formData.batch" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.field_params', '绱㈠紩瀛楁')" name="fieldParams"
+                    style="width: 250px;">
+                    <a-input v-model:value="formData.fieldParams" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.anfme', '鏁伴噺')" name="anfme"
+                    style="width: 250px;">
+                    <a-input v-model:value="formData.anfme" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.status', '鐘舵��')" name="status"
+                    style="width: 250px;">
+                    <a-select v-model:value="formData.status" :options="[
+                        { label: '姝e父', value: 1 },
+                        { label: '绂佺敤', value: 0 },
+                    ]">
+                    </a-select>
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.create_time', '娣诲姞鏃堕棿')" name="createTime"
+                    style="width: 250px;">
+                    <a-date-picker v-model:value="formData.createTime" show-time format="YYYY-MM-DD HH:mm:ss"
+                        value-format="YYYY-MM-DD HH:mm:ss" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.create_by', '娣诲姞浜哄憳')" name="createBy"
+                    style="width: 250px;">
+                    <a-select v-model:value="formData.createBy" :placeholder="formatMessage('common.select', '璇烽�夋嫨')"
+                        style="width: 100%" show-search :options="userQueryList" optionFilterProp="label"
+                        optionLabelProp="label">
+                    </a-select>
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.update_time', '淇敼鏃堕棿')" name="updateTime"
+                    style="width: 250px;">
+                    <a-date-picker v-model:value="formData.updateTime" show-time format="YYYY-MM-DD HH:mm:ss"
+                        value-format="YYYY-MM-DD HH:mm:ss" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.update_by', '淇敼浜哄憳')" name="updateBy"
+                    style="width: 250px;">
+                    <a-select v-model:value="formData.updateBy" :placeholder="formatMessage('common.select', '璇烽�夋嫨')"
+                        style="width: 100%" show-search :options="userQueryList" optionFilterProp="label"
+                        optionLabelProp="label">
+                    </a-select>
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_platform_detl.memo', '澶囨敞')" name="memo"
+                    style="width: 250px;">
+                    <a-input v-model:value="formData.memo" />
+                </a-form-item>
+
+                <a-form-item>
+                    <a-button type="primary" html-type="submit" ref="submitButton"
+                        style="visibility: hidden;">Submit</a-button>
+                </a-form-item>
+            </a-form>
+        </a-modal>
+    </div>
+</template>
+
+<style></style>
diff --git a/zy-asrs-admin/src/views/base/cacheSite/index.vue b/zy-asrs-admin/src/views/out/platformDetl/index.vue
similarity index 63%
copy from zy-asrs-admin/src/views/base/cacheSite/index.vue
copy to zy-asrs-admin/src/views/out/platformDetl/index.vue
index 1a5fd32..a0cbf70 100644
--- a/zy-asrs-admin/src/views/base/cacheSite/index.vue
+++ b/zy-asrs-admin/src/views/out/platformDetl/index.vue
@@ -11,7 +11,7 @@
 
 const router = useRouter();
 
-const TABLE_KEY = 'table-cacheSite';
+const TABLE_KEY = 'table-platformDetl';
 let currentPage = 1;
 let pageSize = 10;
 const searchInput = ref("")
@@ -32,91 +32,126 @@
 
 const columns = [
   {
-    title: formatMessage('db.man_cache_site.channel', '閫氶亾'),
-    dataIndex: 'channel',
+    title: formatMessage('db.man_platform_detl.platform_id', '闆嗚揣ID'),
+    dataIndex: 'platformId$',
     width: 140,
     ellipsis: true,
-    ...getColumnSearchProps('channel'),
+    ...getColumnSearchProps('platformId$'),
   },
   {
-    title: formatMessage('db.man_cache_site.site_no', '绔欑偣缂栧彿'),
-    dataIndex: 'siteNo',
+    title: formatMessage('db.man_platform_detl.platform_no', '闆嗚揣缂栧彿'),
+    dataIndex: 'platformNo',
     width: 140,
     ellipsis: true,
-    ...getColumnSearchProps('siteNo'),
+    ...getColumnSearchProps('platformNo'),
   },
   {
-    title: formatMessage('db.man_cache_site.site_status', '绔欑偣鐘舵��'),
-    dataIndex: 'siteStatus$',
+    title: formatMessage('db.man_platform_detl.order_id', '璁㈠崟'),
+    dataIndex: 'orderId',
     width: 140,
     ellipsis: true,
-    ...getColumnSearchProps('siteStatus$'),
+    ...getColumnSearchProps('orderId'),
   },
   {
-    title: formatMessage('db.man_cache_site.order_id', '璁㈠崟ID'),
-    dataIndex: 'orderId$',
+    title: formatMessage('db.man_platform_detl.order_detl_id', '璁㈠崟鏄庣粏'),
+    dataIndex: 'orderDetlId$',
     width: 140,
     ellipsis: true,
-    ...getColumnSearchProps('orderId$'),
+    ...getColumnSearchProps('orderDetlId$'),
   },
   {
-    title: formatMessage('db.man_cache_site.order_no', '璁㈠崟缂栧彿'),
-    dataIndex: 'orderNo',
+    title: formatMessage('db.man_platform_detl.task_detl_id', '浠诲姟鏄庣粏'),
+    dataIndex: 'taskDetlId$',
     width: 140,
     ellipsis: true,
-    ...getColumnSearchProps('orderNo'),
+    ...getColumnSearchProps('taskDetlId$'),
   },
-  // {
-  //   title: formatMessage('db.man_cache_site.status', '鐘舵��'),
-  //   dataIndex: 'status$',
-  //   width: 140,
-  //   ellipsis: true,
-  //   ...getColumnSearchProps('status$'),
-  // },
-  // {
-  //   title: formatMessage('db.man_cache_site.create_time', '娣诲姞鏃堕棿'),
-  //   dataIndex: 'createTime$',
-  //   width: 140,
-  //   ellipsis: true,
-  //   ...getColumnSearchProps('createTime$'),
-  // },
-  // {
-  //   title: formatMessage('db.man_cache_site.create_by', '娣诲姞浜哄憳'),
-  //   dataIndex: 'createBy$',
-  //   width: 140,
-  //   ellipsis: true,
-  //   ...getColumnSearchProps('createBy$'),
-  // },
   {
-    title: formatMessage('db.man_cache_site.update_time', '淇敼鏃堕棿'),
+    title: formatMessage('db.man_platform_detl.matnr', '鍟嗗搧缂栧彿'),
+    dataIndex: 'matnr',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('matnr'),
+  },
+  {
+    title: formatMessage('db.man_platform_detl.batch', '鎵瑰彿'),
+    dataIndex: 'batch',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('batch'),
+  },
+  {
+    title: formatMessage('db.man_platform_detl.field_params', '绱㈠紩瀛楁'),
+    dataIndex: 'fieldParams',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('fieldParams'),
+  },
+  {
+    title: formatMessage('db.man_platform_detl.anfme', '闇�姹傛暟閲�'),
+    dataIndex: 'anfme',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('anfme'),
+  },
+  {
+    title: formatMessage('db.man_platform_detl.qty', '瀹為檯鏁伴噺'),
+    dataIndex: 'qty',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('qty'),
+  },
+  {
+    title: formatMessage('db.man_platform_detl.status', '鐘舵��'),
+    dataIndex: 'status$',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('status$'),
+  },
+  {
+    title: formatMessage('db.man_platform_detl.create_time', '娣诲姞鏃堕棿'),
+    dataIndex: 'createTime$',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('createTime$'),
+  },
+  {
+    title: formatMessage('db.man_platform_detl.create_by', '娣诲姞浜哄憳'),
+    dataIndex: 'createBy$',
+    width: 140,
+    ellipsis: true,
+    ...getColumnSearchProps('createBy$'),
+  },
+  {
+    title: formatMessage('db.man_platform_detl.update_time', '淇敼鏃堕棿'),
     dataIndex: 'updateTime$',
     width: 140,
     ellipsis: true,
     ...getColumnSearchProps('updateTime$'),
   },
   {
-    title: formatMessage('db.man_cache_site.update_by', '淇敼浜哄憳'),
+    title: formatMessage('db.man_platform_detl.update_by', '淇敼浜哄憳'),
     dataIndex: 'updateBy$',
     width: 140,
     ellipsis: true,
     ...getColumnSearchProps('updateBy$'),
   },
   {
-    title: formatMessage('db.man_cache_site.memo', '澶囨敞'),
+    title: formatMessage('db.man_platform_detl.memo', '澶囨敞'),
     dataIndex: 'memo',
     width: 140,
     ellipsis: true,
     ...getColumnSearchProps('memo'),
   },
 
-  {
-    title: formatMessage('common.operation', '鎿嶄綔'),
-    name: 'oper',
-    dataIndex: 'oper',
-    key: 'oper',
-    width: 140,
-    fixed: 'right',
-  },
+  // {
+  //   title: formatMessage('common.operation', '鎿嶄綔'),
+  //   name: 'oper',
+  //   dataIndex: 'oper',
+  //   key: 'oper',
+  //   width: 140,
+  //   fixed: 'right',
+  // },
 ];
 
 const hasSelected = computed(() => state.selectedRowKeys.length > 0);
@@ -135,7 +170,7 @@
 
 function getPage() {
   state.loading = true;
-  post('/api/cacheSite/page', {
+  post('/api/platformDetl/page', {
     current: currentPage,
     pageSize: pageSize,
     condition: searchInput.value
@@ -169,7 +204,7 @@
     onOk: async () => {
       const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
       try {
-        post('/api/cacheSite/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+        post('/api/platformDetl/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
           let result = resp.data;
           if (result.code === 200) {
             message.success(result.msg);
@@ -187,7 +222,7 @@
 }
 
 const handleExport = async (intl) => {
-  postBlob('/api/cacheSite/export', {}).then(result => {
+  postBlob('/api/platformDetl/export', {}).then(result => {
     const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
     window.location.href = window.URL.createObjectURL(blob);
     return true;
@@ -213,7 +248,7 @@
 
 <script>
 export default {
-  name: '鎾绔欑偣'
+  name: '闆嗚揣搴撳瓨'
 }
 </script>
 
@@ -224,7 +259,7 @@
       <a-input-search v-model:value="searchInput" :placeholder="formatMessage('page.input', '璇疯緭鍏�')"
         style="width: 200px;" @search="onSearch" />
       <div class="table-header-right">
-        <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '娣诲姞') }}</a-button>
+        <!-- <a-button @click="handleEdit(null)" type="primary">{{ formatMessage('page.add', '娣诲姞') }}</a-button> -->
         <a-button @click="handleExport">{{ formatMessage('page.export', '瀵煎嚭') }}</a-button>
       </div>
     </div>
diff --git a/zy-asrs-admin/src/views/out/wave/index.vue b/zy-asrs-admin/src/views/out/wave/index.vue
index aac8b81..86cd1f7 100644
--- a/zy-asrs-admin/src/views/out/wave/index.vue
+++ b/zy-asrs-admin/src/views/out/wave/index.vue
@@ -313,7 +313,7 @@
       <template #bodyCell="{ column, text, record }">
         <template v-if="column.dataIndex === 'oper'">
           <div style="display: flex;justify-content: space-evenly;">
-            <a-button type="link" primary @click="handleGenerateOut(record.waveId)">{{
+            <a-button type="link" primary :disabled="record.waveStatus != 0" @click="handleGenerateOut(record.waveId)">{{
               formatMessage('page.generateOut',
                 '鐢熸垚鍑哄簱浠诲姟')
             }}</a-button>
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/CacheSiteController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/CacheSiteController.java
index 14aa1a8..e699718 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/CacheSiteController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/CacheSiteController.java
@@ -4,6 +4,13 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.common.R;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wms.asrs.entity.Platform;
+import com.zy.asrs.wms.asrs.entity.param.BindPlatformParam;
+import com.zy.asrs.wms.asrs.entity.param.CacheSiteEmptyInParam;
+import com.zy.asrs.wms.asrs.entity.param.PlatformInParam;
+import com.zy.asrs.wms.asrs.entity.param.SeedCompleteParam;
+import com.zy.asrs.wms.asrs.service.PlatformService;
 import com.zy.asrs.wms.common.annotation.OperationLog;
 import com.zy.asrs.wms.common.domain.BaseParam;
 import com.zy.asrs.wms.common.domain.KeyValVo;
@@ -17,10 +24,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @RestController
 @RequestMapping("/api")
@@ -28,6 +32,8 @@
 
     @Autowired
     private CacheSiteService cacheSiteService;
+    @Autowired
+    private PlatformService platformService;
 
     @PreAuthorize("hasAuthority('asrs:cacheSite:list')")
     @PostMapping("/cacheSite/page")
@@ -105,4 +111,57 @@
         return R.ok().add(cacheSiteService.getChannelList());
     }
 
+    @PreAuthorize("hasAuthority('asrs:cacheSite:update')")
+    @OperationLog("鎾瀹屾垚棰勬娴�")
+    @PostMapping("/cacheSite/seedCompletePreview")
+    public R seedCompletePreview(@RequestBody SeedCompleteParam param) {
+        boolean check = cacheSiteService.seedCompletePreview(param);
+        return R.ok().add(check);
+    }
+
+    @PreAuthorize("hasAuthority('asrs:cacheSite:update')")
+    @OperationLog("鎾瀹屾垚")
+    @PostMapping("/cacheSite/seedComplete")
+    public R seedComplete(@RequestBody SeedCompleteParam param) {
+        cacheSiteService.seedComplete(param);
+        return R.ok();
+    }
+
+    @PreAuthorize("hasAuthority('asrs:cacheSite:update')")
+    @OperationLog("闆嗚揣鍏ュ簱")
+    @PostMapping("/cacheSite/platformIn")
+    public R platformIn(@RequestBody PlatformInParam param) {
+        return R.ok();
+    }
+
+    @PreAuthorize("hasAuthority('asrs:cacheSite:update')")
+    @OperationLog("绌烘墭鐩樺叆绔�")
+    @PostMapping("/cacheSite/emptyIn")
+    public R cacheSiteEmptyIn(@RequestBody CacheSiteEmptyInParam param) {
+        return R.ok();
+    }
+
+    @PreAuthorize("hasAuthority('asrs:cacheSite:update')")
+    @OperationLog("缁戝畾闆嗚揣鍖哄煙缂栧彿")
+    @PostMapping("/cacheSite/bindPlatform")
+    public R bindPlatform(@RequestBody BindPlatformParam param) {
+        CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getSiteNo, param.getSiteNo()));
+        if(cacheSite == null) {
+            throw new CoolException("缂撳瓨绔欑偣涓嶅瓨鍦�");
+        }
+
+        Platform platform = platformService.getById(param.getPlatformId());
+        if (platform == null) {
+            throw new CoolException("闆嗚揣鍖哄煙涓嶅瓨鍦�");
+        }
+
+        cacheSite.setPlatformId(platform.getId());
+        cacheSite.setPlatformNo(platform.getPlatformNo());
+        cacheSite.setUpdateTime(new Date());
+        if (!cacheSiteService.updateById(cacheSite)) {
+            throw new CoolException("缁戝畾闆嗚揣鍖哄煙缂栧彿澶辫触");
+        }
+        return R.ok();
+    }
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformController.java
new file mode 100644
index 0000000..22ec9f3
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformController.java
@@ -0,0 +1,111 @@
+package com.zy.asrs.wms.asrs.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wms.asrs.entity.param.PlatformShippedParam;
+import com.zy.asrs.wms.common.annotation.OperationLog;
+import com.zy.asrs.wms.common.domain.BaseParam;
+import com.zy.asrs.wms.common.domain.KeyValVo;
+import com.zy.asrs.wms.common.domain.PageParam;
+import com.zy.asrs.wms.asrs.entity.Platform;
+import com.zy.asrs.wms.asrs.service.PlatformService;
+import com.zy.asrs.wms.system.controller.BaseController;
+import com.zy.asrs.wms.utils.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api")
+public class PlatformController extends BaseController {
+
+    @Autowired
+    private PlatformService platformService;
+
+    @PreAuthorize("hasAuthority('asrs:platform:list')")
+    @PostMapping("/platform/page")
+    public R page(@RequestBody Map<String, Object> map) {
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<Platform, BaseParam> pageParam = new PageParam<>(baseParam, Platform.class);
+        return R.ok().add(platformService.page(pageParam, pageParam.buildWrapper(true)));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platform:list')")
+    @PostMapping("/platform/list")
+    public R list(@RequestBody Map<String, Object> map) {
+        return R.ok().add(platformService.list());
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platform:list')")
+    @GetMapping("/platform/{id}")
+    public R get(@PathVariable("id") Long id) {
+        return R.ok().add(platformService.getById(id));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platform:save')")
+    @OperationLog("娣诲姞闆嗚揣绠$悊")
+    @PostMapping("/platform/save")
+    public R save(@RequestBody Platform platform) {
+        if (!platformService.save(platform)) {
+            return R.error("娣诲姞澶辫触");
+        }
+        return R.ok("娣诲姞鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platform:update')")
+    @OperationLog("淇敼闆嗚揣绠$悊")
+    @PostMapping("/platform/update")
+    public R update(@RequestBody Platform platform) {
+        if (!platformService.updateById(platform)) {
+            return R.error("淇敼澶辫触");
+        }
+        return R.ok("淇敼鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platform:remove')")
+    @OperationLog("鍒犻櫎闆嗚揣绠$悊")
+    @PostMapping("/platform/remove/{ids}")
+    public R remove(@PathVariable Long[] ids) {
+        if (!platformService.removeByIds(Arrays.asList(ids))) {
+            return R.error("鍒犻櫎澶辫触");
+        }
+        return R.ok("鍒犻櫎鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platform:list')")
+    @PostMapping("/platform/query")
+    public R query(@RequestParam(required = false) String condition) {
+        List<KeyValVo> vos = new ArrayList<>();
+        LambdaQueryWrapper<Platform> wrapper = new LambdaQueryWrapper<>();
+        if (!Cools.isEmpty(condition)) {
+            wrapper.like(Platform::getId, condition);
+        }
+        platformService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
+                item -> vos.add(new KeyValVo(item.getId(), item.getPlatformNo()))
+        );
+        return R.ok().add(vos);
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platform:list')")
+    @PostMapping("/platform/export")
+    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+        ExcelUtil.build(ExcelUtil.create(platformService.list(), Platform.class), response);
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platform:update')")
+    @OperationLog("闆嗚揣鍖哄煙鍙戣揣")
+    @PostMapping("/platform/shipped")
+    public R shipped(@RequestBody PlatformShippedParam param) {
+        platformService.shipped(param);
+        return R.ok();
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformDetlController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformDetlController.java
new file mode 100644
index 0000000..0725d74
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformDetlController.java
@@ -0,0 +1,102 @@
+package com.zy.asrs.wms.asrs.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wms.common.annotation.OperationLog;
+import com.zy.asrs.wms.common.domain.BaseParam;
+import com.zy.asrs.wms.common.domain.KeyValVo;
+import com.zy.asrs.wms.common.domain.PageParam;
+import com.zy.asrs.wms.asrs.entity.PlatformDetl;
+import com.zy.asrs.wms.asrs.service.PlatformDetlService;
+import com.zy.asrs.wms.system.controller.BaseController;
+import com.zy.asrs.wms.utils.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api")
+public class PlatformDetlController extends BaseController {
+
+    @Autowired
+    private PlatformDetlService platformDetlService;
+
+    @PreAuthorize("hasAuthority('asrs:platformDetl:list')")
+    @PostMapping("/platformDetl/page")
+    public R page(@RequestBody Map<String, Object> map) {
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<PlatformDetl, BaseParam> pageParam = new PageParam<>(baseParam, PlatformDetl.class);
+        return R.ok().add(platformDetlService.page(pageParam, pageParam.buildWrapper(true)));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetl:list')")
+    @PostMapping("/platformDetl/list")
+    public R list(@RequestBody Map<String, Object> map) {
+        return R.ok().add(platformDetlService.list());
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetl:list')")
+    @GetMapping("/platformDetl/{id}")
+    public R get(@PathVariable("id") Long id) {
+        return R.ok().add(platformDetlService.getById(id));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetl:save')")
+    @OperationLog("娣诲姞闆嗚揣搴撳瓨")
+    @PostMapping("/platformDetl/save")
+    public R save(@RequestBody PlatformDetl platformDetl) {
+        if (!platformDetlService.save(platformDetl)) {
+            return R.error("娣诲姞澶辫触");
+        }
+        return R.ok("娣诲姞鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetl:update')")
+    @OperationLog("淇敼闆嗚揣搴撳瓨")
+    @PostMapping("/platformDetl/update")
+    public R update(@RequestBody PlatformDetl platformDetl) {
+        if (!platformDetlService.updateById(platformDetl)) {
+            return R.error("淇敼澶辫触");
+        }
+        return R.ok("淇敼鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetl:remove')")
+    @OperationLog("鍒犻櫎闆嗚揣搴撳瓨")
+    @PostMapping("/platformDetl/remove/{ids}")
+    public R remove(@PathVariable Long[] ids) {
+        if (!platformDetlService.removeByIds(Arrays.asList(ids))) {
+            return R.error("鍒犻櫎澶辫触");
+        }
+        return R.ok("鍒犻櫎鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetl:list')")
+    @PostMapping("/platformDetl/query")
+    public R query(@RequestParam(required = false) String condition) {
+        List<KeyValVo> vos = new ArrayList<>();
+        LambdaQueryWrapper<PlatformDetl> wrapper = new LambdaQueryWrapper<>();
+        if (!Cools.isEmpty(condition)) {
+            wrapper.like(PlatformDetl::getId, condition);
+        }
+        platformDetlService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
+                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
+        );
+        return R.ok().add(vos);
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetl:list')")
+    @PostMapping("/platformDetl/export")
+    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+        ExcelUtil.build(ExcelUtil.create(platformDetlService.list(), PlatformDetl.class), response);
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformDetlLogController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformDetlLogController.java
new file mode 100644
index 0000000..9ed6050
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformDetlLogController.java
@@ -0,0 +1,102 @@
+package com.zy.asrs.wms.asrs.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wms.common.annotation.OperationLog;
+import com.zy.asrs.wms.common.domain.BaseParam;
+import com.zy.asrs.wms.common.domain.KeyValVo;
+import com.zy.asrs.wms.common.domain.PageParam;
+import com.zy.asrs.wms.asrs.entity.PlatformDetlLog;
+import com.zy.asrs.wms.asrs.service.PlatformDetlLogService;
+import com.zy.asrs.wms.system.controller.BaseController;
+import com.zy.asrs.wms.utils.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api")
+public class PlatformDetlLogController extends BaseController {
+
+    @Autowired
+    private PlatformDetlLogService platformDetlLogService;
+
+    @PreAuthorize("hasAuthority('asrs:platformDetlLog:list')")
+    @PostMapping("/platformDetlLog/page")
+    public R page(@RequestBody Map<String, Object> map) {
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<PlatformDetlLog, BaseParam> pageParam = new PageParam<>(baseParam, PlatformDetlLog.class);
+        return R.ok().add(platformDetlLogService.page(pageParam, pageParam.buildWrapper(true)));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetlLog:list')")
+    @PostMapping("/platformDetlLog/list")
+    public R list(@RequestBody Map<String, Object> map) {
+        return R.ok().add(platformDetlLogService.list());
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetlLog:list')")
+    @GetMapping("/platformDetlLog/{id}")
+    public R get(@PathVariable("id") Long id) {
+        return R.ok().add(platformDetlLogService.getById(id));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetlLog:save')")
+    @OperationLog("娣诲姞闆嗚揣鍖哄煙搴撳瓨鍘嗗彶")
+    @PostMapping("/platformDetlLog/save")
+    public R save(@RequestBody PlatformDetlLog platformDetlLog) {
+        if (!platformDetlLogService.save(platformDetlLog)) {
+            return R.error("娣诲姞澶辫触");
+        }
+        return R.ok("娣诲姞鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetlLog:update')")
+    @OperationLog("淇敼闆嗚揣鍖哄煙搴撳瓨鍘嗗彶")
+    @PostMapping("/platformDetlLog/update")
+    public R update(@RequestBody PlatformDetlLog platformDetlLog) {
+        if (!platformDetlLogService.updateById(platformDetlLog)) {
+            return R.error("淇敼澶辫触");
+        }
+        return R.ok("淇敼鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetlLog:remove')")
+    @OperationLog("鍒犻櫎闆嗚揣鍖哄煙搴撳瓨鍘嗗彶")
+    @PostMapping("/platformDetlLog/remove/{ids}")
+    public R remove(@PathVariable Long[] ids) {
+        if (!platformDetlLogService.removeByIds(Arrays.asList(ids))) {
+            return R.error("鍒犻櫎澶辫触");
+        }
+        return R.ok("鍒犻櫎鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetlLog:list')")
+    @PostMapping("/platformDetlLog/query")
+    public R query(@RequestParam(required = false) String condition) {
+        List<KeyValVo> vos = new ArrayList<>();
+        LambdaQueryWrapper<PlatformDetlLog> wrapper = new LambdaQueryWrapper<>();
+        if (!Cools.isEmpty(condition)) {
+            wrapper.like(PlatformDetlLog::getId, condition);
+        }
+        platformDetlLogService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
+                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
+        );
+        return R.ok().add(vos);
+    }
+
+    @PreAuthorize("hasAuthority('asrs:platformDetlLog:list')")
+    @PostMapping("/platformDetlLog/export")
+    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+        ExcelUtil.build(ExcelUtil.create(platformDetlLogService.list(), PlatformDetlLog.class), response);
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveDetlLogController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveDetlLogController.java
new file mode 100644
index 0000000..22b1498
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveDetlLogController.java
@@ -0,0 +1,102 @@
+package com.zy.asrs.wms.asrs.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wms.common.annotation.OperationLog;
+import com.zy.asrs.wms.common.domain.BaseParam;
+import com.zy.asrs.wms.common.domain.KeyValVo;
+import com.zy.asrs.wms.common.domain.PageParam;
+import com.zy.asrs.wms.asrs.entity.WaveDetlLog;
+import com.zy.asrs.wms.asrs.service.WaveDetlLogService;
+import com.zy.asrs.wms.system.controller.BaseController;
+import com.zy.asrs.wms.utils.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api")
+public class WaveDetlLogController extends BaseController {
+
+    @Autowired
+    private WaveDetlLogService waveDetlLogService;
+
+    @PreAuthorize("hasAuthority('asrs:waveDetlLog:list')")
+    @PostMapping("/waveDetlLog/page")
+    public R page(@RequestBody Map<String, Object> map) {
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<WaveDetlLog, BaseParam> pageParam = new PageParam<>(baseParam, WaveDetlLog.class);
+        return R.ok().add(waveDetlLogService.page(pageParam, pageParam.buildWrapper(true)));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveDetlLog:list')")
+    @PostMapping("/waveDetlLog/list")
+    public R list(@RequestBody Map<String, Object> map) {
+        return R.ok().add(waveDetlLogService.list());
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveDetlLog:list')")
+    @GetMapping("/waveDetlLog/{id}")
+    public R get(@PathVariable("id") Long id) {
+        return R.ok().add(waveDetlLogService.getById(id));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveDetlLog:save')")
+    @OperationLog("娣诲姞娉㈡鏄庣粏鍘嗗彶")
+    @PostMapping("/waveDetlLog/save")
+    public R save(@RequestBody WaveDetlLog waveDetlLog) {
+        if (!waveDetlLogService.save(waveDetlLog)) {
+            return R.error("娣诲姞澶辫触");
+        }
+        return R.ok("娣诲姞鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveDetlLog:update')")
+    @OperationLog("淇敼娉㈡鏄庣粏鍘嗗彶")
+    @PostMapping("/waveDetlLog/update")
+    public R update(@RequestBody WaveDetlLog waveDetlLog) {
+        if (!waveDetlLogService.updateById(waveDetlLog)) {
+            return R.error("淇敼澶辫触");
+        }
+        return R.ok("淇敼鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveDetlLog:remove')")
+    @OperationLog("鍒犻櫎娉㈡鏄庣粏鍘嗗彶")
+    @PostMapping("/waveDetlLog/remove/{ids}")
+    public R remove(@PathVariable Long[] ids) {
+        if (!waveDetlLogService.removeByIds(Arrays.asList(ids))) {
+            return R.error("鍒犻櫎澶辫触");
+        }
+        return R.ok("鍒犻櫎鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveDetlLog:list')")
+    @PostMapping("/waveDetlLog/query")
+    public R query(@RequestParam(required = false) String condition) {
+        List<KeyValVo> vos = new ArrayList<>();
+        LambdaQueryWrapper<WaveDetlLog> wrapper = new LambdaQueryWrapper<>();
+        if (!Cools.isEmpty(condition)) {
+            wrapper.like(WaveDetlLog::getId, condition);
+        }
+        waveDetlLogService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
+                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
+        );
+        return R.ok().add(vos);
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveDetlLog:list')")
+    @PostMapping("/waveDetlLog/export")
+    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+        ExcelUtil.build(ExcelUtil.create(waveDetlLogService.list(), WaveDetlLog.class), response);
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveLogController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveLogController.java
new file mode 100644
index 0000000..ac8622c
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveLogController.java
@@ -0,0 +1,102 @@
+package com.zy.asrs.wms.asrs.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wms.common.annotation.OperationLog;
+import com.zy.asrs.wms.common.domain.BaseParam;
+import com.zy.asrs.wms.common.domain.KeyValVo;
+import com.zy.asrs.wms.common.domain.PageParam;
+import com.zy.asrs.wms.asrs.entity.WaveLog;
+import com.zy.asrs.wms.asrs.service.WaveLogService;
+import com.zy.asrs.wms.system.controller.BaseController;
+import com.zy.asrs.wms.utils.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api")
+public class WaveLogController extends BaseController {
+
+    @Autowired
+    private WaveLogService waveLogService;
+
+    @PreAuthorize("hasAuthority('asrs:waveLog:list')")
+    @PostMapping("/waveLog/page")
+    public R page(@RequestBody Map<String, Object> map) {
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<WaveLog, BaseParam> pageParam = new PageParam<>(baseParam, WaveLog.class);
+        return R.ok().add(waveLogService.page(pageParam, pageParam.buildWrapper(true)));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveLog:list')")
+    @PostMapping("/waveLog/list")
+    public R list(@RequestBody Map<String, Object> map) {
+        return R.ok().add(waveLogService.list());
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveLog:list')")
+    @GetMapping("/waveLog/{id}")
+    public R get(@PathVariable("id") Long id) {
+        return R.ok().add(waveLogService.getById(id));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveLog:save')")
+    @OperationLog("娣诲姞娉㈡鍘嗗彶")
+    @PostMapping("/waveLog/save")
+    public R save(@RequestBody WaveLog waveLog) {
+        if (!waveLogService.save(waveLog)) {
+            return R.error("娣诲姞澶辫触");
+        }
+        return R.ok("娣诲姞鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveLog:update')")
+    @OperationLog("淇敼娉㈡鍘嗗彶")
+    @PostMapping("/waveLog/update")
+    public R update(@RequestBody WaveLog waveLog) {
+        if (!waveLogService.updateById(waveLog)) {
+            return R.error("淇敼澶辫触");
+        }
+        return R.ok("淇敼鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveLog:remove')")
+    @OperationLog("鍒犻櫎娉㈡鍘嗗彶")
+    @PostMapping("/waveLog/remove/{ids}")
+    public R remove(@PathVariable Long[] ids) {
+        if (!waveLogService.removeByIds(Arrays.asList(ids))) {
+            return R.error("鍒犻櫎澶辫触");
+        }
+        return R.ok("鍒犻櫎鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveLog:list')")
+    @PostMapping("/waveLog/query")
+    public R query(@RequestParam(required = false) String condition) {
+        List<KeyValVo> vos = new ArrayList<>();
+        LambdaQueryWrapper<WaveLog> wrapper = new LambdaQueryWrapper<>();
+        if (!Cools.isEmpty(condition)) {
+            wrapper.like(WaveLog::getId, condition);
+        }
+        waveLogService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
+                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
+        );
+        return R.ok().add(vos);
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveLog:list')")
+    @PostMapping("/waveLog/export")
+    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+        ExcelUtil.build(ExcelUtil.create(waveLogService.list(), WaveLog.class), response);
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveSeedLogController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveSeedLogController.java
new file mode 100644
index 0000000..42bab0d
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/WaveSeedLogController.java
@@ -0,0 +1,102 @@
+package com.zy.asrs.wms.asrs.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.R;
+import com.zy.asrs.wms.common.annotation.OperationLog;
+import com.zy.asrs.wms.common.domain.BaseParam;
+import com.zy.asrs.wms.common.domain.KeyValVo;
+import com.zy.asrs.wms.common.domain.PageParam;
+import com.zy.asrs.wms.asrs.entity.WaveSeedLog;
+import com.zy.asrs.wms.asrs.service.WaveSeedLogService;
+import com.zy.asrs.wms.system.controller.BaseController;
+import com.zy.asrs.wms.utils.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api")
+public class WaveSeedLogController extends BaseController {
+
+    @Autowired
+    private WaveSeedLogService waveSeedLogService;
+
+    @PreAuthorize("hasAuthority('asrs:waveSeedLog:list')")
+    @PostMapping("/waveSeedLog/page")
+    public R page(@RequestBody Map<String, Object> map) {
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<WaveSeedLog, BaseParam> pageParam = new PageParam<>(baseParam, WaveSeedLog.class);
+        return R.ok().add(waveSeedLogService.page(pageParam, pageParam.buildWrapper(true)));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveSeedLog:list')")
+    @PostMapping("/waveSeedLog/list")
+    public R list(@RequestBody Map<String, Object> map) {
+        return R.ok().add(waveSeedLogService.list());
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveSeedLog:list')")
+    @GetMapping("/waveSeedLog/{id}")
+    public R get(@PathVariable("id") Long id) {
+        return R.ok().add(waveSeedLogService.getById(id));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveSeedLog:save')")
+    @OperationLog("娣诲姞娉㈡鎾鍘嗗彶")
+    @PostMapping("/waveSeedLog/save")
+    public R save(@RequestBody WaveSeedLog waveSeedLog) {
+        if (!waveSeedLogService.save(waveSeedLog)) {
+            return R.error("娣诲姞澶辫触");
+        }
+        return R.ok("娣诲姞鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveSeedLog:update')")
+    @OperationLog("淇敼娉㈡鎾鍘嗗彶")
+    @PostMapping("/waveSeedLog/update")
+    public R update(@RequestBody WaveSeedLog waveSeedLog) {
+        if (!waveSeedLogService.updateById(waveSeedLog)) {
+            return R.error("淇敼澶辫触");
+        }
+        return R.ok("淇敼鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveSeedLog:remove')")
+    @OperationLog("鍒犻櫎娉㈡鎾鍘嗗彶")
+    @PostMapping("/waveSeedLog/remove/{ids}")
+    public R remove(@PathVariable Long[] ids) {
+        if (!waveSeedLogService.removeByIds(Arrays.asList(ids))) {
+            return R.error("鍒犻櫎澶辫触");
+        }
+        return R.ok("鍒犻櫎鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveSeedLog:list')")
+    @PostMapping("/waveSeedLog/query")
+    public R query(@RequestParam(required = false) String condition) {
+        List<KeyValVo> vos = new ArrayList<>();
+        LambdaQueryWrapper<WaveSeedLog> wrapper = new LambdaQueryWrapper<>();
+        if (!Cools.isEmpty(condition)) {
+            wrapper.like(WaveSeedLog::getId, condition);
+        }
+        waveSeedLogService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
+                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
+        );
+        return R.ok().add(vos);
+    }
+
+    @PreAuthorize("hasAuthority('asrs:waveSeedLog:list')")
+    @PostMapping("/waveSeedLog/export")
+    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+        ExcelUtil.build(ExcelUtil.create(waveSeedLogService.list(), WaveSeedLog.class), response);
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/CacheSite.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/CacheSite.java
index e241e4f..5debe2c 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/CacheSite.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/CacheSite.java
@@ -121,6 +121,20 @@
     @ApiModelProperty(value= "閫氶亾")
     private String channel;
 
+    /**
+     * 闆嗚揣ID
+     */
+    @ApiModelProperty(value= "闆嗚揣ID")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long platformId;
+
+    /**
+     * 闆嗚揣缂栧彿
+     */
+    @ApiModelProperty(value= "闆嗚揣缂栧彿")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String platformNo;
+
     public CacheSite() {}
 
     public CacheSite(String siteNo,Integer siteStatus,Long orderId,String orderNo,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetlLog.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetlLog.java
index fa530ce..54e4480 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetlLog.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetlLog.java
@@ -133,6 +133,12 @@
     @ApiModelProperty(value= "澶囨敞")
     private String memo;
 
+    /**
+     * 鍟嗗搧搴撳瓨绱㈠紩
+     */
+    @ApiModelProperty(value= "鍟嗗搧搴撳瓨绱㈠紩")
+    private String stockIndex;
+
     public OrderDetlLog() {}
 
     public OrderDetlLog(Long orderId,String orderNo,Double anfme,Double qty,Double workQty,Long matId,String batch,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderLog.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderLog.java
index bd53905..dda6c7a 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderLog.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderLog.java
@@ -1,6 +1,7 @@
 package com.zy.asrs.wms.asrs.entity;
 
-import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.*;
+
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
@@ -13,10 +14,7 @@
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -122,6 +120,26 @@
     @ApiModelProperty(value= "浼樺厛绾�")
     private Integer ioPri;
 
+    /**
+     * 娉㈡ID
+     */
+    @ApiModelProperty(value= "娉㈡ID")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private Long waveId;
+
+    /**
+     * 娉㈡鍙�
+     */
+    @ApiModelProperty(value= "娉㈡鍙�")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private String waveNo;
+
+    /**
+     * 鏄惁鐢熸垚娉㈡ 1: 鏄�  0: 鍚�
+     */
+    @ApiModelProperty(value= "鏄惁鐢熸垚娉㈡ 1: 鏄�  0: 鍚�  ")
+    private Integer hasWave;
+
     public OrderLog() {}
 
     public OrderLog(String orderNo,String orderTime,Long orderType,Long orderSettle,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/Platform.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/Platform.java
new file mode 100644
index 0000000..f64f23e
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/Platform.java
@@ -0,0 +1,195 @@
+package com.zy.asrs.wms.asrs.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.zy.asrs.wms.system.entity.Host;
+import com.zy.asrs.wms.system.entity.User;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.wms.system.service.UserService;
+import com.zy.asrs.wms.system.service.HostService;
+import com.zy.asrs.common.utils.Synchro;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("man_platform")
+public class Platform implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 闆嗚揣缂栧彿
+     */
+    @ApiModelProperty(value= "闆嗚揣缂栧彿")
+    private String platformNo;
+
+    /**
+     * 鎵�灞炴満鏋�
+     */
+    @ApiModelProperty(value= "鎵�灞炴満鏋�")
+    private Long hostId;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
+     */
+    @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
+    @TableLogic
+    private Integer deleted;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    private Long createBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    private Long updateBy;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public Platform() {}
+
+    public Platform(String platformNo,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
+        this.platformNo = platformNo;
+        this.hostId = hostId;
+        this.status = status;
+        this.deleted = deleted;
+        this.createTime = createTime;
+        this.createBy = createBy;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+        this.memo = memo;
+    }
+
+//    Platform platform = new Platform(
+//            null,    // 闆嗚揣缂栧彿
+//            null,    // 鎵�灞炴満鏋�
+//            null,    // 鐘舵��
+//            null,    // 鏄惁鍒犻櫎
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null    // 澶囨敞
+//    );
+
+    public String getHostId$(){
+        HostService service = SpringUtils.getBean(HostService.class);
+        Host host = service.getById(this.hostId);
+        if (!Cools.isEmpty(host)){
+            return String.valueOf(host.getName());
+        }
+        return null;
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getDeleted$(){
+        if (null == this.deleted){ return null; }
+        switch (this.deleted){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.deleted);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+
+
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PlatformDetl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PlatformDetl.java
new file mode 100644
index 0000000..19e6412
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PlatformDetl.java
@@ -0,0 +1,294 @@
+package com.zy.asrs.wms.asrs.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.zy.asrs.wms.asrs.service.OrderDetlService;
+import com.zy.asrs.wms.asrs.service.PlatformService;
+import com.zy.asrs.wms.asrs.service.TaskDetlService;
+import com.zy.asrs.wms.system.entity.Host;
+import com.zy.asrs.wms.system.entity.User;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.wms.system.service.UserService;
+import com.zy.asrs.wms.system.service.HostService;
+import com.zy.asrs.common.utils.Synchro;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("man_platform_detl")
+public class PlatformDetl implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 闆嗚揣ID
+     */
+    @ApiModelProperty(value= "闆嗚揣ID")
+    private Long platformId;
+
+    /**
+     * 闆嗚揣缂栧彿
+     */
+    @ApiModelProperty(value= "闆嗚揣缂栧彿")
+    private String platformNo;
+
+    /**
+     * 璁㈠崟
+     */
+    @ApiModelProperty(value= "璁㈠崟")
+    private Long orderId;
+
+    /**
+     * 璁㈠崟鏄庣粏
+     */
+    @ApiModelProperty(value= "璁㈠崟鏄庣粏")
+    private Long orderDetlId;
+
+    /**
+     * 浠诲姟鏄庣粏
+     */
+    @ApiModelProperty(value= "浠诲姟鏄庣粏")
+    private Long taskDetlId;
+
+    /**
+     * 鍟嗗搧缂栧彿
+     */
+    @ApiModelProperty(value= "鍟嗗搧缂栧彿")
+    private String matnr;
+
+    /**
+     * 鎵瑰彿
+     */
+    @ApiModelProperty(value= "鎵瑰彿")
+    private String batch;
+
+    /**
+     * 绱㈠紩瀛楁
+     */
+    @ApiModelProperty(value= "绱㈠紩瀛楁")
+    private String fieldParams;
+
+    /**
+     * 闇�姹傛暟閲�
+     */
+    @ApiModelProperty(value= "闇�姹傛暟閲�")
+    private Double anfme;
+
+    /**
+     * 瀹為檯鏁伴噺
+     */
+    @ApiModelProperty(value= "瀹為檯鏁伴噺")
+    private Double qty;
+
+    /**
+     * 鎵�灞炴満鏋�
+     */
+    @ApiModelProperty(value= "鎵�灞炴満鏋�")
+    private Long hostId;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
+     */
+    @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
+    private Integer deleted;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    private Long createBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    private Long updateBy;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public PlatformDetl() {}
+
+    public PlatformDetl(Long platformId,String platformNo,Long orderId,Long orderDetlId,Long taskDetlId,String matnr,String batch,String fieldParams,Double anfme,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
+        this.platformId = platformId;
+        this.platformNo = platformNo;
+        this.orderId = orderId;
+        this.orderDetlId = orderDetlId;
+        this.taskDetlId = taskDetlId;
+        this.matnr = matnr;
+        this.batch = batch;
+        this.fieldParams = fieldParams;
+        this.anfme = anfme;
+        this.hostId = hostId;
+        this.status = status;
+        this.deleted = deleted;
+        this.createTime = createTime;
+        this.createBy = createBy;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+        this.memo = memo;
+    }
+
+//    PlatformDetl platformDetl = new PlatformDetl(
+//            null,    // 闆嗚揣ID
+//            null,    // 闆嗚揣缂栧彿
+//            null,    // 璁㈠崟
+//            null,    // 璁㈠崟鏄庣粏
+//            null,    // 浠诲姟鏄庣粏
+//            null,    // 鍟嗗搧缂栧彿
+//            null,    // 鎵瑰彿
+//            null,    // 绱㈠紩瀛楁
+//            null,    // 鏁伴噺
+//            null,    // 鎵�灞炴満鏋�
+//            null,    // 鐘舵��
+//            null,    // 鏄惁鍒犻櫎
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null    // 澶囨敞
+//    );
+
+    public String getPlatformId$(){
+        PlatformService service = SpringUtils.getBean(PlatformService.class);
+        Platform platform = service.getById(this.platformId);
+        if (!Cools.isEmpty(platform)){
+            return String.valueOf(platform.getId());
+        }
+        return null;
+    }
+
+    public String getOrderDetlId$(){
+        OrderDetlService service = SpringUtils.getBean(OrderDetlService.class);
+        OrderDetl orderDetl = service.getById(this.orderDetlId);
+        if (!Cools.isEmpty(orderDetl)){
+            return String.valueOf(orderDetl.getId());
+        }
+        return null;
+    }
+
+    public String getTaskDetlId$(){
+        TaskDetlService service = SpringUtils.getBean(TaskDetlService.class);
+        TaskDetl taskDetl = service.getById(this.taskDetlId);
+        if (!Cools.isEmpty(taskDetl)){
+            return String.valueOf(taskDetl.getId());
+        }
+        return null;
+    }
+
+    public String getHostId$(){
+        HostService service = SpringUtils.getBean(HostService.class);
+        Host host = service.getById(this.hostId);
+        if (!Cools.isEmpty(host)){
+            return String.valueOf(host.getName());
+        }
+        return null;
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getDeleted$(){
+        if (null == this.deleted){ return null; }
+        switch (this.deleted){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.deleted);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+
+
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PlatformDetlLog.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PlatformDetlLog.java
new file mode 100644
index 0000000..15cb8e8
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PlatformDetlLog.java
@@ -0,0 +1,297 @@
+package com.zy.asrs.wms.asrs.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.zy.asrs.wms.asrs.service.OrderDetlService;
+import com.zy.asrs.wms.asrs.service.PlatformService;
+import com.zy.asrs.wms.asrs.service.TaskDetlService;
+import com.zy.asrs.wms.system.entity.Host;
+import com.zy.asrs.wms.system.entity.User;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.wms.system.service.UserService;
+import com.zy.asrs.wms.system.service.HostService;
+import com.zy.asrs.common.utils.Synchro;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("man_platform_detl_log")
+public class PlatformDetlLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 闆嗚揣ID
+     */
+    @ApiModelProperty(value= "闆嗚揣ID")
+    private Long platformId;
+
+    /**
+     * 闆嗚揣缂栧彿
+     */
+    @ApiModelProperty(value= "闆嗚揣缂栧彿")
+    private String platformNo;
+
+    /**
+     * 璁㈠崟
+     */
+    @ApiModelProperty(value= "璁㈠崟")
+    private Long orderId;
+
+    /**
+     * 璁㈠崟鏄庣粏
+     */
+    @ApiModelProperty(value= "璁㈠崟鏄庣粏")
+    private Long orderDetlId;
+
+    /**
+     * 浠诲姟鏄庣粏
+     */
+    @ApiModelProperty(value= "浠诲姟鏄庣粏")
+    private Long taskDetlId;
+
+    /**
+     * 鍟嗗搧缂栧彿
+     */
+    @ApiModelProperty(value= "鍟嗗搧缂栧彿")
+    private String matnr;
+
+    /**
+     * 鎵瑰彿
+     */
+    @ApiModelProperty(value= "鎵瑰彿")
+    private String batch;
+
+    /**
+     * 绱㈠紩瀛楁
+     */
+    @ApiModelProperty(value= "绱㈠紩瀛楁")
+    private String fieldParams;
+
+    /**
+     * 闇�姹傛暟閲�
+     */
+    @ApiModelProperty(value= "闇�姹傛暟閲�")
+    private Double anfme;
+
+    /**
+     * 瀹為檯鏁伴噺
+     */
+    @ApiModelProperty(value= "瀹為檯鏁伴噺")
+    private Double qty;
+
+    /**
+     * 鎵�灞炴満鏋�
+     */
+    @ApiModelProperty(value= "鎵�灞炴満鏋�")
+    private Long hostId;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
+     */
+    @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
+    @TableLogic
+    private Integer deleted;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    private Long createBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    private Long updateBy;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public PlatformDetlLog() {}
+
+    public PlatformDetlLog(Long platformId,String platformNo,Long orderId,Long orderDetlId,Long taskDetlId,String matnr,String batch,String fieldParams,Double anfme,Double qty,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
+        this.platformId = platformId;
+        this.platformNo = platformNo;
+        this.orderId = orderId;
+        this.orderDetlId = orderDetlId;
+        this.taskDetlId = taskDetlId;
+        this.matnr = matnr;
+        this.batch = batch;
+        this.fieldParams = fieldParams;
+        this.anfme = anfme;
+        this.qty = qty;
+        this.hostId = hostId;
+        this.status = status;
+        this.deleted = deleted;
+        this.createTime = createTime;
+        this.createBy = createBy;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+        this.memo = memo;
+    }
+
+//    PlatformDetlLog platformDetlLog = new PlatformDetlLog(
+//            null,    // 闆嗚揣ID
+//            null,    // 闆嗚揣缂栧彿
+//            null,    // 璁㈠崟
+//            null,    // 璁㈠崟鏄庣粏
+//            null,    // 浠诲姟鏄庣粏
+//            null,    // 鍟嗗搧缂栧彿
+//            null,    // 鎵瑰彿
+//            null,    // 绱㈠紩瀛楁
+//            null,    // 闇�姹傛暟閲�
+//            null,    // 瀹為檯鏁伴噺
+//            null,    // 鎵�灞炴満鏋�
+//            null,    // 鐘舵��
+//            null,    // 鏄惁鍒犻櫎
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null    // 澶囨敞
+//    );
+
+    public String getPlatformId$(){
+        PlatformService service = SpringUtils.getBean(PlatformService.class);
+        Platform platform = service.getById(this.platformId);
+        if (!Cools.isEmpty(platform)){
+            return String.valueOf(platform.getId());
+        }
+        return null;
+    }
+
+    public String getOrderDetlId$(){
+        OrderDetlService service = SpringUtils.getBean(OrderDetlService.class);
+        OrderDetl orderDetl = service.getById(this.orderDetlId);
+        if (!Cools.isEmpty(orderDetl)){
+            return String.valueOf(orderDetl.getId());
+        }
+        return null;
+    }
+
+    public String getTaskDetlId$(){
+        TaskDetlService service = SpringUtils.getBean(TaskDetlService.class);
+        TaskDetl taskDetl = service.getById(this.taskDetlId);
+        if (!Cools.isEmpty(taskDetl)){
+            return String.valueOf(taskDetl.getId());
+        }
+        return null;
+    }
+
+    public String getHostId$(){
+        HostService service = SpringUtils.getBean(HostService.class);
+        Host host = service.getById(this.hostId);
+        if (!Cools.isEmpty(host)){
+            return String.valueOf(host.getName());
+        }
+        return null;
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getDeleted$(){
+        if (null == this.deleted){ return null; }
+        switch (this.deleted){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.deleted);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+
+
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveDetlLog.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveDetlLog.java
new file mode 100644
index 0000000..15346aa
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveDetlLog.java
@@ -0,0 +1,279 @@
+package com.zy.asrs.wms.asrs.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.zy.asrs.wms.asrs.service.MatService;
+import com.zy.asrs.wms.asrs.service.WaveLogService;
+import com.zy.asrs.wms.system.entity.Host;
+import com.zy.asrs.wms.system.entity.User;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.wms.system.service.UserService;
+import com.zy.asrs.wms.system.service.HostService;
+import com.zy.asrs.common.utils.Synchro;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("man_wave_detl_log")
+public class WaveDetlLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 娉㈡ID
+     */
+    @ApiModelProperty(value= "娉㈡ID")
+    private Long waveId;
+
+    /**
+     * 娉㈡鍙�
+     */
+    @ApiModelProperty(value= "娉㈡鍙�")
+    private String waveNo;
+
+    /**
+     * 鍟嗗搧ID
+     */
+    @ApiModelProperty(value= "鍟嗗搧ID")
+    private Long matId;
+
+    /**
+     * 鍟嗗搧缂栧彿
+     */
+    @ApiModelProperty(value= "鍟嗗搧缂栧彿")
+    private String matnr;
+
+    /**
+     * 鎵瑰彿
+     */
+    @ApiModelProperty(value= "鎵瑰彿")
+    private String batch;
+
+    /**
+     * 鍟嗗搧搴撳瓨绱㈠紩
+     */
+    @ApiModelProperty(value= "鍟嗗搧搴撳瓨绱㈠紩")
+    private String stockIndex;
+
+    /**
+     * 鏁伴噺
+     */
+    @ApiModelProperty(value= "鏁伴噺")
+    private Double anfme;
+
+    /**
+     * 宸ヤ綔鏁伴噺
+     */
+    @ApiModelProperty(value= "宸ヤ綔鏁伴噺")
+    private Double workQty;
+
+    /**
+     * 鎵�灞炴満鏋�
+     */
+    @ApiModelProperty(value= "鎵�灞炴満鏋�")
+    private Long hostId;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
+     */
+    @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
+    @TableLogic
+    private Integer deleted;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    private Long createBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    private Long updateBy;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    /**
+     * 绱㈠紩瀛楁
+     */
+    @ApiModelProperty(value= "绱㈠紩瀛楁")
+    private String fieldParams;
+
+    public WaveDetlLog() {}
+
+    public WaveDetlLog(Long waveId,String waveNo,Long matId,String matnr,String batch,String stockIndex,Double anfme,Double workQty,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo,String fieldParams) {
+        this.waveId = waveId;
+        this.waveNo = waveNo;
+        this.matId = matId;
+        this.matnr = matnr;
+        this.batch = batch;
+        this.stockIndex = stockIndex;
+        this.anfme = anfme;
+        this.workQty = workQty;
+        this.hostId = hostId;
+        this.status = status;
+        this.deleted = deleted;
+        this.createTime = createTime;
+        this.createBy = createBy;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+        this.memo = memo;
+        this.fieldParams = fieldParams;
+    }
+
+//    WaveDetlLog waveDetlLog = new WaveDetlLog(
+//            null,    // 娉㈡ID
+//            null,    // 娉㈡鍙�
+//            null,    // 鍟嗗搧ID
+//            null,    // 鍟嗗搧缂栧彿
+//            null,    // 鎵瑰彿
+//            null,    // 鍟嗗搧搴撳瓨绱㈠紩
+//            null,    // 鏁伴噺
+//            null,    // 宸ヤ綔鏁伴噺
+//            null,    // 鎵�灞炴満鏋�
+//            null,    // 鐘舵��
+//            null,    // 鏄惁鍒犻櫎
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 澶囨敞
+//            null    // 绱㈠紩瀛楁
+//    );
+
+    public String getWaveId$(){
+        WaveLogService service = SpringUtils.getBean(WaveLogService.class);
+        WaveLog waveLog = service.getById(this.waveId);
+        if (!Cools.isEmpty(waveLog)){
+            return String.valueOf(waveLog.getId());
+        }
+        return null;
+    }
+
+    public String getMatId$(){
+        MatService service = SpringUtils.getBean(MatService.class);
+        Mat mat = service.getById(this.matId);
+        if (!Cools.isEmpty(mat)){
+            return String.valueOf(mat.getId());
+        }
+        return null;
+    }
+
+    public String getHostId$(){
+        HostService service = SpringUtils.getBean(HostService.class);
+        Host host = service.getById(this.hostId);
+        if (!Cools.isEmpty(host)){
+            return String.valueOf(host.getName());
+        }
+        return null;
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getDeleted$(){
+        if (null == this.deleted){ return null; }
+        switch (this.deleted){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.deleted);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+
+
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveLog.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveLog.java
new file mode 100644
index 0000000..9f54d3e
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveLog.java
@@ -0,0 +1,239 @@
+package com.zy.asrs.wms.asrs.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.zy.asrs.wms.system.entity.Host;
+import com.zy.asrs.wms.system.entity.User;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.wms.system.service.UserService;
+import com.zy.asrs.wms.system.service.HostService;
+import com.zy.asrs.common.utils.Synchro;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("man_wave_log")
+public class WaveLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 娉㈡鍙�
+     */
+    @ApiModelProperty(value= "娉㈡鍙�")
+    private String waveNo;
+
+    /**
+     * 娉㈡绫诲瀷 0: 鎵嬪姩  1: 鑷姩  
+     */
+    @ApiModelProperty(value= "娉㈡绫诲瀷 0: 鎵嬪姩  1: 鑷姩  ")
+    private Integer waveType;
+
+    /**
+     * 娉㈡鐘舵�� 0: 鍒濆鍖�  1: 鐢熸垚浠诲姟  2: 浠诲姟鎾  3: 瀹屾垚  
+     */
+    @ApiModelProperty(value= "娉㈡鐘舵�� 0: 鍒濆鍖�  1: 鐢熸垚浠诲姟  2: 浠诲姟鎾  3: 瀹屾垚  ")
+    private Integer waveStatus;
+
+    /**
+     * 鎵�灞炴満鏋�
+     */
+    @ApiModelProperty(value= "鎵�灞炴満鏋�")
+    private Long hostId;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
+     */
+    @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
+    @TableLogic
+    private Integer deleted;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    private Long createBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    private Long updateBy;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public WaveLog() {}
+
+    public WaveLog(String waveNo,Integer waveType,Integer waveStatus,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
+        this.waveNo = waveNo;
+        this.waveType = waveType;
+        this.waveStatus = waveStatus;
+        this.hostId = hostId;
+        this.status = status;
+        this.deleted = deleted;
+        this.createTime = createTime;
+        this.createBy = createBy;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+        this.memo = memo;
+    }
+
+//    WaveLog waveLog = new WaveLog(
+//            null,    // 娉㈡鍙�
+//            null,    // 娉㈡绫诲瀷
+//            null,    // 娉㈡鐘舵��
+//            null,    // 鎵�灞炴満鏋�
+//            null,    // 鐘舵��
+//            null,    // 鏄惁鍒犻櫎
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null    // 澶囨敞
+//    );
+
+    public String getWaveType$(){
+        if (null == this.waveType){ return null; }
+        switch (this.waveType){
+            case 0:
+                return "鎵嬪姩";
+            case 1:
+                return "鑷姩";
+            default:
+                return String.valueOf(this.waveType);
+        }
+    }
+
+    public String getWaveStatus$(){
+        if (null == this.waveStatus){ return null; }
+        switch (this.waveStatus){
+            case 0:
+                return "鍒濆鍖�";
+            case 1:
+                return "鐢熸垚浠诲姟";
+            case 2:
+                return "浠诲姟鎾";
+            case 3:
+                return "瀹屾垚";
+            default:
+                return String.valueOf(this.waveStatus);
+        }
+    }
+
+    public String getHostId$(){
+        HostService service = SpringUtils.getBean(HostService.class);
+        Host host = service.getById(this.hostId);
+        if (!Cools.isEmpty(host)){
+            return String.valueOf(host.getName());
+        }
+        return null;
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getDeleted$(){
+        if (null == this.deleted){ return null; }
+        switch (this.deleted){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.deleted);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+
+
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveSeed.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveSeed.java
index b256a92..4585785 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveSeed.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveSeed.java
@@ -85,6 +85,24 @@
     private Double workQty;
 
     /**
+     * 鍟嗗搧缂栧彿
+     */
+    @ApiModelProperty(value= "鍟嗗搧缂栧彿")
+    private String matnr;
+
+    /**
+     * 鎵瑰彿
+     */
+    @ApiModelProperty(value= "鎵瑰彿")
+    private String batch;
+
+    /**
+     * 绱㈠紩瀛楁
+     */
+    @ApiModelProperty(value= "绱㈠紩瀛楁")
+    private String fieldParams;
+
+    /**
      * 鎵�灞炴満鏋�
      */
     @ApiModelProperty(value= "鎵�灞炴満鏋�")
@@ -100,7 +118,6 @@
      * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
      */
     @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
-    @TableLogic
     private Integer deleted;
 
     /**
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveSeedLog.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveSeedLog.java
new file mode 100644
index 0000000..13a7f0f
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/WaveSeedLog.java
@@ -0,0 +1,297 @@
+package com.zy.asrs.wms.asrs.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.zy.asrs.wms.asrs.service.CacheSiteService;
+import com.zy.asrs.wms.asrs.service.OrderDetlService;
+import com.zy.asrs.wms.asrs.service.TaskDetlService;
+import com.zy.asrs.wms.system.entity.Host;
+import com.zy.asrs.wms.system.entity.User;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.wms.system.service.UserService;
+import com.zy.asrs.wms.system.service.HostService;
+import com.zy.asrs.common.utils.Synchro;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("man_wave_seed_log")
+public class WaveSeedLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 绔欑偣ID
+     */
+    @ApiModelProperty(value= "绔欑偣ID")
+    private Long siteId;
+
+    /**
+     * 绔欑偣缂栧彿
+     */
+    @ApiModelProperty(value= "绔欑偣缂栧彿")
+    private String siteNo;
+
+    /**
+     * 璁㈠崟
+     */
+    @ApiModelProperty(value= "璁㈠崟")
+    private Long orderId;
+
+    /**
+     * 璁㈠崟鏄庣粏
+     */
+    @ApiModelProperty(value= "璁㈠崟鏄庣粏")
+    private Long orderDetlId;
+
+    /**
+     * 浠诲姟鏄庣粏
+     */
+    @ApiModelProperty(value= "浠诲姟鏄庣粏")
+    private Long taskDetlId;
+
+    /**
+     * 鏁伴噺
+     */
+    @ApiModelProperty(value= "鏁伴噺")
+    private Double anfme;
+
+    /**
+     * 澶嶆牳鏁伴噺
+     */
+    @ApiModelProperty(value= "澶嶆牳鏁伴噺")
+    private Double workQty;
+
+    /**
+     * 鎵�灞炴満鏋�
+     */
+    @ApiModelProperty(value= "鎵�灞炴満鏋�")
+    private Long hostId;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 绂佺敤  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 绂佺敤  ")
+    private Integer status;
+
+    /**
+     * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
+     */
+    @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
+    @TableLogic
+    private Integer deleted;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    private Long createBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    private Long updateBy;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    /**
+     * 鍟嗗搧缂栧彿
+     */
+    @ApiModelProperty(value= "鍟嗗搧缂栧彿")
+    private String matnr;
+
+    /**
+     * 鎵瑰彿
+     */
+    @ApiModelProperty(value= "鎵瑰彿")
+    private String batch;
+
+    /**
+     * 绱㈠紩瀛楁
+     */
+    @ApiModelProperty(value= "绱㈠紩瀛楁")
+    private String fieldParams;
+
+    public WaveSeedLog() {}
+
+    public WaveSeedLog(Long siteId,String siteNo,Long orderId,Long orderDetlId,Long taskDetlId,Double anfme,Double workQty,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo,String matnr,String batch,String fieldParams) {
+        this.siteId = siteId;
+        this.siteNo = siteNo;
+        this.orderId = orderId;
+        this.orderDetlId = orderDetlId;
+        this.taskDetlId = taskDetlId;
+        this.anfme = anfme;
+        this.workQty = workQty;
+        this.hostId = hostId;
+        this.status = status;
+        this.deleted = deleted;
+        this.createTime = createTime;
+        this.createBy = createBy;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+        this.memo = memo;
+        this.matnr = matnr;
+        this.batch = batch;
+        this.fieldParams = fieldParams;
+    }
+
+//    WaveSeedLog waveSeedLog = new WaveSeedLog(
+//            null,    // 绔欑偣ID
+//            null,    // 绔欑偣缂栧彿
+//            null,    // 璁㈠崟
+//            null,    // 璁㈠崟鏄庣粏
+//            null,    // 浠诲姟鏄庣粏
+//            null,    // 鏁伴噺
+//            null,    // 澶嶆牳鏁伴噺
+//            null,    // 鎵�灞炴満鏋�
+//            null,    // 鐘舵��
+//            null,    // 鏄惁鍒犻櫎
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null,    // 澶囨敞
+//            null,    // 鍟嗗搧缂栧彿
+//            null,    // 鎵瑰彿
+//            null    // 绱㈠紩瀛楁
+//    );
+
+    public String getSiteId$(){
+        CacheSiteService service = SpringUtils.getBean(CacheSiteService.class);
+        CacheSite cacheSite = service.getById(this.siteId);
+        if (!Cools.isEmpty(cacheSite)){
+            return String.valueOf(cacheSite.getId());
+        }
+        return null;
+    }
+
+    public String getOrderDetlId$(){
+        OrderDetlService service = SpringUtils.getBean(OrderDetlService.class);
+        OrderDetl orderDetl = service.getById(this.orderDetlId);
+        if (!Cools.isEmpty(orderDetl)){
+            return String.valueOf(orderDetl.getId());
+        }
+        return null;
+    }
+
+    public String getTaskDetlId$(){
+        TaskDetlService service = SpringUtils.getBean(TaskDetlService.class);
+        TaskDetl taskDetl = service.getById(this.taskDetlId);
+        if (!Cools.isEmpty(taskDetl)){
+            return String.valueOf(taskDetl.getId());
+        }
+        return null;
+    }
+
+    public String getHostId$(){
+        HostService service = SpringUtils.getBean(HostService.class);
+        Host host = service.getById(this.hostId);
+        if (!Cools.isEmpty(host)){
+            return String.valueOf(host.getName());
+        }
+        return null;
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "绂佺敤";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getDeleted$(){
+        if (null == this.deleted){ return null; }
+        switch (this.deleted){
+            case 1:
+                return "鏄�";
+            case 0:
+                return "鍚�";
+            default:
+                return String.valueOf(this.deleted);
+        }
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+
+
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/TaskStsType.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/TaskStsType.java
new file mode 100644
index 0000000..93a4887
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/TaskStsType.java
@@ -0,0 +1,25 @@
+package com.zy.asrs.wms.asrs.entity.enums;
+
+public enum TaskStsType {
+
+    GENERATE_IN(1L, "鐢熸垚鍏ュ簱浠诲姟"),
+    WCS_EXECUTE_IN(2L, "WCS鎵ц涓�"),
+    COMPLETE_IN(99L, "鍏ュ簱瀹屾垚"),
+    UPDATED_IN(100L, "搴撳瓨鏇存柊瀹屾垚"),
+
+    GENERATE_OUT(101L, "鐢熸垚鍑哄簱浠诲姟"),
+    WCS_EXECUTE_OUT(102L, "WCS鎵ц涓�"),
+    WAVE_SEED(198L, "鎾涓�"),
+    COMPLETE_OUT(199L, "鍑哄簱瀹屾垚"),
+    UPDATED_OUT(200L, "搴撳瓨鏇存柊瀹屾垚"),
+    ;
+
+    public Long id;
+    public String desc;
+
+    TaskStsType(Long id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/BindPlatformParam.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/BindPlatformParam.java
new file mode 100644
index 0000000..8066888
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/BindPlatformParam.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class BindPlatformParam {
+
+    private Long platformId;
+
+    private String siteNo;
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/CacheSiteEmptyInParam.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/CacheSiteEmptyInParam.java
new file mode 100644
index 0000000..318937a
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/CacheSiteEmptyInParam.java
@@ -0,0 +1,11 @@
+package com.zy.asrs.wms.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class CacheSiteEmptyInParam {
+
+    //鎾绔欑偣缂栧彿
+    private String siteNo;
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PlatformInParam.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PlatformInParam.java
new file mode 100644
index 0000000..6099b06
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PlatformInParam.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.wms.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class PlatformInParam {
+
+    //鎾绔欑偣缂栧彿
+    private String siteNo;
+
+    //闆嗚揣缂栧彿
+    private String platformNo;
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PlatformShippedParam.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PlatformShippedParam.java
new file mode 100644
index 0000000..cf7f2d1
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PlatformShippedParam.java
@@ -0,0 +1,10 @@
+package com.zy.asrs.wms.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class PlatformShippedParam {
+
+    private Long platformId;
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/SeedCompleteParam.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/SeedCompleteParam.java
new file mode 100644
index 0000000..0d9c40f
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/SeedCompleteParam.java
@@ -0,0 +1,11 @@
+package com.zy.asrs.wms.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class SeedCompleteParam {
+
+    //鎾绔欑偣缂栧彿
+    private String siteNo;
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/LocManage.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/LocManage.java
index f457313..e06ad57 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/LocManage.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/LocManage.java
@@ -8,6 +8,7 @@
 import com.zy.asrs.wms.asrs.entity.Task;
 import com.zy.asrs.wms.asrs.entity.TaskDetl;
 import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
+import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
 import com.zy.asrs.wms.asrs.service.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -64,7 +65,7 @@
         Task task = new Task();
         task.setTaskNo(workService.generateTaskNo(1L));
         // 浠诲姟鐘舵��
-        task.setTaskSts(11L);
+        task.setTaskSts(TaskStsType.GENERATE_OUT.id);
         // 浠诲姟绫诲瀷
         task.setTaskType(11L);
         // 浼樺厛绾�
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
index 34c43e9..96f79fb 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -5,10 +5,7 @@
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wms.asrs.entity.dto.*;
 import com.zy.asrs.wms.asrs.entity.dto.OrderOutMergeDto;
-import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType;
-import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
-import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType;
-import com.zy.asrs.wms.asrs.entity.enums.WaveStatusType;
+import com.zy.asrs.wms.asrs.entity.enums.*;
 import com.zy.asrs.wms.asrs.entity.param.*;
 import com.zy.asrs.wms.asrs.entity.*;
 import com.zy.asrs.wms.asrs.service.*;
@@ -94,7 +91,7 @@
 
             Task task = new Task();
             task.setTaskNo(workService.generateTaskNo(1L));
-            task.setTaskSts(101L);
+            task.setTaskSts(TaskStsType.GENERATE_OUT.id);
             task.setTaskType(taskType);
             task.setIoPri(workService.generateIoPri(taskType));
             task.setOriginLoc(loc.getLocNo());
@@ -365,7 +362,7 @@
 
             Task task = new Task();
             task.setTaskNo(workService.generateTaskNo(taskType));
-            task.setTaskSts(101L);
+            task.setTaskSts(TaskStsType.GENERATE_OUT.id);
             task.setTaskType(taskType);
             task.setIoPri(workService.generateIoPri(taskType));
             task.setOriginLoc(loc.getLocNo());
@@ -718,7 +715,7 @@
 
             Task task = new Task();
             task.setTaskNo(workService.generateTaskNo(taskType));
-            task.setTaskSts(101L);
+            task.setTaskSts(TaskStsType.GENERATE_OUT.id);
             task.setTaskType(taskType);
             task.setIoPri(workService.generateIoPri(taskType));
             task.setOriginLoc(loc.getLocNo());
@@ -885,7 +882,7 @@
 
             Task task = new Task();
             task.setTaskNo(workService.generateTaskNo(taskType));
-            task.setTaskSts(101L);
+            task.setTaskSts(TaskStsType.GENERATE_OUT.id);
             task.setTaskType(taskType);
             task.setIoPri(workService.generateIoPri(taskType));
             task.setOriginLoc(loc.getLocNo());
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformDetlLogMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformDetlLogMapper.java
new file mode 100644
index 0000000..329315b
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformDetlLogMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.mapper;
+
+import com.zy.asrs.wms.asrs.entity.PlatformDetlLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface PlatformDetlLogMapper extends BaseMapper<PlatformDetlLog> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformDetlMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformDetlMapper.java
new file mode 100644
index 0000000..5c76156
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformDetlMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.mapper;
+
+import com.zy.asrs.wms.asrs.entity.PlatformDetl;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface PlatformDetlMapper extends BaseMapper<PlatformDetl> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformMapper.java
new file mode 100644
index 0000000..94c7d5e
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/PlatformMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.mapper;
+
+import com.zy.asrs.wms.asrs.entity.Platform;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface PlatformMapper extends BaseMapper<Platform> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/TaskMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/TaskMapper.java
index d314748..4a2f830 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/TaskMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/TaskMapper.java
@@ -5,8 +5,12 @@
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Mapper
 @Repository
 public interface TaskMapper extends BaseMapper<Task> {
 
+    List<Task> selectWaitWaveOut(List<Long> waveIds);//鑾峰彇绛夊緟娉㈡鍑哄簱鐨勪换鍔ist
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveDetlLogMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveDetlLogMapper.java
new file mode 100644
index 0000000..599ef5b
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveDetlLogMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.mapper;
+
+import com.zy.asrs.wms.asrs.entity.WaveDetlLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface WaveDetlLogMapper extends BaseMapper<WaveDetlLog> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveLogMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveLogMapper.java
new file mode 100644
index 0000000..5a05eae
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveLogMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.mapper;
+
+import com.zy.asrs.wms.asrs.entity.WaveLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface WaveLogMapper extends BaseMapper<WaveLog> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveSeedLogMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveSeedLogMapper.java
new file mode 100644
index 0000000..17a0c91
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/WaveSeedLogMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.mapper;
+
+import com.zy.asrs.wms.asrs.entity.WaveSeedLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface WaveSeedLogMapper extends BaseMapper<WaveSeedLog> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/CacheSiteService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/CacheSiteService.java
index d65c686..31920d4 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/CacheSiteService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/CacheSiteService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zy.asrs.wms.asrs.entity.CacheSite;
+import com.zy.asrs.wms.asrs.entity.param.SeedCompleteParam;
 
 import java.util.List;
 
@@ -9,4 +10,8 @@
 
     List<String> getChannelList();
 
+    boolean seedCompletePreview(SeedCompleteParam param);
+
+    void seedComplete(SeedCompleteParam param);
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformDetlLogService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformDetlLogService.java
new file mode 100644
index 0000000..0f5e2ca
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformDetlLogService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.wms.asrs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.wms.asrs.entity.PlatformDetlLog;
+
+public interface PlatformDetlLogService extends IService<PlatformDetlLog> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformDetlService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformDetlService.java
new file mode 100644
index 0000000..62491a8
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformDetlService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.wms.asrs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.wms.asrs.entity.PlatformDetl;
+
+public interface PlatformDetlService extends IService<PlatformDetl> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformService.java
new file mode 100644
index 0000000..518dd99
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformService.java
@@ -0,0 +1,11 @@
+package com.zy.asrs.wms.asrs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.wms.asrs.entity.Platform;
+import com.zy.asrs.wms.asrs.entity.param.PlatformShippedParam;
+
+public interface PlatformService extends IService<Platform> {
+
+    void shipped(PlatformShippedParam param);
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/TaskService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/TaskService.java
index 4d6aeb1..44e0288 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/TaskService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/TaskService.java
@@ -8,4 +8,7 @@
 public interface TaskService extends IService<Task> {
 
     List<Task> getByOrderDetlId(Long orderDetlId);
+
+    List<Task> selectWaitWaveOut(List<Long> waveIds);//鑾峰彇绛夊緟娉㈡鍑哄簱鐨勪换鍔ist
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveDetlLogService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveDetlLogService.java
new file mode 100644
index 0000000..7d58dc3
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveDetlLogService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.wms.asrs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.wms.asrs.entity.WaveDetlLog;
+
+public interface WaveDetlLogService extends IService<WaveDetlLog> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveLogService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveLogService.java
new file mode 100644
index 0000000..b59ce8e
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveLogService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.wms.asrs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.wms.asrs.entity.WaveLog;
+
+public interface WaveLogService extends IService<WaveLog> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveSeedLogService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveSeedLogService.java
new file mode 100644
index 0000000..9ff36e7
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/WaveSeedLogService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.wms.asrs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.wms.asrs.entity.WaveSeedLog;
+
+public interface WaveSeedLogService extends IService<WaveSeedLog> {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/CacheSiteServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/CacheSiteServiceImpl.java
index 67e213a..6c0acd9 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/CacheSiteServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/CacheSiteServiceImpl.java
@@ -1,18 +1,194 @@
 package com.zy.asrs.wms.asrs.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wms.asrs.entity.*;
+import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType;
+import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
+import com.zy.asrs.wms.asrs.entity.param.SeedCompleteParam;
 import com.zy.asrs.wms.asrs.mapper.CacheSiteMapper;
-import com.zy.asrs.wms.asrs.entity.CacheSite;
-import com.zy.asrs.wms.asrs.service.CacheSiteService;
+import com.zy.asrs.wms.asrs.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
+import java.util.*;
 
 @Service("cacheSiteService")
 public class CacheSiteServiceImpl extends ServiceImpl<CacheSiteMapper, CacheSite> implements CacheSiteService {
 
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private WaveSeedService waveSeedService;
+    @Autowired
+    private WaveSeedLogService waveSeedLogService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private TaskDetlService taskDetlService;
+    @Autowired
+    private PlatformService platformService;
+    @Autowired
+    private PlatformDetlService platformDetlService;
+
+
     @Override
     public List<String> getChannelList() {
         return this.baseMapper.getChannelList();
     }
+
+    @Override
+    public boolean seedCompletePreview(SeedCompleteParam param) {
+        if (param == null) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
+        }
+
+        String siteNo = param.getSiteNo();
+        if (siteNo == null) {
+            throw new CoolException("鎾绔欑偣缂栧彿涓嶈兘涓虹┖");
+        }
+
+        CacheSite cacheSite = this.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getSiteNo, siteNo));
+        if(cacheSite == null){
+            throw new CoolException("鎾绔欑偣涓嶅瓨鍦�");
+        }
+
+        if (cacheSite.getSiteStatus().equals(CacheSiteStatusType.O.id)) {
+            throw new CoolException("绔欑偣鐘舵�佸紓甯�");
+        }
+
+        Long orderId = cacheSite.getOrderId();
+        Order order = orderService.getById(orderId);
+        if (order == null) {
+            throw new CoolException("璁㈠崟涓嶅瓨鍦�");
+        }
+
+        HashMap<Long, Double> stockMap = new HashMap<>();
+        List<WaveSeed> waveSeeds = waveSeedService.list(new LambdaQueryWrapper<WaveSeed>().eq(WaveSeed::getOrderId, orderId));
+        for (WaveSeed waveSeed : waveSeeds) {
+            Double anfme = stockMap.get(waveSeed.getOrderDetlId());
+            if (anfme == null) {
+                anfme = 0.0D;
+            }
+            anfme += waveSeed.getWorkQty();
+            stockMap.put(waveSeed.getOrderDetlId(), anfme);
+        }
+
+        List<OrderDetl> orderDetls = orderDetlService.getOrderDetlByOrderId(orderId);
+        boolean check = true;
+        for (OrderDetl orderDetl : orderDetls) {
+            Double anfme = Optional.of(orderDetl.getAnfme() - orderDetl.getWorkQty() - orderDetl.getQty()).orElse(0.0D);
+            Double workQty = stockMap.get(orderDetl.getId());
+            if (!anfme.equals(workQty)) {
+                check = false;
+                break;
+            }
+        }
+
+        return check;
+    }
+
+    @Override
+    public void seedComplete(SeedCompleteParam param) {
+        if (param == null) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
+        }
+
+        String siteNo = param.getSiteNo();
+        if (siteNo == null) {
+            throw new CoolException("鎾绔欑偣缂栧彿涓嶈兘涓虹┖");
+        }
+
+        CacheSite cacheSite = this.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getSiteNo, siteNo));
+        if(cacheSite == null){
+            throw new CoolException("鎾绔欑偣涓嶅瓨鍦�");
+        }
+
+        if (cacheSite.getSiteStatus().equals(CacheSiteStatusType.O.id)) {
+            throw new CoolException("绔欑偣鐘舵�佸紓甯�");
+        }
+
+        if (cacheSite.getPlatformId() == null) {
+            throw new CoolException("闆嗚揣鍖哄煙鏈粦瀹�");
+        }
+
+        Long orderId = cacheSite.getOrderId();
+        Order order = orderService.getById(orderId);
+        if (order == null) {
+            throw new CoolException("璁㈠崟涓嶅瓨鍦�");
+        }
+        Long waveId = order.getWaveId();
+
+        boolean check = this.seedCompletePreview(param);
+        if (!check) {//璁㈠崟鏈鐞嗗畬鎴�
+            List<Long> taskIds = new ArrayList<>();
+            List<TaskDetl> taskDetls = taskDetlService.list(new LambdaQueryWrapper<TaskDetl>().eq(TaskDetl::getWaveId, waveId));
+            for (TaskDetl taskDetl : taskDetls) {
+                if(!taskIds.contains(taskDetl.getTaskId())){
+                    taskIds.add(taskDetl.getTaskId());
+                }
+            }
+
+            if (!taskIds.isEmpty()) {
+                List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().in(Task::getId, taskIds).notIn(Task::getTaskSts, TaskStsType.COMPLETE_OUT.id, TaskStsType.UPDATED_OUT.id));
+                if (!tasks.isEmpty()) {
+                    throw new CoolException("瀛樺湪鏈畬鎴愪换鍔�");
+                }
+            }
+        }
+
+        Platform platform = platformService.getById(cacheSite.getPlatformId());
+        if(platform == null){
+            throw new CoolException("闆嗚揣鍖哄煙涓嶅瓨鍦�");
+        }
+
+        List<WaveSeed> waveSeeds = waveSeedService.list(new LambdaQueryWrapper<WaveSeed>().eq(WaveSeed::getOrderId, orderId));
+        if (waveSeeds.isEmpty()) {
+            throw new CoolException("鎾鏁版嵁涓嶅瓨鍦�");
+        }
+
+        for (WaveSeed waveSeed : waveSeeds) {
+            PlatformDetl platformDetl = new PlatformDetl();
+            platformDetl.setPlatformId(platform.getId());
+            platformDetl.setPlatformNo(platform.getPlatformNo());
+            platformDetl.setOrderId(orderId);
+            platformDetl.setOrderDetlId(waveSeed.getOrderDetlId());
+            platformDetl.setTaskDetlId(waveSeed.getTaskDetlId());
+            platformDetl.setMatnr(waveSeed.getMatnr());
+            platformDetl.setBatch(waveSeed.getBatch());
+            platformDetl.setFieldParams(waveSeed.getFieldParams());
+            platformDetl.setAnfme(waveSeed.getAnfme());
+            platformDetl.setQty(waveSeed.getWorkQty());
+
+            if (!platformDetlService.save(platformDetl)) {
+                throw new CoolException("闆嗚揣鍖哄煙搴撳瓨鎻掑叆澶辫触");
+            }
+
+
+            WaveSeedLog waveSeedLog = new WaveSeedLog();
+            waveSeedLog.sync(waveSeed);
+            waveSeedLog.setId(null);
+            if (!waveSeedLogService.save(waveSeedLog)) {
+                throw new CoolException("鎾鏁版嵁杞巻鍙插け璐�");
+            }
+
+            if (!waveSeedService.removeById(waveSeed.getId())) {
+                throw new CoolException("鎾鏁版嵁鍒犻櫎澶辫触");
+            }
+        }
+
+        cacheSite.setSiteStatus(CacheSiteStatusType.O.id);
+        cacheSite.setOrderId(null);
+        cacheSite.setOrderNo(null);
+        cacheSite.setPlatformId(null);
+        cacheSite.setPlatformNo(null);
+        cacheSite.setUpdateTime(new Date());
+        if (!this.updateById(cacheSite)) {
+            throw new CoolException("鏇存柊鎾绔欑偣鏁版嵁澶辫触");
+        }
+
+    }
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformDetlLogServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformDetlLogServiceImpl.java
new file mode 100644
index 0000000..d379e18
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformDetlLogServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.service.impl;
+
+import com.zy.asrs.wms.asrs.mapper.PlatformDetlLogMapper;
+import com.zy.asrs.wms.asrs.entity.PlatformDetlLog;
+import com.zy.asrs.wms.asrs.service.PlatformDetlLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("platformDetlLogService")
+public class PlatformDetlLogServiceImpl extends ServiceImpl<PlatformDetlLogMapper, PlatformDetlLog> implements PlatformDetlLogService {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformDetlServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformDetlServiceImpl.java
new file mode 100644
index 0000000..3143a35
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformDetlServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.service.impl;
+
+import com.zy.asrs.wms.asrs.mapper.PlatformDetlMapper;
+import com.zy.asrs.wms.asrs.entity.PlatformDetl;
+import com.zy.asrs.wms.asrs.service.PlatformDetlService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("platformDetlService")
+public class PlatformDetlServiceImpl extends ServiceImpl<PlatformDetlMapper, PlatformDetl> implements PlatformDetlService {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java
new file mode 100644
index 0000000..cdb9aff
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java
@@ -0,0 +1,166 @@
+package com.zy.asrs.wms.asrs.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.framework.exception.CoolException;
+import com.zy.asrs.wms.asrs.entity.*;
+import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType;
+import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType;
+import com.zy.asrs.wms.asrs.entity.param.PlatformShippedParam;
+import com.zy.asrs.wms.asrs.mapper.PlatformMapper;
+import com.zy.asrs.wms.asrs.service.*;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service("platformService")
+public class PlatformServiceImpl extends ServiceImpl<PlatformMapper, Platform> implements PlatformService {
+
+    @Autowired
+    private PlatformDetlService platformDetlService;
+    @Autowired
+    private PlatformDetlLogService platformDetlLogService;
+    @Autowired
+    private OrderService orderService;
+    @Autowired
+    private OrderDetlService orderDetlService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private CacheSiteService cacheSiteService;
+    @Autowired
+    private WaveService waveService;
+    @Autowired
+    private WaveDetlService waveDetlService;
+    @Autowired
+    private WaveLogService waveLogService;
+    @Autowired
+    private WaveDetlLogService waveDetlLogService;
+
+    @Override
+    public void shipped(PlatformShippedParam param) {
+        if (param == null) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖");
+        }
+
+        if (param.getPlatformId() == null) {
+            throw new CoolException("闆嗚揣鍖哄煙鍙傛暟涓嶈兘涓虹┖");
+        }
+
+        Platform platform = this.getById(param.getPlatformId());
+        if(platform == null) {
+            throw new CoolException("闆嗚揣鍖哄煙鏁版嵁涓嶅瓨鍦�");
+        }
+
+        List<PlatformDetl> detls = platformDetlService.list(new LambdaQueryWrapper<PlatformDetl>().eq(PlatformDetl::getPlatformId, platform.getId()));
+        if (detls.isEmpty()) {
+            throw new CoolException("闆嗚揣鍖哄煙搴撳瓨涓虹┖");
+        }
+
+        ArrayList<Long> orderIds = new ArrayList<>();
+        for (PlatformDetl detl : detls) {
+            if (!orderIds.contains(detl.getOrderId())) {
+                orderIds.add(detl.getOrderId());
+            }
+        }
+
+        List<Order> orderList = orderService.listByIds(orderIds);
+        if(orderList.isEmpty()) {
+            throw new CoolException("璁㈠崟鏁版嵁涓嶅瓨鍦�");
+        }
+
+        ArrayList<Long> waveIds = new ArrayList<>();
+        for (Order order : orderList) {
+            waveIds.add(order.getWaveId());
+        }
+
+        if (waveIds.isEmpty()) {
+            throw new CoolException("娉㈡涓嶅瓨鍦�");
+        }
+
+        List<Task> waitTasks = taskService.selectWaitWaveOut(waveIds);
+        if (!waitTasks.isEmpty()) {
+            throw new CoolException("娉㈡瀛樺湪鏈畬鎴愪换鍔�");
+        }
+
+        for (PlatformDetl detl : detls) {
+            OrderDetl orderDetl = orderDetlService.getById(detl.getOrderDetlId());
+            orderDetl.setQty(orderDetl.getQty() + detl.getQty());
+            orderDetl.setWorkQty(orderDetl.getWorkQty() - detl.getAnfme());
+            orderDetl.setUpdateTime(new Date());
+            if (!orderDetlService.updateById(orderDetl)) {
+                throw new CoolException("璁㈠崟鏄庣粏鏇存柊澶辫触");
+            }
+        }
+
+        List<Wave> waves = waveService.listByIds(waveIds);
+        for (Wave wave : waves) {
+            WaveLog waveLog = new WaveLog();
+            waveLog.sync(wave);
+            waveLog.setId(null);
+            if (!waveLogService.save(waveLog)) {
+                throw new CoolException("娉㈡杞巻鍙插け璐�");
+            }
+
+            List<WaveDetl> waveDetls = waveDetlService.list(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, wave.getId()));
+            for (WaveDetl waveDetl : waveDetls) {
+                WaveDetlLog waveDetlLog = new WaveDetlLog();
+                waveDetlLog.sync(waveDetl);
+                waveDetlLog.setId(null);
+                waveDetlLog.setWaveId(waveLog.getId());
+                if (!waveDetlLogService.save(waveDetlLog)) {
+                    throw new CoolException("娉㈡鏄庣粏杞巻鍙插け璐�");
+                }
+
+                if (!waveDetlService.removeById(waveDetl.getId())) {
+                    throw new CoolException("娉㈡鏄庣粏鍒犻櫎澶辫触");
+                }
+            }
+
+            if (!waveService.removeById(wave.getId())) {
+                throw new CoolException("娉㈡鍒犻櫎澶辫触");
+            }
+        }
+
+        List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().in(Order::getWaveId, waveIds));
+        for (Order order : orders) {
+            order.setOrderSettle(OrderSettleType.COMPLETE.val());
+            order.setUpdateTime(new Date());
+            if (!orderService.updateById(order)) {
+                throw new CoolException("璁㈠崟鏇存柊澶辫触");
+            }
+        }
+
+        List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getPlatformId, platform.getId()));
+        for (CacheSite cacheSite : cacheSites) {
+            if (!cacheSite.getSiteStatus().equals(CacheSiteStatusType.O.id)) {
+                cacheSite.setSiteStatus(CacheSiteStatusType.O.id);
+                cacheSite.setOrderId(null);
+                cacheSite.setOrderNo(null);
+                cacheSite.setPlatformId(null);
+                cacheSite.setPlatformNo(null);
+                cacheSite.setUpdateTime(new Date());
+                if (!cacheSiteService.updateById(cacheSite)) {
+                    throw new CoolException("鎾绔欑偣鏇存柊澶辫触");
+                }
+            }
+        }
+
+        for (PlatformDetl detl : detls) {
+            PlatformDetlLog platformDetlLog = new PlatformDetlLog();
+            platformDetlLog.sync(detl);
+            platformDetlLog.setId(null);
+            if (!platformDetlLogService.save(platformDetlLog)) {
+                throw new CoolException("闆嗚揣鍖哄煙搴撳瓨杞巻鍙插け璐�");
+            }
+
+            if (!platformDetlService.removeById(detl.getId())) {
+                throw new CoolException("闆嗚揣鍖哄煙鍒犻櫎澶辫触");
+            }
+        }
+
+    }
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/TaskServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/TaskServiceImpl.java
index 9b024e8..6d0a89a 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/TaskServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/TaskServiceImpl.java
@@ -10,6 +10,7 @@
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 @Service("taskService")
@@ -28,4 +29,8 @@
         return tasks;
     }
 
+    @Override
+    public List<Task> selectWaitWaveOut(List<Long> waveIds) {
+        return this.baseMapper.selectWaitWaveOut(waveIds);
+    }
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveDetlLogServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveDetlLogServiceImpl.java
new file mode 100644
index 0000000..92152b2
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveDetlLogServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.service.impl;
+
+import com.zy.asrs.wms.asrs.mapper.WaveDetlLogMapper;
+import com.zy.asrs.wms.asrs.entity.WaveDetlLog;
+import com.zy.asrs.wms.asrs.service.WaveDetlLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("waveDetlLogService")
+public class WaveDetlLogServiceImpl extends ServiceImpl<WaveDetlLogMapper, WaveDetlLog> implements WaveDetlLogService {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveLogServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveLogServiceImpl.java
new file mode 100644
index 0000000..1fdace2
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveLogServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.service.impl;
+
+import com.zy.asrs.wms.asrs.mapper.WaveLogMapper;
+import com.zy.asrs.wms.asrs.entity.WaveLog;
+import com.zy.asrs.wms.asrs.service.WaveLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("waveLogService")
+public class WaveLogServiceImpl extends ServiceImpl<WaveLogMapper, WaveLog> implements WaveLogService {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedLogServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedLogServiceImpl.java
new file mode 100644
index 0000000..d878c6f
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedLogServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.service.impl;
+
+import com.zy.asrs.wms.asrs.mapper.WaveSeedLogMapper;
+import com.zy.asrs.wms.asrs.entity.WaveSeedLog;
+import com.zy.asrs.wms.asrs.service.WaveSeedLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("waveSeedLogService")
+public class WaveSeedLogServiceImpl extends ServiceImpl<WaveSeedLogMapper, WaveSeedLog> implements WaveSeedLogService {
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
index f65dc93..97ceb6c 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
@@ -269,7 +269,7 @@
 
         Task task = new Task();
         task.setTaskNo(this.generateTaskNo(taskType.getId()));//浠诲姟鍙�
-        task.setTaskSts(1L);//1.鐢熸垚鍏ュ簱浠诲姟
+        task.setTaskSts(TaskStsType.GENERATE_IN.id);//1.鐢熸垚鍏ュ簱浠诲姟
         task.setTaskType(taskType.getId());//浠诲姟绫诲瀷
         task.setIoPri(this.generateIoPri(taskType.getId()));//浼樺厛绾�
         task.setOriginLoc(null);
@@ -378,7 +378,7 @@
 
         Task task = new Task();
         task.setTaskNo(this.generateTaskNo(taskType.getId()));//浠诲姟鍙�
-        task.setTaskSts(1L);//1.鐢熸垚鍏ュ簱浠诲姟
+        task.setTaskSts(TaskStsType.GENERATE_IN.id);//1.鐢熸垚鍏ュ簱浠诲姟
         task.setTaskType(taskType.getId());//浠诲姟绫诲瀷
         task.setIoPri(this.generateIoPri(taskType.getId()));//浼樺厛绾�
         task.setOriginLoc(null);
@@ -416,14 +416,14 @@
 
         if (task.getTaskType() < 100) {
             //鍏ュ簱
-            task.setTaskSts(99L);//99.鍏ュ簱瀹屾垚
+            task.setTaskSts(TaskStsType.COMPLETE_IN.id);//99.鍏ュ簱瀹屾垚
         }else {
             //鍑哄簱
             TaskDetl taskDetl = taskDetls.get(0);
             if (taskDetl.getWaveId() == null) {
-                task.setTaskSts(199L);//199.鍑哄簱瀹屾垚
+                task.setTaskSts(TaskStsType.COMPLETE_OUT.id);//199.鍑哄簱瀹屾垚
             }else {
-                task.setTaskSts(198L);//198.鎾涓�
+                task.setTaskSts(TaskStsType.WAVE_SEED.id);//198.鎾涓�
             }
         }
 
@@ -632,7 +632,7 @@
             throw new CoolException("娌℃湁绌哄簱浣�");
         }
 
-        task.setTaskSts(1L);//1.鐢熸垚鍏ュ簱浠诲姟
+        task.setTaskSts(TaskStsType.GENERATE_IN.id);//1.鐢熸垚鍏ュ簱浠诲姟
         task.setTaskType(taskType);
         task.setTargetLoc(loc.getLocNo());
         task.setUpdateTime(new Date());
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java
index 456e4d9..a64b3a9 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java
@@ -7,6 +7,7 @@
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wms.asrs.entity.*;
 import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType;
+import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
 import com.zy.asrs.wms.asrs.service.*;
 import com.zy.asrs.wms.system.entity.Dict;
 import com.zy.asrs.wms.system.service.DictService;
@@ -40,6 +41,8 @@
     private OrderDetlService orderDetlService;
     @Autowired
     private DictService dictService;
+    @Autowired
+    private WaveService waveService;
 
     @Scheduled(cron = "0/3 * * * * ? ")
     @Transactional
@@ -47,7 +50,7 @@
         InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
         try {
             //鑾峰彇鍏ュ簱瀹屾垚浠诲姟
-            List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, 100));
+            List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.UPDATED_IN.id));
             if (list.isEmpty()) {
                 return;
             }
@@ -161,7 +164,7 @@
         try {
             //鑾峰彇鍑哄簱瀹屾垚浠诲姟
             List<Task> list = taskService.list(new LambdaQueryWrapper<Task>()
-                    .eq(Task::getTaskSts, 200)
+                    .eq(Task::getTaskSts, TaskStsType.UPDATED_OUT.id)
                     .in(Task::getTaskType, 101, 53, 57));
             if (list.isEmpty()) {
                 return;
@@ -180,6 +183,30 @@
 
                 Long hostId = task.getHostId();
 
+                //淇濆瓨浠诲姟鏄庣粏鍘嗗彶妗�
+                List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(task.getId());
+                if (taskDetls.isEmpty()) {
+                    throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�");
+                }
+
+                boolean flag = false;
+                for (TaskDetl taskDetl : taskDetls) {
+                    if (taskDetl.getWaveId() == null) {
+                        continue;
+                    }
+
+                    Wave wave = waveService.getById(taskDetl.getWaveId());
+                    if (wave != null) {
+                        flag = true;//娉㈡鏈畬鎴�
+                        break;
+                    }
+                }
+
+                if (flag) {
+                    continue;
+                }
+
+
                 //淇濆瓨浠诲姟鍘嗗彶妗�
                 TaskLog taskLog = new TaskLog();
                 taskLog.sync(task);
@@ -193,11 +220,6 @@
                     throw new CoolException("鍒犻櫎浠诲姟妗eけ璐�");
                 }
 
-                //淇濆瓨浠诲姟鏄庣粏鍘嗗彶妗�
-                List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(task.getId());
-                if (taskDetls.isEmpty()) {
-                    throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦�");
-                }
                 for (TaskDetl taskDetl : taskDetls) {
                     TaskDetlLog taskDetlLog = new TaskDetlLog();
                     taskDetlLog.sync(taskDetl);
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
index 3d5c5dc..1f72b35 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
@@ -6,6 +6,7 @@
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wms.asrs.entity.*;
 import com.zy.asrs.wms.asrs.entity.enums.LocStsType;
+import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
 import com.zy.asrs.wms.asrs.service.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -62,7 +63,7 @@
         InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
         try {
             //鑾峰彇鍏ュ簱瀹屾垚浠诲姟
-            List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, 99));
+            List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.COMPLETE_IN.id));
             if (list.isEmpty()) {
                 return;
             }
@@ -80,7 +81,7 @@
                         throw new CoolException("鏈煡浠诲姟绫诲瀷");
                 }
 
-                task.setTaskSts(100L);//100.搴撳瓨鏇存柊瀹屾垚
+                task.setTaskSts(TaskStsType.UPDATED_IN.id);//100.搴撳瓨鏇存柊瀹屾垚
                 task.setUpdateTime(new Date());
                 if (!taskService.updateById(task)) {
                     throw new CoolException("搴撳瓨鏇存柊澶辫触");
@@ -100,7 +101,7 @@
         InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().tenantLine(true).build());
         try {
             //鑾峰彇鍑哄簱瀹屾垚浠诲姟
-            List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, 199));
+            List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.COMPLETE_OUT.id));
             if (list.isEmpty()) {
                 return;
             }
@@ -117,7 +118,7 @@
                         throw new CoolException("鏈煡浠诲姟绫诲瀷");
                 }
 
-                task.setTaskSts(200L);//200.搴撳瓨鏇存柊瀹屾垚
+                task.setTaskSts(TaskStsType.UPDATED_OUT.id);//200.搴撳瓨鏇存柊瀹屾垚
                 if (!taskService.updateById(task)) {
                     throw new CoolException("搴撳瓨鏇存柊澶辫触");
                 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
index f6c92a5..e4af1d9 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
@@ -1,11 +1,14 @@
 package com.zy.asrs.wms.asrs.timer;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy;
 import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wms.asrs.entity.*;
 import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType;
+import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType;
+import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
 import com.zy.asrs.wms.asrs.service.*;
 import com.zy.asrs.wms.system.entity.Dict;
 import com.zy.asrs.wms.system.service.DictService;
@@ -56,7 +59,7 @@
                 return;
             }
 
-            List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, 198));
+            List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WAVE_SEED.id));
             for (Task task : taskList) {
                 Long hostId = task.getHostId();
 
@@ -114,6 +117,9 @@
                         waveSeed.setTaskDetlId(taskDetl.getId());
                         waveSeed.setAnfme(taskDetl.getAnfme());
                         waveSeed.setWorkQty(0D);
+                        waveSeed.setMatnr(taskDetl.getMatnr());
+                        waveSeed.setBatch(taskDetl.getBatch());
+                        waveSeed.setFieldParams(JSON.toJSONString(taskDetl.getUniqueField()));
                         waveSeed.setHostId(hostId);
                         if (!waveSeedService.save(waveSeed)) {
                             throw new CoolException("娉㈡鎾鍒涘缓澶辫触");
@@ -131,7 +137,7 @@
 
                 }
 
-                task.setTaskSts(199L);
+                task.setTaskSts(TaskStsType.COMPLETE_OUT.id);
                 task.setUpdateTime(new Date());
                 if (!taskService.updateById(task)) {
                     throw new CoolException("浠诲姟鏇存柊澶辫触");
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java
index b390885..2cbf817 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/utils/CodeBuilder.java
@@ -22,8 +22,8 @@
 //        generator.username="sa";
 //        generator.password="Zoneyung@zy56$";
 
-        generator.table="man_wave_seed";
-        generator.tableName="娉㈡鎾";
+        generator.table="man_platform_detl_log";
+        generator.tableName="闆嗚揣鍖哄煙搴撳瓨鍘嗗彶";
         generator.rootPackagePath="com.zy.asrs.wms";
         generator.packagePath="com.zy.asrs.wms.asrs";
 
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/PlatformDetlLogMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/PlatformDetlLogMapper.xml
new file mode 100644
index 0000000..907ae8c
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/PlatformDetlLogMapper.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="com.zy.asrs.wms.asrs.mapper.PlatformDetlLogMapper">
+
+</mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/PlatformDetlMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/PlatformDetlMapper.xml
new file mode 100644
index 0000000..fd51647
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/PlatformDetlMapper.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="com.zy.asrs.wms.asrs.mapper.PlatformDetlMapper">
+
+</mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/PlatformMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/PlatformMapper.xml
new file mode 100644
index 0000000..b49481e
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/PlatformMapper.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="com.zy.asrs.wms.asrs.mapper.PlatformMapper">
+
+</mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/TaskMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/TaskMapper.xml
index 5baba4c..ed6375b 100644
--- a/zy-asrs-wms/src/main/resources/mapper/asrs/TaskMapper.xml
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/TaskMapper.xml
@@ -2,4 +2,15 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zy.asrs.wms.asrs.mapper.TaskMapper">
 
+    <select id="selectWaitWaveOut" resultType="com.zy.asrs.wms.asrs.entity.Task">
+        select * from man_task mt
+        left join man_task_detl mtd
+        on mt.id = mtd.task_id
+        where task_sts not in (199,200)
+        and wave_id in
+        <foreach item="item" collection="waveIds" index="index"  separator="," open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+
 </mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/WaveDetlLogMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/WaveDetlLogMapper.xml
new file mode 100644
index 0000000..69018f7
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/WaveDetlLogMapper.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="com.zy.asrs.wms.asrs.mapper.WaveDetlLogMapper">
+
+</mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/WaveLogMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/WaveLogMapper.xml
new file mode 100644
index 0000000..ced69a1
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/WaveLogMapper.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="com.zy.asrs.wms.asrs.mapper.WaveLogMapper">
+
+</mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/WaveSeedLogMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/WaveSeedLogMapper.xml
new file mode 100644
index 0000000..c3e2f10
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/WaveSeedLogMapper.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="com.zy.asrs.wms.asrs.mapper.WaveSeedLogMapper">
+
+</mapper>
diff --git a/zy-asrs-wms/src/main/resources/sql/menu/platform.sql b/zy-asrs-wms/src/main/resources/sql/menu/platform.sql
new file mode 100644
index 0000000..cc1290d
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/sql/menu/platform.sql
@@ -0,0 +1,9 @@
+-- save platform record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '闆嗚揣绠$悊', '0', '/out/platform', '/out/platform', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ闆嗚揣绠$悊', '1088', '1', 'asrs:platform:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞闆嗚揣绠$悊', '1088', '1', 'asrs:platform:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼闆嗚揣绠$悊', '1088', '1', 'asrs:platform:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎闆嗚揣绠$悊', '1088', '1', 'asrs:platform:remove', '3', '1', '1');
+
diff --git a/zy-asrs-wms/src/main/resources/sql/menu/platformDetl.sql b/zy-asrs-wms/src/main/resources/sql/menu/platformDetl.sql
new file mode 100644
index 0000000..88ac340
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/sql/menu/platformDetl.sql
@@ -0,0 +1,9 @@
+-- save platformDetl record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '闆嗚揣搴撳瓨', '0', '/out/platformDetl', '/out/platformDetl', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ闆嗚揣搴撳瓨', '', '1', 'asrs:platformDetl:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞闆嗚揣搴撳瓨', '', '1', 'asrs:platformDetl:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼闆嗚揣搴撳瓨', '', '1', 'asrs:platformDetl:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎闆嗚揣搴撳瓨', '', '1', 'asrs:platformDetl:remove', '3', '1', '1');
+
diff --git a/zy-asrs-wms/src/main/resources/sql/menu/platformDetlLog.sql b/zy-asrs-wms/src/main/resources/sql/menu/platformDetlLog.sql
new file mode 100644
index 0000000..c869b83
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/sql/menu/platformDetlLog.sql
@@ -0,0 +1,9 @@
+-- save platformDetlLog record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '闆嗚揣鍖哄煙搴撳瓨鍘嗗彶绠$悊', '0', '/asrs/platformDetlLog', '/asrs/platformDetlLog', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ闆嗚揣鍖哄煙搴撳瓨鍘嗗彶', '', '1', 'asrs:platformDetlLog:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞闆嗚揣鍖哄煙搴撳瓨鍘嗗彶', '', '1', 'asrs:platformDetlLog:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼闆嗚揣鍖哄煙搴撳瓨鍘嗗彶', '', '1', 'asrs:platformDetlLog:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎闆嗚揣鍖哄煙搴撳瓨鍘嗗彶', '', '1', 'asrs:platformDetlLog:remove', '3', '1', '1');
+
diff --git a/zy-asrs-wms/src/main/resources/sql/menu/waveDetlLog.sql b/zy-asrs-wms/src/main/resources/sql/menu/waveDetlLog.sql
new file mode 100644
index 0000000..a65631b
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/sql/menu/waveDetlLog.sql
@@ -0,0 +1,9 @@
+-- save waveDetlLog record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '娉㈡鏄庣粏鍘嗗彶绠$悊', '0', '/asrs/waveDetlLog', '/asrs/waveDetlLog', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ娉㈡鏄庣粏鍘嗗彶', '', '1', 'asrs:waveDetlLog:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞娉㈡鏄庣粏鍘嗗彶', '', '1', 'asrs:waveDetlLog:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼娉㈡鏄庣粏鍘嗗彶', '', '1', 'asrs:waveDetlLog:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎娉㈡鏄庣粏鍘嗗彶', '', '1', 'asrs:waveDetlLog:remove', '3', '1', '1');
+
diff --git a/zy-asrs-wms/src/main/resources/sql/menu/waveLog.sql b/zy-asrs-wms/src/main/resources/sql/menu/waveLog.sql
new file mode 100644
index 0000000..60e7aa5
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/sql/menu/waveLog.sql
@@ -0,0 +1,9 @@
+-- save waveLog record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '娉㈡鍘嗗彶绠$悊', '0', '/asrs/waveLog', '/asrs/waveLog', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ娉㈡鍘嗗彶', '', '1', 'asrs:waveLog:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞娉㈡鍘嗗彶', '', '1', 'asrs:waveLog:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼娉㈡鍘嗗彶', '', '1', 'asrs:waveLog:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎娉㈡鍘嗗彶', '', '1', 'asrs:waveLog:remove', '3', '1', '1');
+
diff --git a/zy-asrs-wms/src/main/resources/sql/menu/waveSeedLog.sql b/zy-asrs-wms/src/main/resources/sql/menu/waveSeedLog.sql
new file mode 100644
index 0000000..4e06696
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/sql/menu/waveSeedLog.sql
@@ -0,0 +1,9 @@
+-- save waveSeedLog record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '娉㈡鎾鍘嗗彶绠$悊', '0', '/asrs/waveSeedLog', '/asrs/waveSeedLog', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ娉㈡鎾鍘嗗彶', '', '1', 'asrs:waveSeedLog:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞娉㈡鎾鍘嗗彶', '', '1', 'asrs:waveSeedLog:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼娉㈡鎾鍘嗗彶', '', '1', 'asrs:waveSeedLog:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎娉㈡鎾鍘嗗彶', '', '1', 'asrs:waveSeedLog:remove', '3', '1', '1');
+

--
Gitblit v1.9.1