From 351d0c46f037840fe01a237204812aed2caed757 Mon Sep 17 00:00:00 2001
From: TanYibin <5491541@qq.com>
Date: Fri, 8 Dec 2023 10:47:04 +0800
Subject: [PATCH] 波次管理页面提交

---
 ant-design-vue-jeecg/src/views/system/config/WaveConfigDetailList.vue                                                | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ant-design-vue-jeecg/src/views/system/config/WaveConfigList.vue                                                      | 276 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ant-design-vue-jeecg/src/views/system/config/modules/WaveConfigDetailModal.vue                                       | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ant-design-vue-jeecg/src/views/system/config/modules/WaveConfigModal.vue                                             | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/controller/WaveConfigController.java          | 305 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/entity/WaveConfig.java                        |  80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/entity/WaveConfigDetail.java                  |  77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/WaveConfigDetailMapper.java            |  20 ++++++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/WaveConfigMapper.java                  |  17 +++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/xml/WaveConfigMapper.xml               |   5 +++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/IWaveConfigDetailService.java         |  16 ++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/IWaveConfigService.java               |  29 +++++++++++++++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/impl/WaveConfigDetailServiceImpl.java |  27 +++++++++++++++++++++++++++
 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/impl/WaveConfigServiceImpl.java       |  47 +++++++++++++++++++++++++++++++++++++++++++++++
 14 files changed, 1358 insertions(+), 0 deletions(-)
 create mode 100644 ant-design-vue-jeecg/src/views/system/config/WaveConfigDetailList.vue
 create mode 100644 ant-design-vue-jeecg/src/views/system/config/WaveConfigList.vue
 create mode 100644 ant-design-vue-jeecg/src/views/system/config/modules/WaveConfigDetailModal.vue
 create mode 100644 ant-design-vue-jeecg/src/views/system/config/modules/WaveConfigModal.vue
 create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/controller/WaveConfigController.java
 create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/entity/WaveConfig.java
 create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/entity/WaveConfigDetail.java
 create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/WaveConfigDetailMapper.java
 create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/WaveConfigMapper.java
 create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/xml/WaveConfigMapper.xml
 create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/IWaveConfigDetailService.java
 create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/IWaveConfigService.java
 create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/impl/WaveConfigDetailServiceImpl.java
 create mode 100644 huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/impl/WaveConfigServiceImpl.java

