From 504b712bc9dac49aad4276df285968a47fdd3962 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 12 七月 2024 10:15:37 +0800
Subject: [PATCH] #

---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/ViewLocDetl.java                   |  311 ++++++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java             |   20 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MatFieldServiceImpl.java     |    9 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocDetlFieldMapper.java            |   19 
 zy-asrs-wms/src/main/resources/mapper/asrs/LocDetlMapper.xml                             |   14 
 zy-asrs-wms/src/main/java/locDetlField.sql                                               |    9 
 zy-asrs-admin/src/views/asrs/locDetlField/index.vue                                      |   32 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MatFieldController.java        |   13 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/LocDetlController.java         |   50 +
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/config/MybatisPlusConfig.java           |   10 
 zy-asrs-admin/src/views/asrs/manLocDetl/index.vue                                        |   84 +
 zy-asrs-admin/src/views/loc/locDetl/edit.vue                                             |  244 +----
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MatFieldService.java              |    2 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocDetlFieldService.java          |   16 
 zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml                         |   23 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LocDetlField.java                  |  234 ++++++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocDetlService.java               |   13 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LocDetl.java                       |   73 +
 zy-asrs-wms/src/main/resources/mapper/asrs/LocDetlFieldMapper.xml                        |   24 
 /dev/null                                                                                |  127 ---
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/FieldParam.java              |   12 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/MatFieldMapper.java                |   26 
 zy-asrs-admin/src/views/asrs/manLocDetl/edit.vue                                         |  321 ++++++++
 zy-asrs-admin/src/views/loc/locDetl/index.vue                                            |  217 +++--
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/LocDetlFieldController.java    |  103 ++
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocDetlMapper.java                 |    4 
 zy-asrs-admin/src/views/asrs/locDetlField/edit.vue                                       |   40 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlFieldServiceImpl.java |   26 
 zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java      |   63 +
 29 files changed, 1,673 insertions(+), 466 deletions(-)

diff --git a/zy-asrs-admin/src/views/asrs/matFieldValue/edit.vue b/zy-asrs-admin/src/views/asrs/locDetlField/edit.vue
similarity index 83%
rename from zy-asrs-admin/src/views/asrs/matFieldValue/edit.vue
rename to zy-asrs-admin/src/views/asrs/locDetlField/edit.vue
index ad0d115..9ebaa0f 100644
--- a/zy-asrs-admin/src/views/asrs/matFieldValue/edit.vue
+++ b/zy-asrs-admin/src/views/asrs/locDetlField/edit.vue
@@ -24,7 +24,7 @@
 const onFinish = values => {
     // console.log('Success:', values);
     open.value = false;
-    post(isSave.value ? '/api/matFieldValue/save' : '/api/matFieldValue/update', formData.value).then((resp) => {
+    post(isSave.value ? '/api/locDetlField/save' : '/api/locDetlField/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', '鏇存柊鎴愬姛'));
@@ -49,12 +49,12 @@
         matFieldQueryList.value = result.data;
     })
 }
-const matQueryList = ref(null); 
-matQuery();
-function matQuery() { 
-    postForm('/api/mat/query', {}).then(resp => { 
+const locDetlQueryList = ref(null); 
+locDetlQuery();
+function locDetlQuery() { 
+    postForm('/api/locDetl/query', {}).then(resp => { 
         let result = resp.data;
-        matQueryList.value = result.data;
+        locDetlQueryList.value = result.data;
     })
 }
 const userQueryList = ref(null); 
@@ -78,7 +78,7 @@
 
 <script>
 export default {
-    name: '鍟嗗搧灞炴�ф墿灞曞��-edit'
+    name: '搴撳瓨鏄庣粏鎵╁睍-edit'
 }
 </script>
 
@@ -91,7 +91,7 @@
                 style="display: flex;justify-content: space-between;flex-wrap: wrap;" autocomplete="off"
                 @finish="onFinish" @finishFailed="onFinishFailed">
                     <a-form-item 
-                      :label="formatMessage('db.man_mat_field_value.name', '瀛楁鍚�') " 
+                      :label="formatMessage('db.man_loc_detl_field.name', '瀛楁鍚�') " 
                       name="name" 
                       style="width: 250px;" 
                             >
@@ -100,7 +100,7 @@
                      /> 
                         </a-form-item>
                     <a-form-item 
-                      :label="formatMessage('db.man_mat_field_value.field_id', '瀛楁') " 
+                      :label="formatMessage('db.man_loc_detl_field.field_id', '瀛楁') " 
                       name="fieldId" 
                       style="width: 250px;" 
                             >
@@ -116,23 +116,23 @@
                     </a-select>
                         </a-form-item>
                     <a-form-item 
-                      :label="formatMessage('db.man_mat_field_value.mat_id', '鐗╂枡') " 
-                      name="matId" 
+                      :label="formatMessage('db.man_loc_detl_field.detl_id', '搴撳瓨鏄庣粏') " 
+                      name="detlId" 
                       style="width: 250px;" 
                             >
                     <a-select 
-                        v-model:value="formData.matId" 
+                        v-model:value="formData.detlId" 
                         :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
                         style="width: 100%" 
                         show-search 
-                        :options="matQueryList" 
+                        :options="locDetlQueryList" 
                         optionFilterProp="label" 
                         optionLabelProp="label" 
                      > 
                     </a-select>
                         </a-form-item>
                     <a-form-item 
-                      :label="formatMessage('db.man_mat_field_value.value', '鍙傛暟鍊�') " 
+                      :label="formatMessage('db.man_loc_detl_field.value', '鍙傛暟鍊�') " 
                       name="value" 
                       style="width: 250px;" 
                             >
@@ -141,7 +141,7 @@
                      /> 
                         </a-form-item>
                     <a-form-item 
-                      :label="formatMessage('db.man_mat_field_value.status', '鐘舵��') " 
+                      :label="formatMessage('db.man_loc_detl_field.status', '鐘舵��') " 
                       name="status" 
                       style="width: 250px;" 
                             >
@@ -155,7 +155,7 @@
                     </a-select>
                         </a-form-item>
                     <a-form-item 
-                      :label="formatMessage('db.man_mat_field_value.create_time', '娣诲姞鏃堕棿') " 
+                      :label="formatMessage('db.man_loc_detl_field.create_time', '娣诲姞鏃堕棿') " 
                       name="createTime" 
                       style="width: 250px;" 
                             >
@@ -167,7 +167,7 @@
                      /> 
                         </a-form-item>
                     <a-form-item 
-                      :label="formatMessage('db.man_mat_field_value.create_by', '娣诲姞浜哄憳') " 
+                      :label="formatMessage('db.man_loc_detl_field.create_by', '娣诲姞浜哄憳') " 
                       name="createBy" 
                       style="width: 250px;" 
                             >
@@ -183,7 +183,7 @@
                     </a-select>
                         </a-form-item>
                     <a-form-item 
-                      :label="formatMessage('db.man_mat_field_value.update_time', '淇敼鏃堕棿') " 
+                      :label="formatMessage('db.man_loc_detl_field.update_time', '淇敼鏃堕棿') " 
                       name="updateTime" 
                       style="width: 250px;" 
                             >
@@ -195,7 +195,7 @@
                      /> 
                         </a-form-item>
                     <a-form-item 
-                      :label="formatMessage('db.man_mat_field_value.update_by', '淇敼浜哄憳') " 
+                      :label="formatMessage('db.man_loc_detl_field.update_by', '淇敼浜哄憳') " 
                       name="updateBy" 
                       style="width: 250px;" 
                             >
@@ -211,7 +211,7 @@
                     </a-select>
                         </a-form-item>
                     <a-form-item 
-                      :label="formatMessage('db.man_mat_field_value.memo', '澶囨敞') " 
+                      :label="formatMessage('db.man_loc_detl_field.memo', '澶囨敞') " 
                       name="memo" 
                       style="width: 250px;" 
                             >
diff --git a/zy-asrs-admin/src/views/asrs/matFieldValue/index.vue b/zy-asrs-admin/src/views/asrs/locDetlField/index.vue
similarity index 82%
rename from zy-asrs-admin/src/views/asrs/matFieldValue/index.vue
rename to zy-asrs-admin/src/views/asrs/locDetlField/index.vue
index 62476e8..994fecc 100644
--- a/zy-asrs-admin/src/views/asrs/matFieldValue/index.vue
+++ b/zy-asrs-admin/src/views/asrs/locDetlField/index.vue
@@ -10,7 +10,7 @@
 
 const router = useRouter();
 
-const TABLE_KEY = 'table-matFieldValue';
+const TABLE_KEY = 'table-locDetlField';
 let currentPage = 1;
 let pageSize = 10;
 const searchInput = ref("")
@@ -21,61 +21,61 @@
 
 const columns = [
         {
-            title: formatMessage('db.man_mat_field_value.name', '瀛楁鍚�'),
+            title: formatMessage('db.man_loc_detl_field.name', '瀛楁鍚�'),
             dataIndex: 'name',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.field_id', '瀛楁'),
+            title: formatMessage('db.man_loc_detl_field.field_id', '瀛楁'),
             dataIndex: 'fieldId$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.mat_id', '鐗╂枡'),
-            dataIndex: 'matId$',
+            title: formatMessage('db.man_loc_detl_field.detl_id', '搴撳瓨鏄庣粏'),
+            dataIndex: 'detlId$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.value', '鍙傛暟鍊�'),
+            title: formatMessage('db.man_loc_detl_field.value', '鍙傛暟鍊�'),
             dataIndex: 'value',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.status', '鐘舵��'),
+            title: formatMessage('db.man_loc_detl_field.status', '鐘舵��'),
             dataIndex: 'status$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.create_time', '娣诲姞鏃堕棿'),
+            title: formatMessage('db.man_loc_detl_field.create_time', '娣诲姞鏃堕棿'),
             dataIndex: 'createTime$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.create_by', '娣诲姞浜哄憳'),
+            title: formatMessage('db.man_loc_detl_field.create_by', '娣诲姞浜哄憳'),
             dataIndex: 'createBy$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.update_time', '淇敼鏃堕棿'),
+            title: formatMessage('db.man_loc_detl_field.update_time', '淇敼鏃堕棿'),
             dataIndex: 'updateTime$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.update_by', '淇敼浜哄憳'),
+            title: formatMessage('db.man_loc_detl_field.update_by', '淇敼浜哄憳'),
             dataIndex: 'updateBy$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.memo', '澶囨敞'),
+            title: formatMessage('db.man_loc_detl_field.memo', '澶囨敞'),
             dataIndex: 'memo',
             width: 140,
             ellipsis: true,
@@ -109,7 +109,7 @@
 };
 
 function getPage() {
-  post('/api/matFieldValue/page', {
+  post('/api/locDetlField/page', {
     current: currentPage,
     pageSize: pageSize,
     condition: searchInput.value
@@ -141,7 +141,7 @@
     onOk: async () => {
       const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
       try {
-        post('/api/matFieldValue/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+        post('/api/locDetlField/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
           let result = resp.data;
           if (result.code === 200) {
             message.success(result.msg);
@@ -159,7 +159,7 @@
 }
 
 const handleExport = async (intl) => {
-  postBlob('/api/matFieldValue/export', {}).then(result => {
+  postBlob('/api/locDetlField/export', {}).then(result => {
     const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
     window.location.href = window.URL.createObjectURL(blob);
     return true;
@@ -185,7 +185,7 @@
 
 <script>
 export default {
-  name: '鍟嗗搧灞炴�ф墿灞曞��'
+  name: '搴撳瓨鏄庣粏鎵╁睍'
 }
 </script>
 
diff --git a/zy-asrs-admin/src/views/asrs/manLocDetl/edit.vue b/zy-asrs-admin/src/views/asrs/manLocDetl/edit.vue
new file mode 100644
index 0000000..08293fa
--- /dev/null
+++ b/zy-asrs-admin/src/views/asrs/manLocDetl/edit.vue
@@ -0,0 +1,321 @@
+<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/manLocDetl/save' : '/api/manLocDetl/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 locQueryList = ref(null); 
+locQuery();
+function locQuery() { 
+    postForm('/api/loc/query', {}).then(resp => { 
+        let result = resp.data;
+        locQueryList.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;
+    })
+}
+const locDetlQueryList = ref(null); 
+locDetlQuery();
+function locDetlQuery() { 
+    postForm('/api/locDetl/query', {}).then(resp => { 
+        let result = resp.data;
+        locDetlQueryList.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.view_man_loc_detl.id', 'ID') " 
+                      name="id" 
+                      style="width: 250px;" 
+                            :rules="[{ required: true }]"
+                            >
+                    <a-input 
+                        v-model:value="formData.id" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_detl.loc_id', '搴撲綅') " 
+                      name="locId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.locId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="locQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_detl.loc_no', '搴撲綅鍙�') " 
+                      name="locNo" 
+                      style="width: 250px;" 
+                            :rules="[{ required: true }]"
+                            >
+                    <a-input 
+                        v-model:value="formData.locNo" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_detl.mat_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.view_man_loc_detl.matnr', '鐗╂枡鍙�') " 
+                      name="matnr" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.matnr" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_detl.order_no', '璁㈠崟鍙�') " 
+                      name="orderNo" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.orderNo" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_detl.batch', '鎵瑰彿') " 
+                      name="batch" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.batch" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_detl.anfme', '鏁伴噺') " 
+                      name="anfme" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.anfme" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_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.view_man_loc_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.view_man_loc_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.view_man_loc_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.view_man_loc_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.view_man_loc_detl.memo', '澶囨敞') " 
+                      name="memo" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.memo" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_detl.detl_id', '搴撳瓨鏄庣粏') " 
+                      name="detlId" 
+                      style="width: 250px;" 
+                            >
+                    <a-select 
+                        v-model:value="formData.detlId" 
+                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
+                        style="width: 100%" 
+                        show-search 
+                        :options="locDetlQueryList" 
+                        optionFilterProp="label" 
+                        optionLabelProp="label" 
+                     > 
+                    </a-select>
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_detl.special', '') " 
+                      name="special" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.special" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_detl.special2', '') " 
+                      name="special2" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.special2" 
+                     /> 
+                        </a-form-item>
+                    <a-form-item 
+                      :label="formatMessage('db.view_man_loc_detl.tttt', '') " 
+                      name="tttt" 
+                      style="width: 250px;" 
+                            >
+                    <a-input 
+                        v-model:value="formData.tttt" 
+                     /> 
+                        </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/matFieldValue/index.vue b/zy-asrs-admin/src/views/asrs/manLocDetl/index.vue
similarity index 67%
copy from zy-asrs-admin/src/views/asrs/matFieldValue/index.vue
copy to zy-asrs-admin/src/views/asrs/manLocDetl/index.vue
index 62476e8..19f2fce 100644
--- a/zy-asrs-admin/src/views/asrs/matFieldValue/index.vue
+++ b/zy-asrs-admin/src/views/asrs/manLocDetl/index.vue
@@ -10,7 +10,7 @@
 
 const router = useRouter();
 
-const TABLE_KEY = 'table-matFieldValue';
+const TABLE_KEY = 'table-manLocDetl';
 let currentPage = 1;
 let pageSize = 10;
 const searchInput = ref("")
@@ -21,62 +21,110 @@
 
 const columns = [
         {
-            title: formatMessage('db.man_mat_field_value.name', '瀛楁鍚�'),
-            dataIndex: 'name',
+            title: formatMessage('db.view_man_loc_detl.id', 'ID'),
+            dataIndex: 'id',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.field_id', '瀛楁'),
-            dataIndex: 'fieldId$',
+            title: formatMessage('db.view_man_loc_detl.loc_id', '搴撲綅'),
+            dataIndex: 'locId$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.mat_id', '鐗╂枡'),
+            title: formatMessage('db.view_man_loc_detl.loc_no', '搴撲綅鍙�'),
+            dataIndex: 'locNo',
+            width: 140,
+            ellipsis: true,
+        },
+        {
+            title: formatMessage('db.view_man_loc_detl.mat_id', '鐗╂枡'),
             dataIndex: 'matId$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.value', '鍙傛暟鍊�'),
-            dataIndex: 'value',
+            title: formatMessage('db.view_man_loc_detl.matnr', '鐗╂枡鍙�'),
+            dataIndex: 'matnr',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.status', '鐘舵��'),
+            title: formatMessage('db.view_man_loc_detl.order_no', '璁㈠崟鍙�'),
+            dataIndex: 'orderNo',
+            width: 140,
+            ellipsis: true,
+        },
+        {
+            title: formatMessage('db.view_man_loc_detl.batch', '鎵瑰彿'),
+            dataIndex: 'batch',
+            width: 140,
+            ellipsis: true,
+        },
+        {
+            title: formatMessage('db.view_man_loc_detl.anfme', '鏁伴噺'),
+            dataIndex: 'anfme',
+            width: 140,
+            ellipsis: true,
+        },
+        {
+            title: formatMessage('db.view_man_loc_detl.status', '鐘舵��'),
             dataIndex: 'status$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.create_time', '娣诲姞鏃堕棿'),
+            title: formatMessage('db.view_man_loc_detl.create_time', '娣诲姞鏃堕棿'),
             dataIndex: 'createTime$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.create_by', '娣诲姞浜哄憳'),
+            title: formatMessage('db.view_man_loc_detl.create_by', '娣诲姞浜哄憳'),
             dataIndex: 'createBy$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.update_time', '淇敼鏃堕棿'),
+            title: formatMessage('db.view_man_loc_detl.update_time', '淇敼鏃堕棿'),
             dataIndex: 'updateTime$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.update_by', '淇敼浜哄憳'),
+            title: formatMessage('db.view_man_loc_detl.update_by', '淇敼浜哄憳'),
             dataIndex: 'updateBy$',
             width: 140,
             ellipsis: true,
         },
         {
-            title: formatMessage('db.man_mat_field_value.memo', '澶囨敞'),
+            title: formatMessage('db.view_man_loc_detl.memo', '澶囨敞'),
             dataIndex: 'memo',
+            width: 140,
+            ellipsis: true,
+        },
+        {
+            title: formatMessage('db.view_man_loc_detl.detl_id', '搴撳瓨鏄庣粏'),
+            dataIndex: 'detlId$',
+            width: 140,
+            ellipsis: true,
+        },
+        {
+            title: formatMessage('db.view_man_loc_detl.special', ''),
+            dataIndex: 'special',
+            width: 140,
+            ellipsis: true,
+        },
+        {
+            title: formatMessage('db.view_man_loc_detl.special2', ''),
+            dataIndex: 'special2',
+            width: 140,
+            ellipsis: true,
+        },
+        {
+            title: formatMessage('db.view_man_loc_detl.tttt', ''),
+            dataIndex: 'tttt',
             width: 140,
             ellipsis: true,
         },
@@ -109,7 +157,7 @@
 };
 
 function getPage() {
-  post('/api/matFieldValue/page', {
+  post('/api/manLocDetl/page', {
     current: currentPage,
     pageSize: pageSize,
     condition: searchInput.value
@@ -141,7 +189,7 @@
     onOk: async () => {
       const hide = message.loading(formatMessage('common.loading', '璇锋眰涓�'));
       try {
-        post('/api/matFieldValue/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
+        post('/api/manLocDetl/remove/' + rows.map((row) => row.id).join(','), {}).then(resp => {
           let result = resp.data;
           if (result.code === 200) {
             message.success(result.msg);
@@ -159,7 +207,7 @@
 }
 
 const handleExport = async (intl) => {
-  postBlob('/api/matFieldValue/export', {}).then(result => {
+  postBlob('/api/manLocDetl/export', {}).then(result => {
     const blob = new Blob([result.data], { type: 'application/vnd.ms-excel' });
     window.location.href = window.URL.createObjectURL(blob);
     return true;
@@ -185,7 +233,7 @@
 
 <script>
 export default {
-  name: '鍟嗗搧灞炴�ф墿灞曞��'
+  name: '搴撳瓨鏄庣粏瑙嗗浘'
 }
 </script>
 
diff --git a/zy-asrs-admin/src/views/config/matField/field.vue b/zy-asrs-admin/src/views/config/matField/field.vue
deleted file mode 100644
index c07cbbc..0000000
--- a/zy-asrs-admin/src/views/config/matField/field.vue
+++ /dev/null
@@ -1,127 +0,0 @@
-<script setup>
-import { ref, nextTick, reactive } from 'vue';
-import { get, post, postBlob, postForm } from '@/utils/request.js'
-import { formatMessage } from '@/utils/localeUtils.js';
-import { message } from 'ant-design-vue';
-import {
-    MinusCircleOutlined,
-} from "@ant-design/icons-vue";
-
-const formTable = ref(null);
-const submitButton = ref(null);
-const open = ref(false);
-const initFormData = {}
-let formData = ref([]);
-
-const dynamicField = reactive({
-    col: [],
-});
-
-const removeCol = item => {
-    const index = dynamicField.col.indexOf(item);
-    if (index !== -1) {
-        dynamicField.col.splice(index, 1);
-    }
-};
-const addCol = () => {
-    dynamicField.col.push({
-        name: '',
-        type: '',
-        require: false,
-        desc: '',
-        language: '',
-    });
-};
-
-const emit = defineEmits(['tableReload'])
-
-const handleOk = (e) => {
-    nextTick(() => {
-        setTimeout(() => {
-            submitButton.value.$el.click();
-        }, 100);
-    });
-};
-
-const onFinish = values => {
-    // console.log('Success:', values);
-    // console.log(dynamicField);
-    open.value = false;
-    // post('/api/mat/addField', dynamicField).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);
-};
-
-
-defineExpose({
-    open,
-})
-
-</script>
-
-<script>
-export default {
-    name: '鍟嗗搧妗f-field'
-}
-</script>
-
-<template>
-    <div>
-        <a-modal v-model:open="open"
-            :title="formatMessage('page.add.field', '娣诲姞瀛楁')" @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">
-                <div v-for="(item, index) in dynamicField.col" :key="item.id"
-                    style="display: flex;justify-content: space-between;flex-wrap: wrap;">
-                    <a-form-item :label="formatMessage('dynamicField.name', '瀛楁')" :name="['col-name', index,]"
-                        style="width: 250px;">
-                        <a-input v-model:value="item.name" />
-                    </a-form-item>
-                    <a-form-item :label="formatMessage('dynamicField.type', '绫诲瀷')" :name="['col-type', index]"
-                        style="width: 250px;">
-                        <a-input v-model:value="item.type"/>
-                    </a-form-item>
-                    <a-form-item :label="formatMessage('dynamicField.desc', '鎻忚堪')" :name="['col-desc', index]"
-                        style="width: 250px;">
-                        <a-input v-model:value="item.desc"/>
-                    </a-form-item>
-                    <a-form-item :label="formatMessage('dynamicField.language', '鍥介檯鍖�')"
-                        :name="['col-language', index]" style="width: 250px;">
-                        <a-input v-model:value="item.language"/>
-                    </a-form-item>
-                    <a-form-item :label="formatMessage('dynamicField.delete', '鍒犻櫎')"
-                        :name="['col-delete', index]" style="width: 250px;">
-                        <MinusCircleOutlined @click="removeCol(item)" />
-                    </a-form-item>
-                </div>
-
-                <a-form-item>
-                    <a-button type="primary" html-type="submit" ref="submitButton"
-                        style="visibility: hidden;">Submit</a-button>
-                </a-form-item>
-
-            </a-form>
-
-            <a-button type="dashed" style="width: 100%" @click="addCol">
-                <PlusOutlined />
-                {{ formatMessage('page.add.field', '娣诲姞瀛楁') }}
-            </a-button>
-        </a-modal>
-    </div>
-</template>
-
-<style></style>
diff --git a/zy-asrs-admin/src/views/loc/locDetl/edit.vue b/zy-asrs-admin/src/views/loc/locDetl/edit.vue
index 82638f3..7438f29 100644
--- a/zy-asrs-admin/src/views/loc/locDetl/edit.vue
+++ b/zy-asrs-admin/src/views/loc/locDetl/edit.vue
@@ -41,26 +41,26 @@
     console.log('Failed:', errorInfo);
 };
 
-const locQueryList = ref(null); 
+const locQueryList = ref(null);
 locQuery();
-function locQuery() { 
-    postForm('/api/loc/query', {}).then(resp => { 
+function locQuery() {
+    postForm('/api/loc/query', {}).then(resp => {
         let result = resp.data;
         locQueryList.value = result.data;
     })
 }
-const matQueryList = ref(null); 
+const matQueryList = ref(null);
 matQuery();
-function matQuery() { 
-    postForm('/api/mat/query', {}).then(resp => { 
+function matQuery() {
+    postForm('/api/mat/query', {}).then(resp => {
         let result = resp.data;
         matQueryList.value = result.data;
     })
 }
-const userQueryList = ref(null); 
+const userQueryList = ref(null);
 userQuery();
-function userQuery() { 
-    postForm('/api/user/query', {}).then(resp => { 
+function userQuery() {
+    postForm('/api/user/query', {}).then(resp => {
         let result = resp.data;
         userQueryList.value = result.data;
     })
@@ -87,175 +87,73 @@
         <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_loc_detl.loc_id', '搴撲綅') " 
-                      name="locId" 
-                      style="width: 250px;" 
-                            >
-                    <a-select 
-                        v-model:value="formData.locId" 
-                        :placeholder="formatMessage('common.select', '璇烽�夋嫨')" 
-                        style="width: 100%" 
-                        show-search 
-                        :options="locQueryList" 
-                        optionFilterProp="label" 
-                        optionLabelProp="label" 
-                     > 
+            <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_loc_detl.loc_id', '搴撲綅')" name="locId" style="width: 250px;">
+                    <a-select v-model:value="formData.locId" :placeholder="formatMessage('common.select', '璇烽�夋嫨')"
+                        style="width: 100%" show-search :options="locQueryList" optionFilterProp="label"
+                        optionLabelProp="label">
                     </a-select>
-                        </a-form-item>
-                    <a-form-item 
-                      :label="formatMessage('db.man_loc_detl.loc_no', '搴撲綅鍙�') " 
-                      name="locNo" 
-                      style="width: 250px;" 
-                            :rules="[{ required: true }]"
-                            >
-                    <a-input 
-                        v-model:value="formData.locNo" 
-                     /> 
-                        </a-form-item>
-                    <a-form-item 
-                      :label="formatMessage('db.man_loc_detl.mat_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-form-item>
+                <a-form-item :label="formatMessage('db.man_loc_detl.loc_no', '搴撲綅鍙�')" name="locNo" style="width: 250px;"
+                    :rules="[{ required: true }]">
+                    <a-input v-model:value="formData.locNo" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_loc_detl.mat_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_loc_detl.matnr', '鐗╂枡鍙�') " 
-                      name="matnr" 
-                      style="width: 250px;" 
-                            >
-                    <a-input 
-                        v-model:value="formData.matnr" 
-                     /> 
-                        </a-form-item>
-                    <a-form-item 
-                      :label="formatMessage('db.man_loc_detl.order_no', '璁㈠崟鍙�') " 
-                      name="orderNo" 
-                      style="width: 250px;" 
-                            >
-                    <a-input 
-                        v-model:value="formData.orderNo" 
-                     /> 
-                        </a-form-item>
-                    <a-form-item 
-                      :label="formatMessage('db.man_loc_detl.batch', '鎵瑰彿') " 
-                      name="batch" 
-                      style="width: 250px;" 
-                            >
-                    <a-input 
-                        v-model:value="formData.batch" 
-                     /> 
-                        </a-form-item>
-                    <a-form-item 
-                      :label="formatMessage('db.man_loc_detl.anfme', '鏁伴噺') " 
-                      name="anfme" 
-                      style="width: 250px;" 
-                            >
-                    <a-input 
-                        v-model:value="formData.anfme" 
-                     /> 
-                        </a-form-item>
-                    <a-form-item 
-                      :label="formatMessage('db.man_loc_detl.extend', '鎵╁睍') " 
-                      name="extend" 
-                      style="width: 250px;" 
-                            >
-                    <a-input 
-                        v-model:value="formData.extend" 
-                     /> 
-                        </a-form-item>
-                    <a-form-item 
-                      :label="formatMessage('db.man_loc_detl.status', '鐘舵��') " 
-                      name="status" 
-                      style="width: 250px;" 
-                            >
-                    <a-select 
-                        v-model:value="formData.status" 
-                        :options="[
-                                { label: '姝e父', value: 1 },
-                                { label: '绂佺敤', value: 0 },
-                            ]"
-                        >
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_loc_detl.matnr', '鐗╂枡鍙�')" name="matnr" style="width: 250px;">
+                    <a-input v-model:value="formData.matnr" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_loc_detl.order_no', '璁㈠崟鍙�')" name="orderNo"
+                    style="width: 250px;">
+                    <a-input v-model:value="formData.orderNo" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_loc_detl.batch', '鎵瑰彿')" name="batch" style="width: 250px;">
+                    <a-input v-model:value="formData.batch" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_loc_detl.anfme', '鏁伴噺')" name="anfme" style="width: 250px;">
+                    <a-input v-model:value="formData.anfme" />
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_loc_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_loc_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_loc_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-form-item>
+                <a-form-item :label="formatMessage('db.man_loc_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_loc_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_loc_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_loc_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-form-item>
+                <a-form-item :label="formatMessage('db.man_loc_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_loc_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_loc_detl.memo', '澶囨敞') " 
-                      name="memo" 
-                      style="width: 250px;" 
-                            >
-                    <a-input 
-                        v-model:value="formData.memo" 
-                     /> 
-                        </a-form-item>
+                </a-form-item>
+                <a-form-item :label="formatMessage('db.man_loc_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"
diff --git a/zy-asrs-admin/src/views/loc/locDetl/index.vue b/zy-asrs-admin/src/views/loc/locDetl/index.vue
index 642d0d9..42d8260 100644
--- a/zy-asrs-admin/src/views/loc/locDetl/index.vue
+++ b/zy-asrs-admin/src/views/loc/locDetl/index.vue
@@ -17,106 +17,13 @@
 const editChild = ref(null)
 
 let tableData = ref([]);
+getColumns();
 getPage();
-
-const columns = [
-        {
-            title: formatMessage('db.man_loc_detl.loc_id', '搴撲綅'),
-            dataIndex: 'locId$',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.loc_no', '搴撲綅鍙�'),
-            dataIndex: 'locNo',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.mat_id', '鐗╂枡'),
-            dataIndex: 'matId$',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.matnr', '鐗╂枡鍙�'),
-            dataIndex: 'matnr',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.order_no', '璁㈠崟鍙�'),
-            dataIndex: 'orderNo',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.batch', '鎵瑰彿'),
-            dataIndex: 'batch',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.anfme', '鏁伴噺'),
-            dataIndex: 'anfme',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.extend', '鎵╁睍'),
-            dataIndex: 'extend',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.status', '鐘舵��'),
-            dataIndex: 'status$',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.create_time', '娣诲姞鏃堕棿'),
-            dataIndex: 'createTime$',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.create_by', '娣诲姞浜哄憳'),
-            dataIndex: 'createBy$',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.update_time', '淇敼鏃堕棿'),
-            dataIndex: 'updateTime$',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.update_by', '淇敼浜哄憳'),
-            dataIndex: 'updateBy$',
-            width: 140,
-            ellipsis: true,
-        },
-        {
-            title: formatMessage('db.man_loc_detl.memo', '澶囨敞'),
-            dataIndex: 'memo',
-            width: 140,
-            ellipsis: true,
-        },
-
-  {
-    title: formatMessage('common.operation', '鎿嶄綔'),
-    name: 'oper',
-    dataIndex: 'oper',
-    key: 'oper',
-    width: 140,
-  },
-];
 
 const state = reactive({
   selectedRowKeys: [],
   loading: false,
+  columns: [],
 });
 const hasSelected = computed(() => state.selectedRowKeys.length > 0);
 const start = () => {
@@ -131,6 +38,124 @@
   // console.log('selectedRowKeys changed: ', selectedRowKeys);
   state.selectedRowKeys = selectedRowKeys;
 };
+
+state.columns = [
+  {
+    title: formatMessage('db.man_loc_detl.loc_id', '搴撲綅'),
+    dataIndex: 'locId$',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.loc_no', '搴撲綅鍙�'),
+    dataIndex: 'locNo',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.mat_id', '鐗╂枡'),
+    dataIndex: 'matId$',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.matnr', '鐗╂枡鍙�'),
+    dataIndex: 'matnr',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.order_no', '璁㈠崟鍙�'),
+    dataIndex: 'orderNo',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.batch', '鎵瑰彿'),
+    dataIndex: 'batch',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.anfme', '鏁伴噺'),
+    dataIndex: 'anfme',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.status', '鐘舵��'),
+    dataIndex: 'status$',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.create_time', '娣诲姞鏃堕棿'),
+    dataIndex: 'createTime$',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.create_by', '娣诲姞浜哄憳'),
+    dataIndex: 'createBy$',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.update_time', '淇敼鏃堕棿'),
+    dataIndex: 'updateTime$',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.update_by', '淇敼浜哄憳'),
+    dataIndex: 'updateBy$',
+    width: 140,
+    ellipsis: true,
+  },
+  {
+    title: formatMessage('db.man_loc_detl.memo', '澶囨敞'),
+    dataIndex: 'memo',
+    width: 140,
+    ellipsis: true,
+  },
+];
+
+//鍔犺浇鎵╁睍瀛楁
+async function getColumns() {
+  let fieldResp = await post('/api/matField/list', {
+    unique: 1
+  })
+  let fieldResult = fieldResp.data;
+  let tmp = state.columns;
+  if (fieldResult.code == 200) {
+    let data = fieldResult.data;
+
+    data.forEach((item) => {
+      tmp.push({
+        title: formatMessage(item.language, item.describe),
+        name: item.name,
+        dataIndex: item.name,
+        key: item.name,
+        width: 140,
+      })
+    })
+
+    tmp.push({
+      title: formatMessage('common.operation', '鎿嶄綔'),
+      name: 'oper',
+      dataIndex: 'oper',
+      key: 'oper',
+      width: 140,
+    })
+
+    state.columns = tmp;
+  } else if (result.code === 401) {
+    message.error(result.msg);
+    logout()
+  } else {
+    message.error(result.msg);
+  }
+}
 
 function getPage() {
   post('/api/locDetl/page', {
@@ -227,7 +252,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">
+      :scroll="{ y: 768, scrollToFirstRowOnChange: true }" :columns="state.columns">
       <template #bodyCell="{ column, text, record }">
         <template v-if="column.dataIndex === 'oper'">
           <div style="display: flex;justify-content: space-evenly;">
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/LocDetlController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/LocDetlController.java
index 696873e..26147cd 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/LocDetlController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/LocDetlController.java
@@ -1,14 +1,18 @@
 package com.zy.asrs.wms.asrs.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 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.*;
+import com.zy.asrs.wms.asrs.service.LocDetlFieldService;
+import com.zy.asrs.wms.asrs.service.MatFieldService;
 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.LocDetl;
 import com.zy.asrs.wms.asrs.service.LocDetlService;
 import com.zy.asrs.wms.system.controller.BaseController;
 import com.zy.asrs.wms.utils.ExcelUtil;
@@ -28,19 +32,38 @@
 
     @Autowired
     private LocDetlService locDetlService;
+    @Autowired
+    private MatFieldService matFieldService;
+    @Autowired
+    private LocDetlFieldService locDetlFieldService;
 
     @PreAuthorize("hasAuthority('asrs:locDetl:list')")
     @PostMapping("/locDetl/page")
     public R page(@RequestBody Map<String, Object> map) {
+//        BaseParam baseParam = buildParam(map, BaseParam.class);
+//        PageParam<LocDetl, BaseParam> pageParam = new PageParam<>(baseParam, LocDetl.class);
+//
+//        PageParam<LocDetl, BaseParam> page = locDetlService.page(pageParam, pageParam.buildWrapper(true));
+//        JSONObject data = JSON.parseObject(JSON.toJSONString(page));
+//
+//        List<LocDetl> records = page.getRecords();
+//        data.put("records", records);
+//        for (LocDetl locDetl : records) {
+//            List<LocDetlField> list = locDetlFieldService.list(new LambdaQueryWrapper<LocDetlField>().eq(LocDetlField::getDetlId, locDetl.getId()));
+//            locDetl.syncField(list);
+//        }
+
         BaseParam baseParam = buildParam(map, BaseParam.class);
-        PageParam<LocDetl, BaseParam> pageParam = new PageParam<>(baseParam, LocDetl.class);
-        return R.ok().add(locDetlService.page(pageParam, pageParam.buildWrapper(true)));
+        PageParam<ViewLocDetl, BaseParam> pageParam = new PageParam<>(baseParam, ViewLocDetl.class);
+        PageParam<ViewLocDetl, BaseParam> data = locDetlService.getPage(pageParam, pageParam.buildWrapper(true));
+        return R.ok().add(data);
     }
 
     @PreAuthorize("hasAuthority('asrs:locDetl:list')")
     @PostMapping("/locDetl/list")
     public R list(@RequestBody Map<String, Object> map) {
-        return R.ok().add(locDetlService.list());
+        List<LocDetl> list = locDetlService.getLocDetlList(map);
+        return R.ok().add(list);
     }
 
     @PreAuthorize("hasAuthority('asrs:locDetl:list')")
@@ -50,12 +73,31 @@
     }
 
     @PreAuthorize("hasAuthority('asrs:locDetl:save')")
+    @OperationLog("鎵归噺鎻掑叆搴撳瓨鏄庣粏")
+    @PostMapping("/locDetl/batchAdd")
+    public R save(@RequestBody List<LocDetl> locDetls) {
+
+        return R.ok().add(locDetls);
+    }
+
+    @PreAuthorize("hasAuthority('asrs:locDetl:save')")
     @OperationLog("娣诲姞搴撳瓨鏄庣粏")
     @PostMapping("/locDetl/save")
     public R save(@RequestBody LocDetl locDetl) {
         if (!locDetlService.save(locDetl)) {
             return R.error("娣诲姞澶辫触");
         }
+
+        //鎻掑叆搴撳瓨鏄庣粏瀛楁
+        List<MatField> matFields = matFieldService.list(new LambdaQueryWrapper<MatField>().eq(MatField::getUnique, 1));
+        for (MatField matField : matFields) {
+            LocDetlField locDetlField = new LocDetlField();
+            locDetlField.setDetlId(locDetl.getId());
+            locDetlField.setFieldId(matField.getId());
+            locDetlField.setName(matField.getName());
+            locDetlFieldService.save(locDetlField);
+        }
+
         return R.ok("娣诲姞鎴愬姛");
     }
 
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/LocDetlFieldController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/LocDetlFieldController.java
new file mode 100644
index 0000000..188d626
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/LocDetlFieldController.java
@@ -0,0 +1,103 @@
+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.mapper.LocDetlFieldMapper;
+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.LocDetlField;
+import com.zy.asrs.wms.asrs.service.LocDetlFieldService;
+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 LocDetlFieldController extends BaseController {
+
+    @Autowired
+    private LocDetlFieldService locDetlFieldService;
+
+    @PreAuthorize("hasAuthority('asrs:locDetlField:list')")
+    @PostMapping("/locDetlField/page")
+    public R page(@RequestBody Map<String, Object> map) {
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<LocDetlField, BaseParam> pageParam = new PageParam<>(baseParam, LocDetlField.class);
+        return R.ok().add(locDetlFieldService.page(pageParam, pageParam.buildWrapper(true)));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:locDetlField:list')")
+    @PostMapping("/locDetlField/list")
+    public R list(@RequestBody Map<String, Object> map) {
+        return R.ok().add(locDetlFieldService.list());
+    }
+
+    @PreAuthorize("hasAuthority('asrs:locDetlField:list')")
+    @GetMapping("/locDetlField/{id}")
+    public R get(@PathVariable("id") Long id) {
+        return R.ok().add(locDetlFieldService.getById(id));
+    }
+
+    @PreAuthorize("hasAuthority('asrs:locDetlField:save')")
+    @OperationLog("娣诲姞搴撳瓨鏄庣粏鎵╁睍")
+    @PostMapping("/locDetlField/save")
+    public R save(@RequestBody LocDetlField locDetlField) {
+        if (!locDetlFieldService.save(locDetlField)) {
+            return R.error("娣诲姞澶辫触");
+        }
+        return R.ok("娣诲姞鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:locDetlField:update')")
+    @OperationLog("淇敼搴撳瓨鏄庣粏鎵╁睍")
+    @PostMapping("/locDetlField/update")
+    public R update(@RequestBody LocDetlField locDetlField) {
+        if (!locDetlFieldService.updateById(locDetlField)) {
+            return R.error("淇敼澶辫触");
+        }
+        return R.ok("淇敼鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:locDetlField:remove')")
+    @OperationLog("鍒犻櫎搴撳瓨鏄庣粏鎵╁睍")
+    @PostMapping("/locDetlField/remove/{ids}")
+    public R remove(@PathVariable Long[] ids) {
+        if (!locDetlFieldService.removeByIds(Arrays.asList(ids))) {
+            return R.error("鍒犻櫎澶辫触");
+        }
+        return R.ok("鍒犻櫎鎴愬姛");
+    }
+
+    @PreAuthorize("hasAuthority('asrs:locDetlField:list')")
+    @PostMapping("/locDetlField/query")
+    public R query(@RequestParam(required = false) String condition) {
+        List<KeyValVo> vos = new ArrayList<>();
+        LambdaQueryWrapper<LocDetlField> wrapper = new LambdaQueryWrapper<>();
+        if (!Cools.isEmpty(condition)) {
+            wrapper.like(LocDetlField::getId, condition);
+        }
+        locDetlFieldService.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:locDetlField:list')")
+    @PostMapping("/locDetlField/export")
+    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+        ExcelUtil.build(ExcelUtil.create(locDetlFieldService.list(), LocDetlField.class), response);
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MatFieldController.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MatFieldController.java
index cb680b4..a8f8ba1 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MatFieldController.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MatFieldController.java
@@ -4,6 +4,7 @@
 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.service.LocDetlFieldService;
 import com.zy.asrs.wms.common.annotation.OperationLog;
 import com.zy.asrs.wms.common.domain.BaseParam;
 import com.zy.asrs.wms.common.domain.KeyValVo;
@@ -40,7 +41,11 @@
     @PreAuthorize("hasAuthority('asrs:matField:list')")
     @PostMapping("/matField/list")
     public R list(@RequestBody Map<String, Object> map) {
-        return R.ok().add(matFieldService.list());
+        List<MatField> list = matFieldService.list();
+        if (map.containsKey("unique")) {
+            list = matFieldService.list(new LambdaQueryWrapper<MatField>().eq(MatField::getUnique, map.get("unique")));
+        }
+        return R.ok().add(list);
     }
 
     @PreAuthorize("hasAuthority('asrs:matField:list')")
@@ -56,6 +61,8 @@
         if (!matFieldService.save(matField)) {
             return R.error("娣诲姞澶辫触");
         }
+
+        matFieldService.createView();//鏇存柊瑙嗗浘
         return R.ok("娣诲姞鎴愬姛");
     }
 
@@ -66,6 +73,8 @@
         if (!matFieldService.updateById(matField)) {
             return R.error("淇敼澶辫触");
         }
+
+        matFieldService.createView();//鏇存柊瑙嗗浘
         return R.ok("淇敼鎴愬姛");
     }
 
@@ -76,6 +85,8 @@
         if (!matFieldService.removeByIds(Arrays.asList(ids))) {
             return R.error("鍒犻櫎澶辫触");
         }
+
+        matFieldService.createView();//鏇存柊瑙嗗浘
         return R.ok("鍒犻櫎鎴愬姛");
     }
 
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LocDetl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LocDetl.java
index cef2f5a..76ca46e 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LocDetl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LocDetl.java
@@ -1,9 +1,13 @@
 package com.zy.asrs.wms.asrs.entity;
 
 import com.baomidou.mybatisplus.annotation.TableLogic;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 
+import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.zy.asrs.common.utils.Synchro;
 import com.zy.asrs.wms.asrs.service.LocService;
 import com.zy.asrs.wms.asrs.service.MatService;
 import com.zy.asrs.wms.system.entity.Host;
@@ -83,12 +87,6 @@
     private Double anfme;
 
     /**
-     * 鎵╁睍
-     */
-    @ApiModelProperty(value= "鎵╁睍")
-    private String extend;
-
-    /**
      * 鎵�灞炴満鏋�
      */
     @ApiModelProperty(value= "鎵�灞炴満鏋�")
@@ -141,7 +139,7 @@
 
     public LocDetl() {}
 
-    public LocDetl(Long locId,String locNo,Long matId,String matnr,String orderNo,String batch,Double anfme,String extend,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
+    public LocDetl(Long locId,String locNo,Long matId,String matnr,String orderNo,String batch,Double anfme,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
         this.locId = locId;
         this.locNo = locNo;
         this.matId = matId;
@@ -149,7 +147,6 @@
         this.orderNo = orderNo;
         this.batch = batch;
         this.anfme = anfme;
-        this.extend = extend;
         this.hostId = hostId;
         this.status = status;
         this.deleted = deleted;
@@ -262,5 +259,61 @@
         return null;
     }
 
+    public void sync(Object source) {
+        Synchro.Copy(source, this);
+    }
+
+    //鍔ㄦ�佹墿灞曞瓧娈�
+    public transient Map<String, Object> dynamicFields = new HashMap<>();
+
+    @JsonAnyGetter
+    public Map<String,Object> getDynamicFields() {
+        return dynamicFields;
+    }
+
+    public void syncField(List<LocDetlField> list) {
+        ArrayList<String> keys = new ArrayList<>();
+        Field[] fields = this.getClass().getFields();
+        for (Field field : fields) {
+            keys.add(field.getName());
+        }
+
+        Map<String, Object> dynamicFields = new HashMap<>();
+        for (LocDetlField locDetlField : list) {
+            if (keys.contains(locDetlField.getName())) {
+                continue;
+            }
+            dynamicFields.put(locDetlField.getName(), locDetlField.getValue());
+        }
+
+        this.dynamicFields = dynamicFields;
+    }
+
+    public void syncFieldMap(Map<String, Object> map) {
+        ArrayList<String> keys = new ArrayList<>();
+        Field[] fields = this.getClass().getDeclaredFields();
+        for (Field field : fields) {
+            keys.add(field.getName());
+        }
+        keys.add("detlId");
+
+        Map<String, Object> dynamicFields = new HashMap<>();
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
+            if (keys.contains(entry.getKey())) {
+                continue;
+            }
+            dynamicFields.put(entry.getKey(), entry.getValue());
+        }
+
+        this.dynamicFields = dynamicFields;
+    }
+
+    public String getFieldString(String key) {
+        return dynamicFields.get(key).toString();
+    }
+
+    public void setField(String key, Object value) {
+        dynamicFields.put(key, value);
+    }
 
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LocDetlField.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LocDetlField.java
new file mode 100644
index 0000000..8de20b0
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/LocDetlField.java
@@ -0,0 +1,234 @@
+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.LocDetlService;
+import com.zy.asrs.wms.asrs.service.MatFieldService;
+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 java.io.Serializable;
+import java.util.Date;
+
+@Data
+@TableName("man_loc_detl_field")
+public class LocDetlField 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 name;
+
+    /**
+     * 瀛楁
+     */
+    @ApiModelProperty(value= "瀛楁")
+    private Long fieldId;
+
+    /**
+     * 搴撳瓨鏄庣粏
+     */
+    @ApiModelProperty(value= "搴撳瓨鏄庣粏")
+    private Long detlId;
+
+    /**
+     * 鍙傛暟鍊�
+     */
+    @ApiModelProperty(value= "鍙傛暟鍊�")
+    private String value;
+
+    /**
+     * 鎵�灞炴満鏋�
+     */
+    @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 LocDetlField() {}
+
+    public LocDetlField(String name,Long fieldId,Long detlId,String value,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
+        this.name = name;
+        this.fieldId = fieldId;
+        this.detlId = detlId;
+        this.value = value;
+        this.hostId = hostId;
+        this.status = status;
+        this.deleted = deleted;
+        this.createTime = createTime;
+        this.createBy = createBy;
+        this.updateTime = updateTime;
+        this.updateBy = updateBy;
+        this.memo = memo;
+    }
+
+//    LocDetlField locDetlField = new LocDetlField(
+//            null,    // 瀛楁鍚�
+//            null,    // 瀛楁
+//            null,    // 搴撳瓨鏄庣粏
+//            null,    // 鍙傛暟鍊�
+//            null,    // 鎵�灞炴満鏋�
+//            null,    // 鐘舵��
+//            null,    // 鏄惁鍒犻櫎
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null    // 澶囨敞
+//    );
+
+    public String getFieldId$(){
+        MatFieldService service = SpringUtils.getBean(MatFieldService.class);
+        MatField matField = service.getById(this.fieldId);
+        if (!Cools.isEmpty(matField)){
+            return String.valueOf(matField.getId());
+        }
+        return null;
+    }
+
+    public String getDetlId$(){
+        LocDetlService service = SpringUtils.getBean(LocDetlService.class);
+        LocDetl locDetl = service.getById(this.detlId);
+        if (!Cools.isEmpty(locDetl)){
+            return String.valueOf(locDetl.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;
+    }
+
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/ViewLocDetl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/ViewLocDetl.java
new file mode 100644
index 0000000..f426325
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/ViewLocDetl.java
@@ -0,0 +1,311 @@
+package com.zy.asrs.wms.asrs.entity;
+
+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 com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.zy.asrs.common.utils.Synchro;
+import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.wms.asrs.service.LocService;
+import com.zy.asrs.wms.asrs.service.MatService;
+import com.zy.asrs.wms.system.entity.Host;
+import com.zy.asrs.wms.system.entity.User;
+import com.zy.asrs.wms.system.service.HostService;
+import com.zy.asrs.wms.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Data
+@TableName("view_man_loc_detl")
+public class ViewLocDetl implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 搴撲綅
+     */
+    @ApiModelProperty(value= "搴撲綅")
+    private Long locId;
+
+    /**
+     * 搴撲綅鍙�
+     */
+    @ApiModelProperty(value= "搴撲綅鍙�")
+    private String locNo;
+
+    /**
+     * 鐗╂枡
+     */
+    @ApiModelProperty(value= "鐗╂枡")
+    private Long matId;
+
+    /**
+     * 鐗╂枡鍙�
+     */
+    @ApiModelProperty(value= "鐗╂枡鍙�")
+    private String matnr;
+
+    /**
+     * 璁㈠崟鍙�
+     */
+    @ApiModelProperty(value= "璁㈠崟鍙�")
+    private String orderNo;
+
+    /**
+     * 鎵瑰彿
+     */
+    @ApiModelProperty(value= "鎵瑰彿")
+    private String batch;
+
+    /**
+     * 鏁伴噺
+     */
+    @ApiModelProperty(value= "鏁伴噺")
+    private Double anfme;
+
+    /**
+     * 鎵�灞炴満鏋�
+     */
+    @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 ViewLocDetl() {}
+
+    public ViewLocDetl(Long locId, String locNo, Long matId, String matnr, String orderNo, String batch, Double anfme, Long hostId, Integer status, Integer deleted, Date createTime, Long createBy, Date updateTime, Long updateBy, String memo) {
+        this.locId = locId;
+        this.locNo = locNo;
+        this.matId = matId;
+        this.matnr = matnr;
+        this.orderNo = orderNo;
+        this.batch = batch;
+        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;
+    }
+
+//    LocDetl locDetl = new LocDetl(
+//            null,    // 搴撲綅
+//            null,    // 搴撲綅鍙穂闈炵┖]
+//            null,    // 鐗╂枡
+//            null,    // 鐗╂枡鍙�
+//            null,    // 璁㈠崟鍙�
+//            null,    // 鎵瑰彿
+//            null,    // 鏁伴噺
+//            null,    // 鎵╁睍
+//            null,    // 鎵�灞炴満鏋�
+//            null,    // 鐘舵��
+//            null,    // 鏄惁鍒犻櫎
+//            null,    // 娣诲姞鏃堕棿
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 淇敼鏃堕棿
+//            null,    // 淇敼浜哄憳
+//            null    // 澶囨敞
+//    );
+
+    public String getLocId$(){
+        LocService service = SpringUtils.getBean(LocService.class);
+        Loc loc = service.getById(this.locId);
+        if (!Cools.isEmpty(loc)){
+            return String.valueOf(loc.getLocNo());
+        }
+        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);
+    }
+
+    //鍔ㄦ�佹墿灞曞瓧娈�
+    public transient Map<String, Object> dynamicFields = new HashMap<>();
+
+    @JsonAnyGetter
+    public Map<String,Object> getDynamicFields() {
+        return dynamicFields;
+    }
+
+    public void syncField(List<LocDetlField> list) {
+        ArrayList<String> keys = new ArrayList<>();
+        Field[] fields = this.getClass().getFields();
+        for (Field field : fields) {
+            keys.add(field.getName());
+        }
+
+        Map<String, Object> dynamicFields = new HashMap<>();
+        for (LocDetlField locDetlField : list) {
+            if (keys.contains(locDetlField.getName())) {
+                continue;
+            }
+            dynamicFields.put(locDetlField.getName(), locDetlField.getValue());
+        }
+
+        this.dynamicFields = dynamicFields;
+    }
+
+    public void syncFieldMap(Map<String, Object> map) {
+        ArrayList<String> keys = new ArrayList<>();
+        Field[] fields = this.getClass().getDeclaredFields();
+        for (Field field : fields) {
+            keys.add(field.getName());
+        }
+        keys.add("detlId");
+
+        Map<String, Object> dynamicFields = new HashMap<>();
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
+            if (keys.contains(entry.getKey())) {
+                continue;
+            }
+            dynamicFields.put(entry.getKey(), entry.getValue());
+        }
+
+        this.dynamicFields = dynamicFields;
+    }
+
+    public String getFieldString(String key) {
+        return dynamicFields.get(key).toString();
+    }
+
+    public void setField(String key, Object value) {
+        dynamicFields.put(key, value);
+    }
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/FieldParam.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/FieldParam.java
new file mode 100644
index 0000000..6c845e9
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/FieldParam.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.wms.asrs.entity.param;
+
+import lombok.Data;
+
+@Data
+public class FieldParam {
+
+    private String name;
+
+    private Object value;
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocDetlFieldMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocDetlFieldMapper.java
new file mode 100644
index 0000000..771d23f
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocDetlFieldMapper.java
@@ -0,0 +1,19 @@
+package com.zy.asrs.wms.asrs.mapper;
+
+import com.zy.asrs.wms.asrs.entity.LocDetlField;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zy.asrs.wms.asrs.entity.param.FieldParam;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface LocDetlFieldMapper extends BaseMapper<LocDetlField> {
+
+    LocDetlField getLocDetlField(FieldParam param);
+
+    List<LocDetlField> getList(List<FieldParam> list);
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocDetlMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocDetlMapper.java
index c5c4eeb..7dcada8 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocDetlMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/LocDetlMapper.java
@@ -5,8 +5,12 @@
 import org.apache.ibatis.annotations.Mapper;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Mapper
 @Repository
 public interface LocDetlMapper extends BaseMapper<LocDetl> {
 
+    List<LocDetl> getList(String matnr, String batch, List<Long> ids);
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/MatFieldMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/MatFieldMapper.java
index f4f76de..12e52e9 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/MatFieldMapper.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/MatFieldMapper.java
@@ -1,12 +1,38 @@
 package com.zy.asrs.wms.asrs.mapper;
 
+import com.zy.asrs.wms.asrs.entity.LocDetlField;
 import com.zy.asrs.wms.asrs.entity.MatField;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.SelectProvider;
 import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
 
 @Mapper
 @Repository
 public interface MatFieldMapper extends BaseMapper<MatField> {
 
+    @SelectProvider(type = SqlProvider.class, method = "createViewSql")
+    void createView(@Param("list") List<MatField> list);
+
+    class SqlProvider {
+        public String createViewSql(Map<String, Object> params) {
+            List<MatField> list = (List<MatField>) params.get("list");
+            StringBuilder sql = new StringBuilder();
+
+            sql.append(" CREATE OR REPLACE VIEW view_man_loc_detl_field AS \n");
+            sql.append(" SELECT detl_id ");
+            for (MatField matField : list) {
+                sql.append(", MAX(CASE WHEN name = '").append(matField.getName()).append("' THEN value END) AS ").append(matField.getName());
+            }
+            sql.append(" FROM man_loc_detl_field ");
+            sql.append(" GROUP BY detl_id ");
+
+            return sql.toString();
+        }
+    }
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java
new file mode 100644
index 0000000..5cd1984
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ViewLocDetlMapper.java
@@ -0,0 +1,20 @@
+package com.zy.asrs.wms.asrs.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zy.asrs.wms.asrs.entity.ViewLocDetl;
+import com.zy.asrs.wms.asrs.entity.param.FieldParam;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+@Repository
+public interface ViewLocDetlMapper extends BaseMapper<ViewLocDetl> {
+
+    List<Map<String,Object>> getList(String matnr, String batch, List<FieldParam> param);
+
+    Map<String,Object> getById(Long id);
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocDetlFieldService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocDetlFieldService.java
new file mode 100644
index 0000000..67229af
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocDetlFieldService.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.wms.asrs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.asrs.wms.asrs.entity.LocDetlField;
+import com.zy.asrs.wms.asrs.entity.param.FieldParam;
+
+import java.util.List;
+import java.util.Map;
+
+public interface LocDetlFieldService extends IService<LocDetlField> {
+
+    LocDetlField getLocDetlField(FieldParam param);
+
+    List<LocDetlField> getList(List<FieldParam> list);
+
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocDetlService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocDetlService.java
index cf6c8d5..9d377b5 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocDetlService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/LocDetlService.java
@@ -1,8 +1,21 @@
 package com.zy.asrs.wms.asrs.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zy.asrs.wms.asrs.entity.LocDetl;
+import com.zy.asrs.wms.asrs.entity.ViewLocDetl;
+import com.zy.asrs.wms.asrs.entity.param.FieldParam;
+import com.zy.asrs.wms.common.domain.BaseParam;
+import com.zy.asrs.wms.common.domain.PageParam;
+import org.apache.poi.ss.formula.functions.T;
+
+import java.util.List;
+import java.util.Map;
 
 public interface LocDetlService extends IService<LocDetl> {
 
+    PageParam<ViewLocDetl, BaseParam> getPage(PageParam<ViewLocDetl, BaseParam> pageParam, QueryWrapper<ViewLocDetl> buildWrapper);
+
+    List<LocDetl> getLocDetlList(Map<String, Object> map);
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MatFieldService.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MatFieldService.java
index bb9fc31..5a08b22 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MatFieldService.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MatFieldService.java
@@ -5,4 +5,6 @@
 
 public interface MatFieldService extends IService<MatField> {
 
+    void createView();
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlFieldServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlFieldServiceImpl.java
new file mode 100644
index 0000000..b300701
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlFieldServiceImpl.java
@@ -0,0 +1,26 @@
+package com.zy.asrs.wms.asrs.service.impl;
+
+import com.zy.asrs.wms.asrs.entity.param.FieldParam;
+import com.zy.asrs.wms.asrs.mapper.LocDetlFieldMapper;
+import com.zy.asrs.wms.asrs.entity.LocDetlField;
+import com.zy.asrs.wms.asrs.service.LocDetlFieldService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+@Service("locDetlFieldService")
+public class LocDetlFieldServiceImpl extends ServiceImpl<LocDetlFieldMapper, LocDetlField> implements LocDetlFieldService {
+
+    @Override
+    public LocDetlField getLocDetlField(FieldParam param) {
+        return this.baseMapper.getLocDetlField(param);
+    }
+
+    @Override
+    public List<LocDetlField> getList(List<FieldParam> list) {
+        return this.baseMapper.getList(list);
+    }
+}
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java
index 74db866..7fccb7c 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/LocDetlServiceImpl.java
@@ -1,12 +1,75 @@
 package com.zy.asrs.wms.asrs.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.zy.asrs.wms.asrs.entity.LocDetlField;
+import com.zy.asrs.wms.asrs.entity.ViewLocDetl;
+import com.zy.asrs.wms.asrs.entity.param.FieldParam;
 import com.zy.asrs.wms.asrs.mapper.LocDetlMapper;
 import com.zy.asrs.wms.asrs.entity.LocDetl;
+import com.zy.asrs.wms.asrs.mapper.ViewLocDetlMapper;
 import com.zy.asrs.wms.asrs.service.LocDetlService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zy.asrs.wms.common.domain.BaseParam;
+import com.zy.asrs.wms.common.domain.PageParam;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.*;
 
 @Service("locDetlService")
 public class LocDetlServiceImpl extends ServiceImpl<LocDetlMapper, LocDetl> implements LocDetlService {
 
+    @Autowired
+    private ViewLocDetlMapper viewLocDetlMapper;
+
+    @Override
+    public PageParam<ViewLocDetl, BaseParam> getPage(PageParam<ViewLocDetl, BaseParam> pageParam, QueryWrapper<ViewLocDetl> buildWrapper) {
+        PageParam<ViewLocDetl, BaseParam> result = viewLocDetlMapper.selectPage(pageParam, buildWrapper);
+
+        //瑙f瀽鍔ㄦ�佸瓧娈�
+        JSONObject data = JSON.parseObject(JSON.toJSONString(result));
+        List<ViewLocDetl> records = result.getRecords();
+        data.put("records", records);
+        for (ViewLocDetl locDetl : records) {
+            Map<String, Object> resultMap = viewLocDetlMapper.getById(locDetl.getId());
+            locDetl.syncFieldMap(resultMap);
+        }
+        return result;
+    }
+
+    @Override
+    public List<LocDetl> getLocDetlList(Map<String, Object> map) {
+        String matnr = null;
+        String batch = null;
+        if (map.containsKey("matnr")) {
+            matnr = map.get("matnr").toString();
+            map.remove("matnr");
+        }
+        if (map.containsKey("batch")) {
+            batch = map.get("batch").toString();
+            map.remove("batch");
+        }
+        ArrayList<FieldParam> param = new ArrayList<>();
+        for (Map.Entry<String, Object> entry : map.entrySet()) {
+            if (entry.getValue() == null) {
+                continue;
+            }
+            FieldParam fieldParam = new FieldParam();
+            fieldParam.setName(entry.getKey());
+            fieldParam.setValue(entry.getValue());
+            param.add(fieldParam);
+        }
+
+        List<Map<String, Object>> list2 = viewLocDetlMapper.getList(matnr, batch, param);
+        List<LocDetl> locDetls = new ArrayList<>();
+        for (Map<String, Object> objectMap : list2) {
+            LocDetl locDetl = JSON.parseObject(JSON.toJSONString(objectMap), LocDetl.class);
+            locDetl.syncFieldMap(objectMap);
+            locDetls.add(locDetl);
+        }
+        return locDetls;
+    }
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MatFieldServiceImpl.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MatFieldServiceImpl.java
index 06dd282..2d7761a 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MatFieldServiceImpl.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MatFieldServiceImpl.java
@@ -1,12 +1,21 @@
 package com.zy.asrs.wms.asrs.service.impl;
 
+import com.zy.asrs.wms.asrs.entity.LocDetlField;
 import com.zy.asrs.wms.asrs.mapper.MatFieldMapper;
 import com.zy.asrs.wms.asrs.entity.MatField;
 import com.zy.asrs.wms.asrs.service.MatFieldService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service("matFieldService")
 public class MatFieldServiceImpl extends ServiceImpl<MatFieldMapper, MatField> implements MatFieldService {
 
+    @Override
+    public void createView() {
+        List<MatField> list = this.list();
+        this.baseMapper.createView(list);
+    }
+
 }
diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/config/MybatisPlusConfig.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/config/MybatisPlusConfig.java
index 03a461d..4208482 100644
--- a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/config/MybatisPlusConfig.java
+++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/config/MybatisPlusConfig.java
@@ -1,5 +1,7 @@
 package com.zy.asrs.wms.common.config;
 
+import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
+import com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
@@ -46,7 +48,8 @@
                 return Arrays.asList(
                         "sys_host",
                         "sys_user_role",
-                        "sys_role_menu"
+                        "sys_role_menu",
+                        "view_man_loc_detl_field"
                 ).contains(tableName);
             }
 
@@ -83,4 +86,9 @@
         return new NullValue();
     }
 
+    @Bean
+    public ConfigurationCustomizer mybatisConfigurationCustomizer(){
+        return configuration -> configuration.setObjectWrapperFactory(new MybatisMapWrapperFactory());
+    }
+
 }
diff --git a/zy-asrs-wms/src/main/java/locDetlField.sql b/zy-asrs-wms/src/main/java/locDetlField.sql
new file mode 100644
index 0000000..a745d89
--- /dev/null
+++ b/zy-asrs-wms/src/main/java/locDetlField.sql
@@ -0,0 +1,9 @@
+-- save locDetlField record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `host_id`, `status`) values ( '搴撳瓨鏄庣粏鎵╁睍绠$悊', '0', '/asrs/locDetlField', '/asrs/locDetlField', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鏌ヨ搴撳瓨鏄庣粏鎵╁睍', '', '1', 'asrs:locDetlField:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '娣诲姞搴撳瓨鏄庣粏鎵╁睍', '', '1', 'asrs:locDetlField:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '淇敼搴撳瓨鏄庣粏鎵╁睍', '', '1', 'asrs:locDetlField:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `host_id`, `status`) values ( '鍒犻櫎搴撳瓨鏄庣粏鎵╁睍', '', '1', 'asrs:locDetlField:remove', '3', '1', '1');
+
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/LocDetlFieldMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/LocDetlFieldMapper.xml
new file mode 100644
index 0000000..b4e1950
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/LocDetlFieldMapper.xml
@@ -0,0 +1,24 @@
+<?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.LocDetlFieldMapper">
+
+    <select id="getLocDetlField" resultType="com.zy.asrs.wms.asrs.entity.LocDetlField">
+        SELECT * FROM man_loc_detl_field
+        WHERE CONCAT(`name`, `value`) like concat(#{param.name},'%',#{param.value},'%')
+    </select>
+
+    <select id="getList" resultType="com.zy.asrs.wms.asrs.entity.LocDetlField">
+        <foreach item="item" collection="list" index="index">
+            <if test="index == 0">
+                SELECT * FROM man_loc_detl_field
+                WHERE CONCAT(`name`, `value`) like concat(#{item.name},'%',#{item.value},'%')
+            </if>
+            <if test="index != 0">
+                union
+                SELECT * FROM man_loc_detl_field
+                WHERE CONCAT(`name`, `value`) like concat(#{item.name},'%',#{item.value},'%')
+            </if>
+        </foreach>
+    </select>
+
+</mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/LocDetlMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/LocDetlMapper.xml
index 3124f9a..fac81f9 100644
--- a/zy-asrs-wms/src/main/resources/mapper/asrs/LocDetlMapper.xml
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/LocDetlMapper.xml
@@ -2,4 +2,18 @@
 <!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.LocDetlMapper">
 
+    <select id="getList" resultType="com.zy.asrs.wms.asrs.entity.LocDetl">
+        select * from man_loc_detl
+        where matnr = #{matnr}
+        <if test="batch!=null">
+            and batch = #{batch}
+        </if>
+        <if test="ids!=null and ids.size()>0">
+            and id in
+            <foreach item="item" collection="ids" index="index"  separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+    
 </mapper>
diff --git a/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml b/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml
new file mode 100644
index 0000000..b5edcf0
--- /dev/null
+++ b/zy-asrs-wms/src/main/resources/mapper/asrs/ViewLocDetlMapper.xml
@@ -0,0 +1,23 @@
+<?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.ViewLocDetlMapper">
+
+    <select id="getList" resultType="map">
+        select * from view_man_loc_detl ld
+        where matnr = #{matnr}
+        <if test="batch!=null">
+            and batch = #{batch}
+        </if>
+        <if test="param!=null and param.size()>0">
+            <foreach item="item" collection="param" index="index">
+                and ${item.name} like CONCAT('%',#{item.value},'%')
+            </foreach>
+        </if>
+    </select>
+
+    <select id="getById" resultType="map">
+        select * from view_man_loc_detl
+        where id = #{id}
+    </select>
+
+</mapper>

--
Gitblit v1.9.1