diff --git a/ant-design-vue-jeecg/src/views/system/config/WaveConfigDetailList.vue b/ant-design-vue-jeecg/src/views/system/config/WaveConfigDetailList.vue
new file mode 100644
index 0000000..f1f567e
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/config/WaveConfigDetailList.vue
@@ -0,0 +1,174 @@
+<template>
+  <a-card :bordered="false" :class="'cust-erp-sub-tab'">
+    <!-- 操作按钮区域 -->
+    <div class="table-operator" v-if="mainId">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete" />删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down"/></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
+        <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :scroll="{ x: true }"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
+        @change="handleTableChange"
+      >
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+          <a-divider type="vertical" />
+          <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+            <a>删除</a>
+          </a-popconfirm>
+        </span>
+      </a-table>
+    </div>
+
+    <waveConfigDetail-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></waveConfigDetail-modal>
+  </a-card>
+</template>
+
+<script>
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import WaveConfigDetailModal from './modules/WaveConfigDetailModal'
+
+export default {
+  name: 'WaveConfigDetailList',
+  mixins: [JeecgListMixin],
+  components: { WaveConfigDetailModal },
+  props: {
+    mainId: {
+      type: String,
+      default: '',
+      required: false
+    }
+  },
+  watch: {
+    mainId: {
+      immediate: true,
+      handler(val) {
+        if (!this.mainId) {
+          this.clearList()
+        } else {
+          this.queryParam['mainId'] = val
+          this.loadData(1)
+        }
+      }
+    }
+  },
+  data() {
+    return {
+      description: '波次配置管理页面',
+      disableMixinCreated: true,
+      // 表头
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          }
+        },
+        {
+          title: '主表ID',
+          align: 'center',
+          dataIndex: 'mainId'
+        },
+        {
+          title: '物料编码',
+          align: 'center',
+          dataIndex: 'materialCode'
+        },
+        {
+          title: '物料名称',
+          align: 'center',
+          dataIndex: 'materialName'
+        },
+        {
+          title: '装载数量',
+          align: 'center',
+          dataIndex: 'loadingCount'
+        },
+        {
+          title: '排序优先级',
+          align: 'center',
+          dataIndex: 'sortingPriority'
+        },
+        {
+          title: '创建人',
+          align: 'center',
+          dataIndex: 'createBy'
+        },
+        {
+          title: '创建日期',
+          align: 'center',
+          dataIndex: 'createTime'
+        },
+        {
+          title: '更新人',
+          align: 'center',
+          dataIndex: 'updateBy'
+        },
+        {
+          title: '更新日期',
+          align: 'center',
+          dataIndex: 'updateTime'
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          align: 'center',
+          fixed: 'right',
+          width: 147,
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/waveConfig/waveConfig/listWaveConfigDetailByMainId',
+        delete: '/waveConfig/waveConfig/deleteWaveConfigDetail',
+        deleteBatch: '/waveConfig/waveConfig/deleteBatchWaveConfigDetail',
+        exportXlsUrl: '/waveConfig/waveConfig/exportWaveConfigDetail',
+        importUrl: '/waveConfig/waveConfig/importWaveConfigDetail'
+      },
+      dictOptions: {}
+    }
+  },
+  created() {},
+  computed: {
+    importExcelUrl() {
+      return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`
+    }
+  },
+  methods: {
+    clearList() {
+      this.dataSource = []
+      this.selectedRowKeys = []
+      this.ipagination.current = 1
+    }
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
diff --git a/ant-design-vue-jeecg/src/views/system/config/WaveConfigList.vue b/ant-design-vue-jeecg/src/views/system/config/WaveConfigList.vue
new file mode 100644
index 0000000..e6bea02
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/config/WaveConfigList.vue
@@ -0,0 +1,276 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="波次名称">
+              <a-input placeholder="请输入波次名称" v-model="queryParam.waveName"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="波次模式">
+              <j-dict-select-tag placeholder="请选择波次模式" v-model="queryParam.waveModel" dictCode="wave_model" />
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="是否启用">
+              <j-dict-select-tag placeholder="请选择是否启用" v-model="queryParam.isEnable" dictCode="is_enable_status" />
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('波次配置')">导出</a-button>
+      <a-upload
+        name="file"
+        :showUploadList="false"
+        :multiple="false"
+        :headers="tokenHeader"
+        :action="importExcelUrl"
+        @change="handleImportExcel"
+      >
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <!-- 高级查询区域 -->
+      <j-super-query
+        :fieldList="superFieldList"
+        ref="superQueryModal"
+        @handleSuperQuery="handleSuperQuery"
+      ></j-super-query>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
+        <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        class="j-table-force-nowrap"
+        :scroll="{ x: true }"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio' }"
+        :customRow="clickThenSelect"
+        @change="handleTableChange"
+      >
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+    <a-tabs defaultActiveKey="1">
+      <a-tab-pane tab="波次配置详情" key="1">
+        <WaveConfigDetailList :mainId="selectedMainId" />
+      </a-tab-pane>
+    </a-tabs>
+
+    <waveConfig-modal ref="modalForm" @ok="modalFormOk"></waveConfig-modal>
+  </a-card>
+</template>
+
+<script>
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import WaveConfigModal from './modules/WaveConfigModal'
+import { getAction } from '@/api/manage'
+import WaveConfigDetailList from './WaveConfigDetailList'
+import '@/assets/less/TableExpand.less'
+
+export default {
+  name: 'WaveConfigList',
+  mixins: [JeecgListMixin],
+  components: {
+    WaveConfigDetailList,
+    WaveConfigModal
+  },
+  data() {
+    return {
+      description: '波次配置管理页面',
+      // 表头
+      columns: [
+        {
+          title: '波次名称',
+          align: 'center',
+          dataIndex: 'waveName'
+        },
+        {
+          title: '波次大小',
+          align: 'center',
+          dataIndex: 'waveSize'
+        },
+        {
+          title: '波次周期(秒)',
+          align: 'center',
+          dataIndex: 'waveCycle'
+        },
+        {
+          title: '波次模式',
+          align: 'center',
+          dataIndex: 'waveModel_dictText',
+          scopedSlots: {customRender: 'waveModel_dictText'}
+        },
+        {
+          title: '是否启用',
+          align: 'center',
+          dataIndex: 'isEnable_dictText',
+          scopedSlots: {customRender: 'isEnable_dictText'}
+        },
+        {
+          title: '创建人',
+          align: 'center',
+          dataIndex: 'createBy'
+        },
+        {
+          title: '创建日期',
+          align: 'center',
+          dataIndex: 'createTime'
+        },
+        {
+          title: '更新人',
+          align: 'center',
+          dataIndex: 'updateBy'
+        },
+        {
+          title: '更新日期',
+          align: 'center',
+          dataIndex: 'updateTime'
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          align: 'center',
+          fixed: 'right',
+          width: 147,
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/waveConfig/waveConfig/list',
+        delete: '/waveConfig/waveConfig/delete',
+        deleteBatch: '/waveConfig/waveConfig/deleteBatch',
+        exportXlsUrl: '/waveConfig/waveConfig/exportXls',
+        importExcelUrl: 'waveConfig/waveConfig/importExcel'
+      },
+      dictOptions: {},
+      /* 分页参数 */
+      ipagination: {
+        current: 1,
+        pageSize: 5,
+        pageSizeOptions: ['5', '10', '50'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 共' + total + '条'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+      selectedMainId: '',
+      superFieldList: []
+    }
+  },
+  created() {
+    this.getSuperFieldList()
+  },
+  computed: {
+    importExcelUrl: function() {
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
+    }
+  },
+  methods: {
+    initDictConfig() {},
+    clickThenSelect(record) {
+      return {
+        on: {
+          click: () => {
+            this.onSelectChange(record.id.split(','), [record])
+          }
+        }
+      }
+    },
+    onClearSelected() {
+      this.selectedRowKeys = []
+      this.selectionRows = []
+      this.selectedMainId = ''
+    },
+    onSelectChange(selectedRowKeys, selectionRows) {
+      this.selectedMainId = selectedRowKeys[0]
+      this.selectedRowKeys = selectedRowKeys
+      this.selectionRows = selectionRows
+    },
+    loadData(arg) {
+      if (!this.url.list) {
+        this.$message.error('请设置url.list属性!')
+        return
+      }
+      //加载数据 若传入参数1则加载第一页的内容
+      if (arg === 1) {
+        this.ipagination.current = 1
+      }
+      this.onClearSelected()
+      var params = this.getQueryParams() //查询条件
+      this.loading = true
+      getAction(this.url.list, params).then(res => {
+        if (res.success) {
+          this.dataSource = res.result.records
+          this.ipagination.total = res.result.total
+        }
+        if (res.code === 510) {
+          this.$message.warning(res.message)
+        }
+        this.loading = false
+      })
+    },
+    getSuperFieldList() {
+      let fieldList = []
+      fieldList.push({ type: 'string', value: 'waveName', text: '波次名称', dictCode: '' })
+      fieldList.push({ type: 'int', value: 'waveSize', text: '波次大小', dictCode: '' })
+      fieldList.push({ type: 'int', value: 'waveCycle', text: '波次周期(秒)', dictCode: '' })
+      fieldList.push({ type: 'string', value: 'waveModel', text: '波次模式', dictCode: 'wave_model' })
+      fieldList.push({ type: 'int', value: 'isEnable', text: '是否启用', dictCode: 'is_enable_status' })
+      fieldList.push({ type: 'string', value: 'createBy', text: '创建人', dictCode: '' })
+      fieldList.push({ type: 'datetime', value: 'createTime', text: '创建日期' })
+      fieldList.push({ type: 'string', value: 'updateBy', text: '更新人', dictCode: '' })
+      fieldList.push({ type: 'datetime', value: 'updateTime', text: '更新日期' })
+      this.superFieldList = fieldList
+    }
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/ant-design-vue-jeecg/src/views/system/config/modules/WaveConfigDetailModal.vue b/ant-design-vue-jeecg/src/views/system/config/modules/WaveConfigDetailModal.vue
new file mode 100644
index 0000000..00b81be
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/config/modules/WaveConfigDetailModal.vue
@@ -0,0 +1,147 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭"
+  >
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="物料" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialCode">
+              <j-search-select-tag
+                v-model="model.materialCode"
+                dict="material,name,code"
+                placeholder="请选择物料编码"
+                :pageSize="10"
+                :async="true"
+              />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="装载数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="loadingCount">
+              <a-input-number v-model="model.loadingCount" placeholder="请输入装载数量" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="排序优先级" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sortingPriority">
+              <a-input-number v-model="model.sortingPriority" placeholder="请输入排序优先级" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+import { httpAction } from '@/api/manage'
+import { validateDuplicateValue } from '@/utils/util'
+import { searchMaterialByCode } from '@/api/api'
+
+export default {
+  name: 'WaveConfigDetailModal',
+  components: {},
+  props: {
+    mainId: {
+      type: String,
+      required: false,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      title: '操作',
+      width: 800,
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+      confirmLoading: false,
+      validatorRules: {
+        materialCode: [{ required: true, message: '请输入物料编码!' }],
+        loadingCount: [{ required: true, message: '请输入装载数量!' }],
+        sortingPriority: [{ required: true, message: '请输入排序优先级!' }]
+      },
+      url: {
+        add: '/waveConfig/waveConfig/addWaveConfigDetail',
+        edit: '/waveConfig/waveConfig/editWaveConfigDetail'
+      }
+    }
+  },
+  created() {
+    //备份model原始值
+    this.modelDefault = JSON.parse(JSON.stringify(this.model))
+    this.searchMaterial()
+  },
+  methods: {
+    searchMaterial() {
+      const that = this
+      that.querySource.materialCode = that.model.materialCode
+      searchMaterialByCode(that.querySource).then(res => {
+        that.materialList = res.result
+      })
+    },
+    add() {
+      this.edit(this.modelDefault)
+    },
+    edit(record) {
+      this.model = Object.assign({}, record)
+      this.visible = true
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    handleOk() {
+      const that = this
+      // 触发表单验证
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          that.confirmLoading = true
+          let httpurl = ''
+          let method = ''
+          if (!this.model.id) {
+            httpurl += this.url.add
+            method = 'post'
+          } else {
+            httpurl += this.url.edit
+            method = 'put'
+          }
+          this.model['mainId'] = this.mainId
+          httpAction(httpurl, this.model, method)
+            .then(res => {
+              if (res.success) {
+                that.$message.success(res.message)
+                that.$emit('ok')
+              } else {
+                that.$message.warning(res.message)
+              }
+            })
+            .finally(() => {
+              that.confirmLoading = false
+              that.close()
+            })
+        } else {
+          return false
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    }
+  }
+}
+</script>
diff --git a/ant-design-vue-jeecg/src/views/system/config/modules/WaveConfigModal.vue b/ant-design-vue-jeecg/src/views/system/config/modules/WaveConfigModal.vue
new file mode 100644
index 0000000..a0d2287
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/config/modules/WaveConfigModal.vue
@@ -0,0 +1,138 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="波次名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="waveName">
+              <a-input v-model="model.waveName" placeholder="请输入波次名称" ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="波次大小" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="waveSize">
+              <a-input-number v-model="model.waveSize" placeholder="请输入波次大小" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="波次周期(秒)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="waveCycle">
+              <a-input-number v-model="model.waveCycle" placeholder="请输入波次周期(秒)" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="波次模式(缺货,补货)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="waveModel">
+              <j-dict-select-tag v-model="model.waveModel" title="波次模式" dictCode="wave_model" placeholder="请输入波次模式"/>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="是否启用" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="isEnable">
+              <j-dict-select-tag v-model="model.isEnable" title="是否启用" dictCode="is_enable_status" placeholder="请输入是否启用"/>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+
+  import { httpAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+
+  export default {
+    name: "WaveConfigModal",
+    components: {
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        visible: false,
+        model:{
+        },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+validatorRules: {
+        waveName: [
+            { required: true, message: '请输入波次名称!'},
+        ],
+},
+        url: {
+          add: "/waveConfig/waveConfig/add",
+          edit: "/waveConfig/waveConfig/edit",
+        }
+
+      }
+    },
+    created () {
+    //备份model原始值
+      this.modelDefault = JSON.parse(JSON.stringify(this.model));
+    },
+    methods: {
+      add () {
+        this.edit(this.modelDefault);
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+        this.$refs.form.clearValidate();
+      },
+      handleOk () {
+        const that = this;
+        // 触发表单验证
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+          }else{
+             return false
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/controller/WaveConfigController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/controller/WaveConfigController.java
new file mode 100644
index 0000000..e556fb3
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/controller/WaveConfigController.java
@@ -0,0 +1,305 @@
+package org.jeecg.modules.wms.config.waveConfig.controller;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfig;
+import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfigDetail;
+import org.jeecg.modules.wms.config.waveConfig.service.IWaveConfigDetailService;
+import org.jeecg.modules.wms.config.waveConfig.service.IWaveConfigService;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @Description: 波次配置
+ * @Author:      jeecg-boot
+ * @Date:        2023-12-07
+ * @Version:     V1.0
+ */
+@Api(tags = "波次配置")
+@RestController
+@RequestMapping("/waveConfig/waveConfig")
+@Slf4j
+public class WaveConfigController extends JeecgController<WaveConfig, IWaveConfigService> {
+
+    @Autowired
+    private IWaveConfigService waveConfigService;
+
+    @Autowired
+    private IWaveConfigDetailService waveConfigDetailService;
+
+    /*---------------------------------主表处理-begin-------------------------------------*/
+
+    /**
+     * 分页列表查询
+     * @param  waveConfig
+     * @param  pageNo
+     * @param  pageSize
+     * @param  req
+     * @return
+     */
+    // @AutoLog(value = "波次配置-分页列表查询")
+    @ApiOperation(value = "波次配置-分页列表查询", notes = "波次配置-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<WaveConfig>> queryPageList(WaveConfig waveConfig, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) {
+        QueryWrapper<WaveConfig> queryWrapper = QueryGenerator.initQueryWrapper(waveConfig, req.getParameterMap());
+        Page<WaveConfig> page = new Page<WaveConfig>(pageNo, pageSize);
+        IPage<WaveConfig> pageList = waveConfigService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     * @param  waveConfig
+     * @return
+     */
+    @AutoLog(value = "波次配置-添加")
+    @ApiOperation(value = "波次配置-添加", notes = "波次配置-添加")
+    @RequiresPermissions("waveConfig:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody WaveConfig waveConfig) {
+        waveConfigService.save(waveConfig);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     * @param  waveConfig
+     * @return
+     */
+    @AutoLog(value = "波次配置-编辑")
+    @ApiOperation(value = "波次配置-编辑", notes = "波次配置-编辑")
+    @RequiresPermissions("waveConfig:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody WaveConfig waveConfig) {
+        waveConfigService.updateById(waveConfig);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     * @param  id
+     * @return
+     */
+    @AutoLog(value = "波次配置-通过id删除")
+    @ApiOperation(value = "波次配置-通过id删除", notes = "波次配置-通过id删除")
+    @RequiresPermissions("waveConfig:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        waveConfigService.delMain(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     * @param  ids
+     * @return
+     */
+    @AutoLog(value = "波次配置-批量删除")
+    @ApiOperation(value = "波次配置-批量删除", notes = "波次配置-批量删除")
+    @RequiresPermissions("waveConfig:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.waveConfigService.delBatchMain(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 导出
+     * @return
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, WaveConfig waveConfig) {
+        return super.exportXls(request, waveConfig, WaveConfig.class, "波次配置");
+    }
+
+    /**
+     * 导入
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, WaveConfig.class);
+    }
+    /*---------------------------------主表处理-end-------------------------------------*/
+
+    /*--------------------------------子表处理-波次配置详情-begin----------------------------------------------*/
+    /**
+     * 通过主表ID查询
+     * @return
+     */
+    // @AutoLog(value = "波次配置详情-通过主表ID查询")
+    @ApiOperation(value = "波次配置详情-通过主表ID查询", notes = "波次配置详情-通过主表ID查询")
+    @GetMapping(value = "/listWaveConfigDetailByMainId")
+    public Result<IPage<WaveConfigDetail>> listWaveConfigDetailByMainId(WaveConfigDetail waveConfigDetail,
+        @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+        HttpServletRequest req) {
+        QueryWrapper<WaveConfigDetail> queryWrapper = QueryGenerator.initQueryWrapper(waveConfigDetail, req.getParameterMap());
+        Page<WaveConfigDetail> page = new Page<WaveConfigDetail>(pageNo, pageSize);
+        IPage<WaveConfigDetail> pageList = waveConfigDetailService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     * @param  waveConfigDetail
+     * @return
+     */
+    @AutoLog(value = "波次配置详情-添加")
+    @ApiOperation(value = "波次配置详情-添加", notes = "波次配置详情-添加")
+    @PostMapping(value = "/addWaveConfigDetail")
+    public Result<String> addWaveConfigDetail(@RequestBody WaveConfigDetail waveConfigDetail) {
+        waveConfigDetailService.save(waveConfigDetail);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     * @param  waveConfigDetail
+     * @return
+     */
+    @AutoLog(value = "波次配置详情-编辑")
+    @ApiOperation(value = "波次配置详情-编辑", notes = "波次配置详情-编辑")
+    @RequestMapping(value = "/editWaveConfigDetail", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> editWaveConfigDetail(@RequestBody WaveConfigDetail waveConfigDetail) {
+        waveConfigDetailService.updateById(waveConfigDetail);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     * @param  id
+     * @return
+     */
+    @AutoLog(value = "波次配置详情-通过id删除")
+    @ApiOperation(value = "波次配置详情-通过id删除", notes = "波次配置详情-通过id删除")
+    @DeleteMapping(value = "/deleteWaveConfigDetail")
+    public Result<String> deleteWaveConfigDetail(@RequestParam(name = "id", required = true) String id) {
+        waveConfigDetailService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     * @param  ids
+     * @return
+     */
+    @AutoLog(value = "波次配置详情-批量删除")
+    @ApiOperation(value = "波次配置详情-批量删除", notes = "波次配置详情-批量删除")
+    @DeleteMapping(value = "/deleteBatchWaveConfigDetail")
+    public Result<String> deleteBatchWaveConfigDetail(@RequestParam(name = "ids", required = true) String ids) {
+        this.waveConfigDetailService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 导出
+     * @return
+     */
+    @RequestMapping(value = "/exportWaveConfigDetail")
+    public ModelAndView exportWaveConfigDetail(HttpServletRequest request, WaveConfigDetail waveConfigDetail) {
+        // Step.1 组装查询条件
+        QueryWrapper<WaveConfigDetail> queryWrapper = QueryGenerator.initQueryWrapper(waveConfigDetail, request.getParameterMap());
+        LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
+
+        // Step.2 获取导出数据
+        List<WaveConfigDetail> pageList = waveConfigDetailService.list(queryWrapper);
+        List<WaveConfigDetail> exportList = null;
+
+        // 过滤选中数据
+        String selections = request.getParameter("selections");
+        if (oConvertUtils.isNotEmpty(selections)) {
+            List<String> selectionList = Arrays.asList(selections.split(","));
+            exportList = pageList.stream().filter(item -> selectionList.contains(item.getId().toString())).collect(Collectors.toList());
+        } else {
+            exportList = pageList;
+        }
+
+        // Step.3 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        mv.addObject(NormalExcelConstants.FILE_NAME, "波次配置详情"); // 此处设置的filename无效 ,前端会重更新设置一下
+        mv.addObject(NormalExcelConstants.CLASS, WaveConfigDetail.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("波次配置详情报表", "导出人:" + sysUser.getRealname(), "波次配置详情"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
+        return mv;
+    }
+
+    /**
+     * 导入
+     * @return
+     */
+    @RequestMapping(value = "/importWaveConfigDetail/{mainId}")
+    public Result<?> importWaveConfigDetail(HttpServletRequest request, HttpServletResponse response, @PathVariable("mainId") String mainId) {
+        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
+        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+            MultipartFile file = entity.getValue();// 获取上传文件对象
+            ImportParams params = new ImportParams();
+            params.setTitleRows(2);
+            params.setHeadRows(1);
+            params.setNeedSave(true);
+            try {
+                List<WaveConfigDetail> list = ExcelImportUtil.importExcel(file.getInputStream(), WaveConfigDetail.class, params);
+                for (WaveConfigDetail temp : list) {
+                    temp.setMainId(Integer.parseInt(mainId));
+                }
+                long start = System.currentTimeMillis();
+                waveConfigDetailService.saveBatch(list);
+                log.info("消耗时间" + (System.currentTimeMillis() - start) + "毫秒");
+                return Result.OK("文件导入成功!数据行数:" + list.size());
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                return Result.error("文件导入失败:" + e.getMessage());
+            } finally {
+                try {
+                    file.getInputStream().close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return Result.error("文件导入失败!");
+    }
+
+    /*--------------------------------子表处理-波次配置详情-end----------------------------------------------*/
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/entity/WaveConfig.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/entity/WaveConfig.java
new file mode 100644
index 0000000..d33b978
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/entity/WaveConfig.java
@@ -0,0 +1,80 @@
+package org.jeecg.modules.wms.config.waveConfig.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 波次配置
+ * @Author:      jeecg-boot
+ * @Date:        2023-12-07
+ * @Version:     V1.0
+ */
+@Data
+@TableName("wave_config")
+@ApiModel(value = "wave_config对象", description = "波次配置")
+public class WaveConfig implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "ID")
+    private java.lang.Integer id;
+
+    /** 波次名称 */
+    @Excel(name = "波次名称", width = 15)
+    @ApiModelProperty(value = "波次名称")
+    private java.lang.String waveName;
+
+    /** 波次大小 */
+    @Excel(name = "波次大小", width = 15)
+    @ApiModelProperty(value = "波次大小")
+    private java.lang.Integer waveSize;
+
+    /** 波次周期(秒) */
+    @Excel(name = "波次周期(秒)", width = 15)
+    @ApiModelProperty(value = "波次周期(秒)")
+    private java.lang.Integer waveCycle;
+
+    /** 波次模式(缺货,补货) */
+    @Excel(name = "波次模式(缺货,补货)", width = 15, dicCode = "wave_model")
+    @ApiModelProperty(value = "波次模式(缺货,补货)")
+    @Dict(dicCode = "wave_model")
+    private java.lang.String waveModel;
+
+    /** 是否启用 */
+    @Excel(name = "是否启用", width = 15, dicCode = "is_enable_status")
+    @ApiModelProperty(value = "是否启用")
+    @Dict(dicCode = "is_enable_status")
+    private java.lang.Integer isEnable;
+
+    /** 创建人 */
+    @ApiModelProperty(value = "创建人")
+    private java.lang.String createBy;
+
+    /** 创建日期 */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+
+    /** 更新人 */
+    @ApiModelProperty(value = "更新人")
+    private java.lang.String updateBy;
+
+    /** 更新日期 */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/entity/WaveConfigDetail.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/entity/WaveConfigDetail.java
new file mode 100644
index 0000000..15e55e6
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/entity/WaveConfigDetail.java
@@ -0,0 +1,77 @@
+package org.jeecg.modules.wms.config.waveConfig.entity;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.jeecg.common.aspect.annotation.Dict;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @Description: 波次配置详情
+ * @Author:      jeecg-boot
+ * @Date:        2023-12-07
+ * @Version:     V1.0
+ */
+@Data
+@TableName("wave_config_detail")
+@ApiModel(value = "wave_config_detail对象", description = "波次配置详情")
+public class WaveConfigDetail implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** ID */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "ID")
+    private java.lang.Integer id;
+
+    /** 主表ID */
+    @ApiModelProperty(value = "主表ID")
+    private java.lang.Integer mainId;
+
+    /** 物料编码 */
+    @Excel(name = "物料编码", width = 15)
+    @ApiModelProperty(value = "物料编码")
+    private java.lang.String materialCode;
+
+    /** 物料名称 */
+    @Excel(name = "物料名称", width = 15)
+    @ApiModelProperty(value = "物料名称")
+    private java.lang.String materialName;
+
+    /** 装载数量 */
+    @Excel(name = "装载数量", width = 15)
+    @ApiModelProperty(value = "装载数量")
+    private java.lang.Integer loadingCount;
+
+    /** 排序优先级 */
+    @Excel(name = "排序优先级", width = 15)
+    @ApiModelProperty(value = "排序优先级")
+    private java.lang.Integer sortingPriority;
+
+    /** 创建人 */
+    @ApiModelProperty(value = "创建人")
+    private java.lang.String createBy;
+
+    /** 创建日期 */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+
+    /** 更新人 */
+    @ApiModelProperty(value = "更新人")
+    private java.lang.String updateBy;
+
+    /** 更新日期 */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/WaveConfigDetailMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/WaveConfigDetailMapper.java
new file mode 100644
index 0000000..7d5a9cf
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/WaveConfigDetailMapper.java
@@ -0,0 +1,20 @@
+package org.jeecg.modules.wms.config.waveConfig.mapper;
+
+import java.util.List;
+import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfigDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Description: 波次配置详情
+ * @Author:      jeecg-boot
+ * @Date:        2023-12-07
+ * @Version:     V1.0
+ */
+public interface WaveConfigDetailMapper extends BaseMapper<WaveConfigDetail> {
+
+    public boolean deleteByMainId(@Param("mainId") String mainId);
+
+    public List<WaveConfigDetail> selectByMainId(@Param("mainId") String mainId);
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/WaveConfigMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/WaveConfigMapper.java
new file mode 100644
index 0000000..a821874
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/WaveConfigMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.wms.config.waveConfig.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 波次配置
+ * @Author:      jeecg-boot
+ * @Date:        2023-12-07
+ * @Version:     V1.0
+ */
+public interface WaveConfigMapper extends BaseMapper<WaveConfig> {
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/xml/WaveConfigMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/xml/WaveConfigMapper.xml
new file mode 100644
index 0000000..12d9e0a
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/mapper/xml/WaveConfigMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.wms.config.waveConfig.mapper.WaveConfigMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/IWaveConfigDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/IWaveConfigDetailService.java
new file mode 100644
index 0000000..7cee43f
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/IWaveConfigDetailService.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.wms.config.waveConfig.service;
+
+import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfigDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+
+/**
+ * @Description: 波次配置详情
+ * @Author:      jeecg-boot
+ * @Date:        2023-12-07
+ * @Version:     V1.0
+ */
+public interface IWaveConfigDetailService extends IService<WaveConfigDetail> {
+
+    public List<WaveConfigDetail> selectByMainId(String mainId);
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/IWaveConfigService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/IWaveConfigService.java
new file mode 100644
index 0000000..b95adb6
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/IWaveConfigService.java
@@ -0,0 +1,29 @@
+package org.jeecg.modules.wms.config.waveConfig.service;
+
+import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfigDetail;
+import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfig;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.beans.factory.annotation.Autowired;
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 波次配置
+ * @Author:      jeecg-boot
+ * @Date:        2023-12-07
+ * @Version:     V1.0
+ */
+public interface IWaveConfigService extends IService<WaveConfig> {
+
+    /**
+     * 删除一对多
+     */
+    public void delMain(String id);
+
+    /**
+     * 批量删除一对多
+     */
+    public void delBatchMain(Collection<? extends Serializable> idList);
+
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/impl/WaveConfigDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/impl/WaveConfigDetailServiceImpl.java
new file mode 100644
index 0000000..9040c40
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/impl/WaveConfigDetailServiceImpl.java
@@ -0,0 +1,27 @@
+package org.jeecg.modules.wms.config.waveConfig.service.impl;
+
+import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfigDetail;
+import org.jeecg.modules.wms.config.waveConfig.mapper.WaveConfigDetailMapper;
+import org.jeecg.modules.wms.config.waveConfig.service.IWaveConfigDetailService;
+import org.springframework.stereotype.Service;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @Description: 波次配置详情
+ * @Author:      jeecg-boot
+ * @Date:        2023-12-07
+ * @Version:     V1.0
+ */
+@Service
+public class WaveConfigDetailServiceImpl extends ServiceImpl<WaveConfigDetailMapper, WaveConfigDetail> implements IWaveConfigDetailService {
+
+    @Autowired
+    private WaveConfigDetailMapper waveConfigDetailMapper;
+
+    @Override
+    public List<WaveConfigDetail> selectByMainId(String mainId) {
+        return waveConfigDetailMapper.selectByMainId(mainId);
+    }
+}
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/impl/WaveConfigServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/impl/WaveConfigServiceImpl.java
new file mode 100644
index 0000000..e2af313
--- /dev/null
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/waveConfig/service/impl/WaveConfigServiceImpl.java
@@ -0,0 +1,47 @@
+package org.jeecg.modules.wms.config.waveConfig.service.impl;
+
+import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfig;
+import org.jeecg.modules.wms.config.waveConfig.entity.WaveConfigDetail;
+import org.jeecg.modules.wms.config.waveConfig.mapper.WaveConfigDetailMapper;
+import org.jeecg.modules.wms.config.waveConfig.mapper.WaveConfigMapper;
+import org.jeecg.modules.wms.config.waveConfig.service.IWaveConfigService;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Collection;
+
+/**
+ * @Description: 波次配置
+ * @Author:      jeecg-boot
+ * @Date:        2023-12-07
+ * @Version:     V1.0
+ */
+@Service
+public class WaveConfigServiceImpl extends ServiceImpl<WaveConfigMapper, WaveConfig> implements IWaveConfigService {
+
+    @Autowired
+    private WaveConfigMapper waveConfigMapper;
+
+    @Autowired
+    private WaveConfigDetailMapper waveConfigDetailMapper;
+
+    @Override
+    @Transactional
+    public void delMain(String id) {
+        waveConfigDetailMapper.deleteByMainId(id);
+        waveConfigMapper.deleteById(id);
+    }
+
+    @Override
+    @Transactional
+    public void delBatchMain(Collection<? extends Serializable> idList) {
+        for (Serializable id : idList) {
+            waveConfigDetailMapper.deleteByMainId(id.toString());
+            waveConfigMapper.deleteById(id);
+        }
+    }
+
+}
--
libgit2 0.22.2