From 1d3a018e6d707179eef127424e3d78d3863fba71 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期一, 30 三月 2026 16:09:02 +0800
Subject: [PATCH] 实现MES过点记录与库存变动记录全流程功能 本次提交实现了MES过点记录和库存变动记录的前后端全流程,包括数据模型、仓储、服务、控制器、前端页面及扩展配置。新增精排显示页面,支持虚拟精排与车身信息弹窗。优化货位信息行页面的悬浮提示框,丰富展示内容并美化样式。后端完善了相关API、DTO、AutoMapper映射及业务逻辑,支持数据追溯与可视化。整体提升了系统的可维护性和用户体验。

---
 项目代码/WMS/WMSClient/src/views/widesea_wms/stock/Eliteselection.vue                                    |  415 ++++++++++++
 项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/StockQuantityChangeRecordService.cs            |   40 +
 项目代码/WMS/WMSClient/src/router/tables.js                                                              |   28 
 项目代码/WMS/WMSServer/WIDESEA_DTO/Basic/MesLockDTO.cs                                                   |   16 
 项目代码/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_StockQuantityChangeRecord.cs                   |  162 ++++
 项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs                        |    5 
 项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_StockQuantityChangeRecordController.cs |   23 
 项目代码/WMS/WMSServer/WIDESEA_StorageBasicRepository/BasicInfo/Dt_PassPointRecordRepository.cs          |   18 
 项目代码/WMS/WMSServer/WIDESEA_IStorageBasicRepository/BasicInfo/IDt_PassPointRecordRepository.cs        |   14 
 项目代码/WMS/WMSClient/src/views/widesea_wms/stock/JElDescription.vue                                    |  162 ++++
 项目代码/WMS/WMSServer/WIDESEA_StorageBasicRepository/Stock/StockQuantityChangeRecordRepository.cs       |   18 
 项目代码/WMS/WMSServer/WIDESEA_IStorageBasicService/BasicInfo/IDt_PassPointRecordService.cs              |   19 
 项目代码/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IStockQuantityChangeRecordService.cs           |   18 
 项目代码/WMS/WMSClient/src/views/widesea_wms/stock/Dt_StockQuantityChangeRecord.vue                      |   99 ++
 项目代码/WMS/WMSClient/src/extension/widesea_wms/basicinfo/Dt_PassPointRecord.js                         |   67 +
 项目代码/WMS/WMSServer/WIDESEA_DTO/Location/LocationView.cs                                              |    8 
 项目代码/WMS/WMSClient/src/views/widesea_wms/basicinfo/Dt_PassPointRecord.vue                            |   73 ++
 项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_StockInfoController.cs                     |    1 
 项目代码/WMS/WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockQuantityChangeRecordRepository.cs     |   14 
 项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_MesLockInfoService.cs                       |   56 +
 项目代码/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs                               |    8 
 项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_MesLockInfoController.cs                   |   12 
 项目代码/WMS/WMSServer/WIDESEA_WMSServer/GlobalUsing.cs                                                  |    3 
 项目代码/WMS/WMSClient/src/views/widesea_wms/stock/locationInfoRow.vue                                   |  461 ++++++++++---
 项目代码/WMS/WMSServer/WIDESEA_Core/Enums/StockEnum.cs                                                   |   30 
 项目代码/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_StockInfoService.cs                        |    1 
 项目代码/WMS/WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs                                         |    2 
 项目代码/WMS/WMSClient/src/extension/widesea_wms/stock/Dt_StockQuantityChangeRecord.js                   |   61 +
 项目代码/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_PassPointRecord.cs                             |   72 ++
 项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/Location/LocationInfoService.cs                      |   11 
 项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_PassPointRecordService.cs               |   49 +
 项目代码/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_StockInfoService.cs                         |    5 
 项目代码/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_PassPointRecordController.cs           |   23 
 项目代码/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_MesLockInfoService.cs                      |    3 
 34 files changed, 1,881 insertions(+), 116 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/widesea_wms/basicinfo/Dt_PassPointRecord.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/widesea_wms/basicinfo/Dt_PassPointRecord.js"
new file mode 100644
index 0000000..0595aa0
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/widesea_wms/basicinfo/Dt_PassPointRecord.js"
@@ -0,0 +1,67 @@
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        //绀轰緥锛氬湪鎸夐挳鐨勬渶鍓嶉潰娣诲姞涓�涓寜閽�
+        //   this.buttons.unshift({  //涔熷彲浠ョ敤push鎴栬�卻plice鏂规硶鏉ヤ慨鏀筨uttons鏁扮粍
+        //     name: '鎸夐挳', //鎸夐挳鍚嶇О
+        //     icon: 'el-icon-document', //鎸夐挳鍥炬爣vue2鐗堟湰瑙乮view鏂囨。icon锛寁ue3鐗堟湰瑙乪lement ui鏂囨。icon(娉ㄦ剰涓嶆槸element puls鏂囨。)
+        //     type: 'primary', //鎸夐挳鏍峰紡vue2鐗堟湰瑙乮view鏂囨。button锛寁ue3鐗堟湰瑙乪lement ui鏂囨。button
+        //     onClick: function () {
+        //       this.$Message.success('鐐瑰嚮浜嗘寜閽�');
+        //     }
+        //   });
+
+        //绀轰緥锛氳缃慨鏀规柊寤恒�佺紪杈戝脊鍑烘瀛楁鏍囩鐨勯暱搴�
+        this.boxOptions.labelWidth = 150;
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      // this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/widesea_wms/stock/Dt_StockQuantityChangeRecord.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/widesea_wms/stock/Dt_StockQuantityChangeRecord.js"
new file mode 100644
index 0000000..2a64fbd
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/extension/widesea_wms/stock/Dt_StockQuantityChangeRecord.js"
@@ -0,0 +1,61 @@
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {
+      //妗嗘灦鍒濆鍖栭厤缃墠锛�
+      //璁剧疆鏌ヨ鐣岄潰寮瑰嚭妗嗙殑label瀹藉害
+      this.boxOptions.labelWidth = 50;
+
+    },
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      return true;
+    },
+    addBefore(formData) {
+      //鏂板缓淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛紝鍙互缁欑粰琛ㄥ崟璁剧疆鍊硷紝鑷繁杈撳嚭鐪媐ormData鐨勫��
+      return true;
+    },
+    updateBefore(formData) {
+      //缂栬緫淇濆瓨鍓峟ormData涓哄璞★紝鍖呮嫭鏄庣粏琛ㄣ�佸垹闄よ鐨処d
+      return true;
+    },
+    addrow() {
+      return true;
+    },
+    rowClick({ row, column, event }) {
+      //鏌ヨ鐣岄潰鐐瑰嚮琛屼簨浠�
+      //this.$refs.table.$refs.table.toggleRowSelection(row); //鍗曞嚮琛屾椂閫変腑褰撳墠琛�;
+    },
+    modelOpenAfter(row) {
+      //鐐瑰嚮缂栬緫銆佹柊寤烘寜閽脊鍑烘鍚庯紝鍙互鍦ㄦ澶勫啓閫昏緫锛屽锛屼粠鍚庡彴鑾峰彇鏁版嵁
+      //(1)鍒ゆ柇鏄紪杈戣繕鏄柊寤烘搷浣滐細 this.currentAction=='Add';
+      //(2)缁欏脊鍑烘璁剧疆榛樿鍊�
+      //(3)this.editFormFields.瀛楁='xxx';
+      //濡傛灉闇�瑕佺粰涓嬫媺妗嗚缃粯璁ゅ�硷紝璇烽亶鍘唗his.editFormOptions鎵惧埌瀛楁閰嶇疆瀵瑰簲data灞炴�х殑key鍊�
+      //鐪嬩笉鎳傚氨鎶婅緭鍑虹湅锛歝onsole.log(this.editFormOptions)
+    }
+  }
+};
+export default extension;
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/router/tables.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/router/tables.js"
index 1dbbe34..bfd56a1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/router/tables.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/router/tables.js"
@@ -292,6 +292,14 @@
     }
   },
   {
+    path: '/Eliteselection',
+    name: 'Eliteselection',
+    component: () => import('@/views/widesea_wms/stock/Eliteselection.vue'),
+    meta: {
+      keepAlive: false
+    }
+  },
+  {
     path: '/Dt_PaintingOrderInfo',
     name: 'Dt_PaintingOrderInfo',
     component: () => import('@/views/widesea_wms/OrderInfo/Dt_PaintingOrderInfo.vue'),
@@ -326,9 +334,23 @@
     path: '/VV_MesLockInfo',
     name: 'VV_MesLockInfo',
     component: () => import('@/views/widesea_wms/stock/VV_MesLockInfo.vue'),
-    // meta: {
-    //   keepAlive: true
-    // }
+    meta: {
+      keepAlive: false
+    }
+  },{
+    path: '/Dt_StockQuantityChangeRecord',
+    name: 'Dt_StockQuantityChangeRecord',
+    component: () => import('@/views/widesea_wms/stock/Dt_StockQuantityChangeRecord.vue'),
+    meta: {
+      keepAlive: false
+    }
+  },{
+    path: '/Dt_PassPointRecord',
+    name: 'Dt_PassPointRecord',
+    component: () => import('@/views/widesea_wms/basicinfo/Dt_PassPointRecord.vue'),
+    meta: {
+      keepAlive: false
+    }
   },
 ]
 export default tables
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/basicinfo/Dt_PassPointRecord.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/basicinfo/Dt_PassPointRecord.vue"
new file mode 100644
index 0000000..20607d5
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/basicinfo/Dt_PassPointRecord.vue"
@@ -0,0 +1,73 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wms/basicinfo/PointStackerRelation.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+        :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+        :table="table" :extend="extend">
+    </view-grid>
+</template>
+<script>
+import extend from "@/extension/widesea_wms/basicinfo/Dt_PassPointRecord.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+    setup() {
+        const table = ref({
+            key: 'PointID',
+            footer: "Foots",
+            cnName: 'MES杩囩偣璁板綍',
+            name: 'Dt_PassPointRecord',
+            url: "/Dt_PassPointRecord/",
+            sortName: "Id"
+        });
+        const editFormFields = ref({
+
+        });
+        const editFormOptions = ref([
+
+        ]);
+        const searchFormFields = ref({});
+        const searchFormOptions = ref([
+            [
+                { "title": "绔欏彴缂栧彿", "field": "pointCode", type: "text" },
+                { "title": "鍫嗗灈鏈虹紪鍙�", "field": "stackerCode", type: "text" },
+            ],
+            [
+                { "title": "鍏崇郴鐨勬柟鍚�", "field": "direction", type: "text" },
+                { "title": "鍏崇郴鐨勫尯鍩�", "field": "area", type: "text" },
+            ]
+        ]);
+        const columns = ref([{ field: 'id', title: '涓婚敭', type: 'int', sort: true, hidden: true, width: 110, readonly: true, require: true, align: 'left' },
+        { field: 'palletCode', title: '婊戞﹪鍙�', type: 'string', sort: true, width: 110, require: true, align: 'left', sort: true },
+        { field: 'position', title: '杩囩偣', type: 'string', sort: true, width: 110, align: 'left' },
+        { field: 'pvi', title: 'PVI', type: 'string', sort: true, width: 110, align: 'left' },
+        { field: 'passPointTime', title: '杩囩偣鏃堕棿', type: 'int', sort: true, width: 110, align: 'left' },
+        { field: 'lineCode', title: '琛屽彿', type: 'int', sort: true, width: 110, align: 'left' },
+        { field: 'content', title: '璇锋眰鍙傛暟', type: 'int', sort: true, width: 250, align: 'left' },
+        { field: 'creater', title: '鍒涘缓浜�', type: 'string', sort: true, width: 110, align: 'left' },
+        { field: 'createDate', title: '鍒涘缓鏃堕棿', type: 'datetime', sort: true, width: 150, align: 'left', sort: true },
+        { field: 'modifier', title: '淇敼浜�', type: 'string', sort: true, width: 100, hidden: true, align: 'left' },
+        { field: 'modifyDate', title: '淇敼鏃堕棿', type: 'datetime', sort: true, width: 150, hidden: true, align: 'left', sort: true },])
+        const detail = ref({
+            cnName: "#detailCnName",
+            table: "#detailTable",
+            columns: [],
+            sortName: "",
+            key: ""
+        });
+        return {
+            table,
+            extend,
+            editFormFields,
+            editFormOptions,
+            searchFormFields,
+            searchFormOptions,
+            columns,
+            detail,
+        };
+    },
+});
+</script>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/Dt_StockQuantityChangeRecord.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/Dt_StockQuantityChangeRecord.vue"
new file mode 100644
index 0000000..b43ff1b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/Dt_StockQuantityChangeRecord.vue"
@@ -0,0 +1,99 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wms/invoices/Dt_InboundOrder.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid" :columns="columns" :detail="detail" :editFormFields="editFormFields"
+        :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+        :table="table" :extend="extend">
+    </view-grid>
+</template>
+<script>
+import extend from "@/extension/widesea_wms/stock/Dt_StockQuantityChangeRecord.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+    setup() {
+        const table = ref({
+            key: 'id',
+            footer: "Foots",
+            cnName: '搴撳瓨鍙樺姩璁板綍',
+            name: 'StockQuantityChangeRecord',
+            url: "/StockQuantityChangeRecord/",
+            sortName: "id"
+        });
+        const editFormFields = ref({
+        });
+        const editFormOptions = ref([
+        ]);
+        const searchFormFields = ref({
+
+        });
+        const searchFormOptions = ref([
+            [
+                { "title": "婊戞﹪鍙�", "field": "palletCode", type: "text" },
+                { "title": "搴撲綅鍙�", "field": "locationCode", type: "text" },
+                { "title": "鍙樺姩绫诲瀷", "field": "changeType", type: "select", dataKey: "ChangeType", data: [] },
+                { "title": "浠诲姟鍙�", "field": "taskNum", type: "text" },
+            ],
+            [
+                { "title": "PVI", "field": "pvi", type: "string" },
+                { "title": "杞﹁韩ID", "field": "carBodyID", type: "int" },
+                { "title": "宸烽亾鍙�", "field": "roadwayNo", type: "int" },
+                { "title": "搴撳瓨ID", "field": "stockId", type: "int" },
+            ],
+            [
+                { "title": "鐧借溅韬墿鏂欏彿", "field": "biwMaterialCode", type: "int" },
+                { "title": "杞﹁韩绫诲瀷", "field": "carType", type: "select", dataKey: "BodyType", data: [] },
+                { "title": "宸ュ崟绫诲瀷", "field": "workOrderType", type: "select", dataKey: "OrderType", data: [] },
+                { "title": "杞﹀瀷", "field": "vehicleCharacteristic", type: "string" },
+            ],
+            [
+
+                { "title": "褰╄溅韬墿鏂欏彿", "field": "pbMaterial", type: "string" },
+                { "title": "杞﹁韩棰滆壊", "field": "carBodyCharacteristic", type: "string" },
+                { "title": "澶╃獥鐗瑰緛", "field": "skylightCharacteristic", type: "string" },
+            ]
+        ]);
+        const columns = ref([
+            { field: 'id', title: '涓婚敭ID', type: 'int', width: 110, readonly: true, hidden: true, require: true, align: 'left' },
+            { field: 'stockId', title: '搴撳瓨ID', type: 'string', width: 90, align: 'left' },
+            { field: 'taskNum', title: '浠诲姟鍙�', type: 'string', width: 60, align: 'left' },
+            { field: 'changeType', title: '鍙樺姩绫诲瀷', type: 'int', width: 90, align: 'left', bind: { key: "ChangeType", data: [] } },
+            { field: 'palletCode', title: '婊戞﹪鍙�', type: 'string', width: 75, align: 'left' },
+            { field: 'locationCode', title: '搴撲綅鍙�', type: 'int', width: 120, align: 'left' },
+            { field: 'roadwayNo', title: '宸烽亾鍙�', type: 'string', width: 60, align: 'left' },
+            { field: 'pvi', title: 'PVI鐮�', type: 'string', width: 120, align: 'left' },
+            { field: 'carBodyID', title: '杞﹁韩ID', type: 'int', width: 90, align: 'left' },
+            { field: 'vehicleCharacteristic', title: '杞﹀瀷', type: 'string', width: 75, align: 'left' },
+            { field: 'carType', title: '杞﹁韩绫诲瀷', type: 'int', width: 80, align: 'left', bind: { key: "BodyType", data: [] } },
+            { field: 'workOrderType', title: '宸ュ崟绫诲瀷', type: 'string', width: 100, align: 'left', bind: { key: "OrderType", data: [] } },
+            { field: 'skylightCharacteristic', title: '澶╃獥鐗瑰緛', type: 'string', width: 75, align: 'left' },
+            { field: 'carBodyCharacteristic', title: '杞﹁韩棰滆壊', type: 'string', width: 75, align: 'left' },
+            { field: 'biwMaterialCode', title: '鐧借溅韬墿鏂欏彿', type: 'string', width: 120, align: 'left' },
+            { field: 'pbMaterial', title: '褰╄溅韬墿鏂欏彿', type: 'string', width: 120, align: 'left' },
+            { field: 'biwInPassTime', title: '鐒婅涓婄嚎鏃堕棿', type: 'datetime', width: 130, align: 'left' },
+            { field: 'createDate', title: '鍒涘缓鏃堕棿', type: 'datetime', sort: true, width: 100, align: 'left' },
+        ]);
+
+        const detail = ref({
+            cnName: "#detailCnName",
+            table: "#detailTable",
+            columns: [],
+            sortName: "",
+            key: ""
+        });
+        return {
+            table,
+            extend,
+            editFormFields,
+            editFormOptions,
+            searchFormFields,
+            searchFormOptions,
+            columns,
+            detail,
+        };
+    },
+});
+</script>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/Eliteselection.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/Eliteselection.vue"
new file mode 100644
index 0000000..ee08a4d
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/Eliteselection.vue"
@@ -0,0 +1,415 @@
+<template>
+    <div class="container">
+        <div class="header">
+            <div class="title">绮炬帓鏄剧ず</div>
+            <div class="legend-section">
+                <div class="legend-item">
+                    <div class="legend-label">铏氭嫙绮炬帓</div>
+                    <span class="color-box color-green"></span>
+                </div>
+                <div class="legend-item">
+                    <div class="legend-label">铏氭嫙绮炬帓鏃犱换鍔�</div>
+                    <span class="color-box color-lightgreen"></span>
+                </div>
+            </div>
+        </div>
+        <div class="content-wrapper">
+            <div class="content">
+                <div v-if="displayItems.length === 0" class="no-data">
+                    <div class="no-data-text">鏆傛棤鏁版嵁</div>
+                </div>
+                <div v-for="(item, index) in displayItems" :key="index" class="box">
+                    <div class="box-content color-green" v-if="item.lockStatue == 1" @click="mouseClick(item.pvi)">
+                        <div class="text-line">{{ item.pvi }}</div>
+                        <div class="text-line">{{ item.vehicleCharacteristic }}</div>
+                        <div class="text-line">{{ item.carBodyCharacteristic }}</div>
+                    </div>
+                    <div class="box-content color-lightgreen" v-else-if="item.lockStatue == 0"
+                        @click="mouseClick(item.pvi)">
+                        <div class="text-line">{{ item.pvi }}</div>
+                        <div class="text-line">{{ item.vehicleCharacteristic }}</div>
+                        <div class="text-line">{{ item.carBodyCharacteristic }}</div>
+                    </div>
+                    <div class="box-content color-font" v-else-if="item.lockStatue != 1 || item.lockStatue != 0"
+                        @click="mouseClick(item.pvi)">
+                        <div class="text-line">{{ item.pvi }}</div>
+                        <div class="text-line">{{ item.vehicleCharacteristic }}</div>
+                        <div class="text-line">{{ item.carBodyCharacteristic }}</div>
+                    </div>
+                    <div class="box-index">{{ index + 1 }}</div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <el-dialog v-model="dialogVisible" title="杞﹁韩淇℃伅鏌ョ湅" :before-close="handleClose">
+        <div v-if="stockInfos.message" class="no-data-message">{{ stockInfos.message }}</div>
+        <el-form v-else ref="$form" :model="stockInfos" label-position="left" label-width="120px" size="medium">
+            <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+                    <el-form-item label="搴撲綅缂栧彿锛�">
+                        <j-el-description :value="stockInfos.locationCode" type="primary" ellipsis></j-el-description>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+                    <el-form-item label="PVI:">
+                        <j-el-description :value="stockInfos.pvi" type="primary" ellipsis></j-el-description>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+                    <el-form-item label="杞﹀瀷:">
+                        <j-el-description :value="stockInfos.vehicleCharacteristic" type="primary"
+                            ellipsis></j-el-description>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+                    <el-form-item label="杞﹁韩绫诲瀷">
+                        <j-el-description :value="getcarType(stockInfos.carType)" type="primary"
+                            ellipsis></j-el-description>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
+                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+                    <el-form-item label="宸ュ崟绫诲瀷:">
+                        <j-el-description :value="getOrderType(stockInfos.workOrderType)" type="primary"
+                            ellipsis></j-el-description>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+                    <el-form-item label="澶╃獥鐗瑰緛:">
+                        <j-el-description :value="stockInfos.skylightCharacteristic" type="primary"
+                            ellipsis></j-el-description>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
+                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+                    <el-form-item label="杞﹁韩棰滆壊:">
+                        <j-el-description :value="stockInfos.carBodyCharacteristic" type="primary"
+                            ellipsis></j-el-description>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+                    <el-form-item label="鐧借溅韬墿鏂欏彿:">
+                        <j-el-description :value="stockInfos.biwMaterialCode" type="primary" ellipsis></j-el-description>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
+                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+                    <el-form-item label="褰╄溅韬墿鏂欏彿:">
+                        <j-el-description :value="stockInfos.pbMaterial" type="primary" ellipsis></j-el-description>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
+                    <el-form-item label="鐒婅涓婄嚎鏃堕棿:">
+                        <j-el-description :value="stockInfos.biwInPassTime" type="primary" ellipsis></j-el-description>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-divider />
+        </el-form>
+        <template #footer>
+            <div class="dialog-footer">
+                <el-button @click="dialogVisible = false">鍙栨秷</el-button>
+                <el-button type="primary" @click="dialogVisible = false">
+                    纭
+                </el-button>
+            </div>
+        </template>
+    </el-dialog>
+</template>
+  
+<script>
+import JElDescription from "./JElDescription";
+export default {
+    data() {
+        return {
+            mesLockInfos: [],
+            timer: null,
+            dialogVisible: false,
+            stockInfos: {
+
+            },
+        }
+    },
+    computed: {
+        displayItems() {
+            return this.mesLockInfos.slice(0, 50)
+        }
+    },
+    methods: {
+        GetViewData() {
+            this.http.post('/api/VV_MesLockInfo/GetMesLockInfo', '', '鏌ヨ涓�').then((x) => {
+                this.mesLockInfos = x.data
+            })
+        },
+        mouseClick(pvi) {
+            this.http.post('/api/VV_MesLockInfo/GetStockInfo?PVI=' + pvi, '', '鏌ヨ涓�').then((x) => {
+                if (x.data === null) {
+                    this.stockInfos = { message: '鏃犲簱瀛樻暟鎹�' };
+                } else {
+                    this.stockInfos = x.data;
+                }
+                this.dialogVisible = true;
+            })
+        },
+        getcarType(carType) {
+            if (carType == 1) return '鐧借溅韬�'
+            if (carType == 2) return '褰╄溅韬�'
+            if (carType == 3) return '绌烘粦姗�'
+        },
+        getOrderType(OrderType) {
+            if (OrderType == 1) return '鍥藉唴閿�鍞溅'
+            if (OrderType == 2) return '鍥介檯閿�鍞溅'
+            if (OrderType == 3) return '灞曡溅'
+            if (OrderType == 4) return '浼佷笟鐢ㄨ溅'
+            if (OrderType == 6) return '璇曞埗杞�'
+            if (OrderType == 7) return 'SKD/CKD杞�'
+            if (OrderType == 8) return '鐗规畩閰嶇疆杞�'
+            if (OrderType == 11) return '楠岃瘉璁㈠崟'
+        },
+        startTimer() {
+            // 娓呴櫎鍙兘瀛樺湪鐨勬棫瀹氭椂鍣�
+            if (this.timer) {
+                clearInterval(this.timer)
+            }
+            // 璁剧疆鏂扮殑瀹氭椂鍣紝姣�30绉掑埛鏂颁竴娆�
+            this.timer = setInterval(() => {
+                this.GetViewData()
+            }, 30000)
+        },
+        stopTimer() {
+            if (this.timer) {
+                clearInterval(this.timer)
+                this.timer = null
+            }
+        }
+    },
+    mounted() {
+        this.GetViewData()
+        this.startTimer()
+    },
+    beforeUnmount() {
+        this.stopTimer()
+    },
+    components: { JElDescription }
+}
+</script>
+  
+<style scoped>
+.header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 16px 24px;
+    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+    border-bottom: none;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+.title {
+    font-size: 24px;
+    font-weight: 700;
+    color: #ffffff;
+    margin-left: 0;
+    text-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+    letter-spacing: 0.5px;
+}
+
+.legend-section {
+    display: flex;
+    gap: 24px;
+    align-items: center;
+}
+
+.legend-item {
+    display: flex;
+    align-items: center;
+    gap: 8px;
+    padding: 6px 12px;
+    background-color: rgba(255, 255, 255, 0.2);
+    border-radius: 20px;
+    backdrop-filter: blur(10px);
+}
+
+.legend-label {
+    font-size: 15px;
+    color: #ffffff;
+    font-weight: 500;
+    letter-spacing: 0.3px;
+}
+
+.color-box {
+    display: inline-block;
+    width: 18px;
+    height: 18px;
+    border-radius: 4px;
+    border: 2px solid rgba(255, 255, 255, 0.3);
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+}
+
+.color-green {
+    background-color: #167C07;
+}
+
+.color-lightgreen {
+    background-color: #9dc88d;
+}
+
+.color-font {
+    background-color: #6ec0f0;
+}
+
+.box-content.color-green {
+    background-color: #167C07;
+    border-radius: 8px;
+    padding: 12px;
+    margin: -12px;
+    margin-bottom: -12px;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+}
+
+.box-content.color-lightgreen {
+    background-color: #9dc88d;
+    border-radius: 8px;
+    padding: 12px;
+    margin: -12px;
+    margin-bottom: -12px;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+}
+
+.box-content.color-font {
+    background-color: #6ec0f0;
+    border-radius: 8px;
+    padding: 12px;
+    margin: -12px;
+    margin-bottom: -12px;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+}
+
+.content-wrapper {
+    padding: 24px;
+    height: calc(100vh - 72px);
+    overflow-y: auto;
+    background: linear-gradient(180deg, #f8f9fa 0%, #e9ecef 100%);
+    display: flex;
+    align-items: center;
+    justify-content: center;
+}
+
+.content {
+    display: grid;
+    grid-template-columns: repeat(10, 1fr);
+    gap: 12px;
+    width: 100%;
+}
+
+.box {
+    width: 100%;
+    height: 100%;
+    border: none;
+    border-radius: 8px;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    padding: 12px;
+    font-size: 13px;
+    font-weight: 500;
+    color: #333;
+    cursor: pointer;
+    background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);
+    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
+    position: relative;
+    overflow: hidden;
+}
+
+.box-content {
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-around;
+    overflow: hidden;
+}
+
+.text-line {
+    line-height: 1.6;
+    text-align: center;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    color: #ffffff;
+    font-weight: 600;
+    font-size: 13px;
+    letter-spacing: 0.3px;
+}
+
+.box-index {
+    text-align: center;
+    margin-top: 8px;
+    font-size: 16px;
+    color: #756767;
+    font-weight: 800;
+    padding-top: 8px;
+    border-top: 1px solid rgba(255, 255, 255, 0.2);
+    letter-spacing: 0.5px;
+}
+
+.color-box {
+    display: inline-block;
+    width: 20px;
+    height: 20px;
+    margin-right: 15px;
+    border-radius: 3px;
+}
+
+/* 鏃犳暟鎹彁绀烘牱寮� */
+.no-data-message {
+    text-align: center;
+    padding: 40px 20px;
+    font-size: 16px;
+    color: #909399;
+    background-color: #f4f4f5;
+    border-radius: 4px;
+}
+
+/* 椤甸潰鏃犳暟鎹彁绀烘牱寮� */
+.no-data {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    width: 100%;
+    height: 100%;
+    min-height: 300px;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+}
+
+.no-data-icon {
+    font-size: 80px;
+    margin-bottom: 20px;
+    opacity: 0.6;
+}
+
+.no-data-text {
+    font-size: 18px;
+    color: #909399;
+    font-weight: 500;
+}
+</style>
+  
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/JElDescription.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/JElDescription.vue"
new file mode 100644
index 0000000..12ec17d
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/JElDescription.vue"
@@ -0,0 +1,162 @@
+<template>
+  <div class="j-description wordwrap" :class="class__" :style="style__">{{value}}</div>
+</template>
+
+<script>
+  export default {
+    name: "j-el-description",
+    inject: {
+      elForm: {
+        default: ''
+      },
+      elFormItem: {
+        default: ''
+      }
+    },
+
+    props: {
+      value: [String, Number],    // 鍐呭
+      type: {                     // 涓婚
+        type: String,
+        validator(value) {
+          return ['primary', 'success', 'info', 'warning', 'danger'].indexOf(value) !== -1;
+        }
+      },
+      size: {                     // 灏哄
+        type: String,
+        validator(value) {
+          return ['medium', 'small', 'mini'].indexOf(value) !== -1;
+        }
+      },
+      height: [String, Number],   // 闄愬埗楂樺害
+      ellipsis: Boolean,          // 鐪佺暐鍙�
+    },
+
+    computed: {
+      elFormItemSize__() {
+        return (this.elFormItem || {}).elFormItemSize;
+      },
+      size__() {
+        return this.size || this.elFormItemSize__ || (this.$ELEMENT || {}).size;
+      },
+      class__() {
+        let _class = [];
+        if (this.type) {
+          _class.push(this.type);
+        }
+        if (this.size__) {
+          _class.push(this.size__);
+        }
+        if (this.height) {
+          _class.push('scroll');
+        }
+        if (this.ellipsis) {
+          _class.push('ellipsis');
+        }
+        return _class;
+      },
+      style__() {
+        let _style = {};
+        if (!this.ellipsis && this.height) {
+          if (isNaN(this.height)) {
+            _style.height = this.height;
+          } else {
+            _style.height = this.height + 'px';
+          }
+        }
+        return _style;
+      }
+    }
+  }
+</script>
+
+<style scoped>
+  .j-description {
+    min-height: 40px;
+    line-height: 40px;
+    padding: 0 50%;
+  }
+
+  /*澶у皬*/
+  .j-description.medium {
+    min-height: 36px;
+    line-height: 36px;
+  }
+
+  .j-description.small {
+    min-height: 32px;
+    line-height: 32px;
+  }
+
+  .j-description.mini {
+    min-height: 28px;
+    line-height: 28px;
+  }
+
+  /*婊氬姩*/
+  .j-description.scroll {
+    overflow-x: hidden;
+    overflow-y: auto;
+  }
+
+  .j-description.scroll::-webkit-scrollbar {
+    width: 9px;
+    height: 9px;
+    background: #F3F3F3;
+  }
+
+  .j-description.scroll::-webkit-scrollbar-thumb {
+    border: 1px solid #ffffff;
+    border-radius: 6px;
+    background: #c9c9c9;
+  }
+
+  .j-description.scroll::-webkit-scrollbar-thumb:hover {
+    background: #b5b5b5;
+  }
+
+  /*鎹㈣*/
+  .j-description.wordwrap {
+    table-layout: fixed;
+    word-break: break-all;
+    word-wrap: break-word;
+  }
+
+  /*鐪佺暐鍙�*/
+  .j-description.ellipsis {
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+  }
+
+  /*涓婚*/
+  .j-description.primary {
+    background-color: #ecf5ff;
+    border: 1px solid #d9ecff;
+    color: #409eff;
+  }
+
+  .j-description.success {
+    background-color: #f0f9eb;
+    border-color: #e1f3d8;
+    color: #67c23a;
+  }
+
+  .j-description.info {
+    background-color: #f4f4f5;
+    border-color: #e9e9eb;
+    color: #909399;
+  }
+
+  .j-description.warning {
+    background-color: #fdf6ec;
+    border-color: #faecd8;
+    color: #e6a23c;
+  }
+
+  .j-description.danger {
+    background-color: #fef0f0;
+    border-color: #fde2e2;
+    color: #f56c6c;
+  }
+</style>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/locationInfoRow.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/locationInfoRow.vue"
index 2b6f034..a10d4f6 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/locationInfoRow.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSClient/src/views/widesea_wms/stock/locationInfoRow.vue"
@@ -7,13 +7,13 @@
     <div class="content-wrapper">
       <!-- 鎺у埗闈㈡澘鍖哄煙 -->
       <div class="control-panel">
-        <div class="form-group">
+        <!-- <div class="form-group">
           <label>鍖哄煙锛�</label>
           <el-select size="mini" filterable v-model="Area.areaCode" placeholder="璇烽�夋嫨" class="full-width">
             <el-option v-for="item in slectData" :value="item.areaCode" :label="item.areaName"
               :key="item.areaName"></el-option>
           </el-select>
-        </div>
+        </div> -->
 
         <!-- <div class="form-group">
           <label>鎺掞細</label>
@@ -35,9 +35,7 @@
           </el-select>
         </div> -->
 
-        <el-button type="success" class="refresh-btn" @click="GetViewData">
-          鍒锋柊
-        </el-button>
+        <el-button type="success" class="refresh-btn" @click="GetViewData"> 鍒锋柊 </el-button>
 
         <div class="legend-section">
           <h4>璇存槑</h4>
@@ -63,153 +61,264 @@
         </div>
       </div>
       <!-- 鎮诞鎻愮ず妗� -->
-      <div v-if="showTooltipFlag" class="location-tooltip" :style="{
-        left: tooltipPosition.x + 'px',
-        top: tooltipPosition.y + 'px',
-      }">
-        <div v-if="currentLocation">
-          <p><strong>璐т綅鍙�:</strong>{{ currentLocation.locationCode }}</p>
-          <!-- <p>
-            <strong>璐т綅鎺掑垪灞�:</strong> {{ currentLocation.row }}鎺抺{
-              currentLocation.layer
-            }}鍒梴{ currentLocation.layer }}灞�
-          </p> -->
-          <p><strong>鐘舵��:</strong> {{ getStatusText(currentLocation) }}</p>
-          <p>
-            <strong>绂佺敤:</strong>
-            {{ currentLocation.location_lock == 2 ? "鏄�" : "鍚�" }}
-          </p>
-          <!-- <p v-if="currentLocation.location_state > 0">
-            <strong>鐗╂枡缂栫爜:</strong>
-            {{ currentLocation.material_code || "鏃�" }}
-          </p>
-          <p v-if="currentLocation.location_state > 0">
-            <strong>鏁伴噺:</strong> {{ currentLocation.quantity || "鏃�" }}
-          </p> -->
+      <transition name="tooltip-fade">
+        <div v-if="showTooltipFlag" class="location-tooltip" :style="{
+          left: tooltipPosition.x + 'px',
+          top: tooltipPosition.y + 'px'
+        }">
+          <div v-if="currentLocation" class="tooltip-content">
+            <div class="tooltip-header">
+              <h4>{{ currentLocation.locationCode }}</h4>
+              <span class="status-badge" :class="getStatusClass(currentLocation)">
+                {{ getStatusText(currentLocation) }}
+              </span>
+            </div>
+            <div class="tooltip-body">
+              <div class="info-section">
+                <h5>鍩烘湰淇℃伅</h5>
+                <div class="info-row">
+                  <span class="label">璐т綅鍙�:</span>
+                  <span class="value">{{ currentLocation.locationCode }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">鐘舵��:</span>
+                  <span class="value status-highlight" :class="getStatusClass(currentLocation)">
+                    {{ getStatusText(currentLocation) }}
+                  </span>
+                </div>
+                <div class="info-row">
+                  <span class="label">绂佺敤:</span>
+                  <span class="value" :class="{ 'disabled': currentLocation.location_lock == 2 }">
+                    {{ currentLocation.location_lock == 2 ? '鏄�' : '鍚�' }}
+                  </span>
+                </div>
+              </div>
+              <div v-if="currentLocation.stockInfo != null" class="info-section">
+                <h5>搴撳瓨淇℃伅</h5>
+                <div class="info-row">
+                  <span class="label">PVI:</span>
+                  <span class="value">{{ currentLocation.stockInfo.pvi }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">婊戞﹪鍙�:</span>
+                  <span class="value">{{ currentLocation.stockInfo.palletCode }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">宸烽亾鍙�:</span>
+                  <span class="value">{{ currentLocation.stockInfo.roadwayNo }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">杞﹀瀷:</span>
+                  <span class="value">{{ currentLocation.stockInfo.vehicleCharacteristic }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">宸ュ崟绫诲瀷:</span>
+                  <span class="value">{{ currentLocation.stockInfo.workOrderType }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">杞﹁韩棰滆壊:</span>
+                  <span class="value">{{ currentLocation.stockInfo.carBodyCharacteristic }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">杞﹁韩绫诲瀷:</span>
+                  <span class="value">{{ getcarType(currentLocation.stockInfo.carType) }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">褰╄溅韬墿鏂欏彿:</span>
+                  <span class="value">{{ currentLocation.stockInfo.pbMaterial }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">鐧借溅韬墿鏂欏彿:</span>
+                  <span class="value">{{ currentLocation.stockInfo.biwMaterialCode }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">鐒婅涓婄嚎鏃堕棿:</span>
+                  <span class="value">{{ currentLocation.stockInfo.biwInPassTime }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">澶╃獥鐗瑰緛:</span>
+                  <span class="value">{{ currentLocation.stockInfo.skylightCharacteristic }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">鎷夊姩閿佸畾:</span>
+                  <span class="value">{{ getlockOrder(currentLocation.stockInfo.lockOrder) }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">閿佸畾鐘舵��:</span>
+                  <span class="value">{{ getstockStatus(currentLocation.stockInfo.stockStatus) }}</span>
+                </div>
+                <div class="info-row">
+                  <span class="label">浠诲姟鐘舵��:</span>
+                  <span class="value">{{ gettaskStatus(currentLocation.stockInfo.taskStatus) }}</span>
+                </div>
+              </div>
+            </div>
+          </div>
         </div>
-      </div>
+      </transition>
     </div>
   </div>
 </template>
 
 <script>
-import { ElButton } from "element-plus";
+import { ElButton } from 'element-plus'
 
 export default {
   data() {
     return {
       slectData: [],
       scList: [],
-      Area: { areaName: "", areaCode: "" },
-      mian_height: "",
+      Area: { areaName: '', areaCode: '' },
+      mian_height: '',
       infoMsg: [
-        { bgcolor: "lightgreen", msg: "绌鸿揣浣�", state: 0 },
-        { bgcolor: "orange", msg: "鏈夎揣", state: 2 },
-        { bgcolor: "#2BB3D5", msg: "閿佸畾", state: 1 },
-        { bgcolor: "#ccc", msg: "绂佺敤", state: 9 }, 
-        // { bgcolor: "red", msg: "绂佺敤", state: 3 },
-        { bgcolor: "blue", msg: "鍑哄簱", state: "3" },
-         { bgcolor: "pink", msg: "鍏ュ簱", state: "4" },
+        { bgcolor: 'lightgreen', msg: '绌鸿揣浣�', state: 0 },
+        { bgcolor: 'orange', msg: '鏈夎揣', state: 2 },
+        { bgcolor: '#2BB3D5', msg: '閿佸畾', state: 1 },
+        { bgcolor: '#ccc', msg: '绂佺敤', state: 9 },
+        { bgcolor: 'blue', msg: '鍑哄簱', state: '3' },
+        { bgcolor: 'pink', msg: '鍏ュ簱', state: '4' }
       ],
       locationData: [],
       showTooltipFlag: false,
       currentLocation: null,
-      tooltipPosition: { x: 0, y: 0 },
-    };
+      tooltipPosition: { x: 20, y: 20 }
+    }
   },
   computed: {
     GetBgColor(col) {
       return (col) => {
-        var bgColor ='';
+        var bgColor = ''
         //浼樺厛鏄剧ず绂佺敤鐘舵��
         if (col.location_lock == 2) {
           this.infoMsg.forEach((el) => {
             if (el.state == col.location_lock) {
-              bgColor = "#ccc";
+              bgColor = '#ccc'
             }
-          });
-        }
-         else {
+          })
+        } else {
           this.infoMsg.forEach((el) => {
-             if (el.state == col.location_state) {
-              bgColor = el.bgcolor;
+            if (el.state == col.location_state) {
+              bgColor = el.bgcolor
             }
-          });
+          })
         }
-        return bgColor;
-      };
-    },
+        return bgColor
+      }
+    }
   },
   watch: {
     //鍒囨崲搴撳尯
-    "Area.areaCode"(newValue, oldValue) {
-      this.scList = [];
+    'Area.areaCode'(newValue, oldValue) {
+      this.scList = []
       this.slectData.forEach((e) => {
         if (e.areaCode == newValue) {
-          this.Area.areaCode = e.areaCode[0];
+          this.Area.areaCode = e.areaCode[0]
           //this.scList = e.tunnel;
         }
-      });
-      this.GetViewData();
-    },
+      })
+      this.GetViewData()
+    }
   },
   methods: {
     GetViewData() {
-      var _this = this;
-      this.http
-        .post("/api/LocationInfo/GetLocationStatu", _this.Area, "鏌ヨ涓�")
-        .then((x) => {
-          _this.locationData = x;
-          console.log("鍚庣杩斿洖:", x);
-        });
+      var _this = this
+      this.http.post('/api/LocationInfo/GetLocationStatu', _this.Area, '鏌ヨ涓�').then((x) => {
+        _this.locationData = x
+        console.log('鍚庣杩斿洖:', x)
+      })
     },
     // 鍒囨崲鎺�
     SCChange() {
-      this.GetViewData();
+      this.GetViewData()
     },
     showTooltip(location, event) {
-      this.currentLocation = location;
-      this.showTooltipFlag = true;
+      this.currentLocation = location
+      this.showTooltipFlag = true
 
-      // 璁剧疆鎻愮ず妗嗕綅缃紝绋嶅井鍋忕Щ閬垮厤閬尅榧犳爣
-      this.tooltipPosition = {
-        x: event.clientX + 10,
-        y: event.clientY + 10,
-      };
+      // 鑾峰彇鎻愮ず妗嗙殑棰勪及瀹藉害
+      const tooltipWidth = 300
+      const tooltipHeight = 400
+      const offsetX = 15
+      const offsetY = 15
+
+      // 璁$畻鎻愮ず妗嗕綅缃紝浼樺厛鏄剧ず鍦ㄩ紶鏍囦笂鏂�
+      let x = event.clientX + offsetX
+      let y = event.clientY - tooltipHeight - offsetY
+
+      // 濡傛灉涓婃柟绌洪棿涓嶈冻锛屽垯鏄剧ず鍦ㄤ笅鏂�
+      if (y < 10) {
+        y = event.clientY + offsetY
+      }
+
+      // 妫�鏌ュ彸渚ц竟鐣�
+      if (x + tooltipWidth > window.innerWidth) {
+        x = event.clientX - tooltipWidth - offsetX
+      }
+
+      // 纭繚涓嶄細瓒呭嚭宸﹁竟鐣屽拰涓婅竟鐣�
+      x = Math.max(10, x)
+      y = Math.max(10, y)
+
+      this.tooltipPosition = { x, y }
     },
 
     hideTooltip() {
-      this.showTooltipFlag = false;
-      this.currentLocation = null;
+      this.showTooltipFlag = false
+      this.currentLocation = null
     },
 
     getStatusText(location) {
       // if (location.location_lock === 3) return "绂佺敤";
-      if (location.location_state === '0') return "绌鸿揣浣�";
-      if (location.location_state === '1') return "閿佸畾";
-      if (location.location_state === '3') return "鏈夎揣閿佸畾";
-      if (location.location_state === '4') return "绌洪棽閿佸畾";
-      if (location.location_state === '2') return "鏈夎揣";
+      if (location.location_state === '0') return '绌鸿揣浣�'
+      if (location.location_state === '1') return '閿佸畾'
+      if (location.location_state === '3') return '鏈夎揣閿佸畾'
+      if (location.location_state === '4') return '绌洪棽閿佸畾'
+      if (location.location_state === '2') return '鏈夎揣'
       // if (location.location_state > 0 && location.location_state < 100)
       //   return "閿佸畾";
-      return "鍏朵粬";
+      return '鍏朵粬'
     },
+    getStatusClass(location) {
+      if (location.location_state === '0') return 'status-empty'
+      if (location.location_state === '1') return 'status-locked'
+      if (location.location_state === '3') return 'status-locked-with-stock'
+      if (location.location_state === '4') return 'status-locked-empty'
+      if (location.location_state === '2') return 'status-with-stock'
+      return 'status-other'
+    },
+    getcarType(carType) {
+      if (carType == 1) return '鐧借溅韬�'
+      if (carType == 2) return '褰╄溅韬�'
+      if (carType == 3) return '绌烘粦姗�'
+    },
+    getlockOrder(lockOrder) {
+      if (lockOrder == 1) return '宸查攣杞�'
+      if (lockOrder == 0) return '鏈媺鍔�'
+    },
+    getstockStatus(stockStatus) {
+      if (stockStatus == 1) return '宸查攣瀹�'
+      if (stockStatus == 0) return '鏈攣瀹�'
+    },
+    gettaskStatus(taskStatus) {
+      if (taskStatus == 1) return '浠诲姟涓�'
+      if (taskStatus == 0) return '鏃犱换鍔�'
+    }
   },
   mounted() {
-    var mainHeight = document.getElementById("vol-main");
-    this.mian_height = mainHeight.offsetHeight - 40 + "px";
-    var _this = this;
+    var mainHeight = document.getElementById('vol-main')
+    this.mian_height = mainHeight.offsetHeight - 40 + 'px'
+    var _this = this
     //鍔犺浇涓嬫媺閫夐」
-    this.http.get("/api/dt_AreaInfo/GetAreaInfo", {}, "鏌ヨ涓�").then((x) => {
-      console.log(x);
-      _this.slectData = x;
+    this.http.get('/api/dt_AreaInfo/GetAreaInfo', {}, '鏌ヨ涓�').then((x) => {
+      console.log(x)
+      _this.slectData = x
       //鍔犺浇绗竴涓尯鍩燂紝绗竴鎺�
-      _this.Area.areaCode = _this.slectData[0].areaCode;
+      _this.Area.areaCode = _this.slectData[0].areaCode
       //_this.scList = _this.slectData[0].tunnel;
-    });
+    })
   },
-  components: { ElButton },
-};
+  components: { ElButton }
+}
 </script>
 
 <style scoped>
@@ -330,23 +439,167 @@
   position: fixed;
   z-index: 9999;
   background-color: white;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  padding: 10px;
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+  border: 1px solid #e4e7ed;
+  border-radius: 8px;
+  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
   pointer-events: none;
-  max-width: 250px;
+  max-width: 320px;
+  min-width: 280px;
+  overflow: hidden;
 }
 
-.location-tooltip p {
-  margin: 5px 0;
+.tooltip-content {
+  display: flex;
+  flex-direction: column;
+}
+
+.tooltip-header {
+  padding: 12px 16px;
+  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+  color: white;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.tooltip-header h4 {
+  margin: 0;
+  font-size: 15px;
+  font-weight: 600;
+}
+
+.status-badge {
+  padding: 4px 10px;
+  border-radius: 12px;
+  font-size: 12px;
+  font-weight: 500;
+  background-color: rgba(255, 255, 255, 0.2);
+  backdrop-filter: blur(4px);
+}
+
+.status-empty {
+  background-color: rgba(144, 238, 144, 0.9);
+}
+
+.status-locked {
+  background-color: rgba(43, 179, 213, 0.9);
+}
+
+.status-locked-with-stock {
+  background-color: rgba(255, 165, 0, 0.9);
+}
+
+.status-locked-empty {
+  background-color: rgba(255, 182, 193, 0.9);
+}
+
+.status-with-stock {
+  background-color: rgba(255, 99, 71, 0.9);
+}
+
+.status-other {
+  background-color: rgba(153, 153, 153, 0.9);
+}
+
+.tooltip-body {
+  padding: 16px;
+}
+
+.info-section {
+  margin-bottom: 16px;
+}
+
+.info-section:last-child {
+  margin-bottom: 0;
+}
+
+.info-section h5 {
+  margin: 0 0 10px 0;
   font-size: 13px;
-  line-height: 1.4;
+  color: #909399;
+  text-transform: uppercase;
+  letter-spacing: 0.5px;
+  padding-bottom: 6px;
+  border-bottom: 1px solid #ebeef5;
 }
 
-.location-tooltip strong {
-  display: inline-block;
-  width: 70px;
-  color: #666;
+.info-row {
+  display: flex;
+  margin-bottom: 8px;
+  align-items: center;
 }
-</style>
\ No newline at end of file
+
+.info-row:last-child {
+  margin-bottom: 0;
+}
+
+.info-row .label {
+  flex-shrink: 0;
+  width: 100px;
+  color: #606266;
+  font-size: 13px;
+}
+
+.info-row .value {
+  flex: 1;
+  color: #303133;
+  font-size: 13px;
+  word-break: break-all;
+}
+
+.info-row .value.disabled {
+  color: #f56c6c;
+  font-weight: 500;
+  background-color: #fef0f0;
+  padding: 2px 8px;
+  border-radius: 4px;
+}
+
+.info-row .value.status-highlight {
+  font-weight: 600;
+  padding: 2px 8px;
+  border-radius: 4px;
+}
+
+.status-highlight.status-empty {
+  color: #67c23a;
+  background-color: #f0f9ff;
+}
+
+.status-highlight.status-locked {
+  color: #409eff;
+  background-color: #ecf5ff;
+}
+
+.status-highlight.status-locked-with-stock {
+  color: #e6a23c;
+  background-color: #fdf6ec;
+}
+
+.status-highlight.status-locked-empty {
+  color: #f56c6c;
+  background-color: #fef0f0;
+}
+
+.status-highlight.status-with-stock {
+  color: #67c23a;
+  background-color: #f0f9ff;
+}
+
+.status-highlight.status-other {
+  color: #909399;
+  background-color: #f4f4f5;
+}
+
+/* 娣诲姞杩囨浮鍔ㄧ敾 */
+.tooltip-fade-enter-active,
+.tooltip-fade-leave-active {
+  transition: opacity 0.2s, transform 0.2s;
+}
+
+.tooltip-fade-enter-from,
+.tooltip-fade-leave-to {
+  opacity: 0;
+  transform: translateY(5px);
+}
+</style>
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Enums/StockEnum.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Enums/StockEnum.cs"
new file mode 100644
index 0000000..45271a1
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Core/Enums/StockEnum.cs"
@@ -0,0 +1,30 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_Core.Enums
+{
+    public enum StockChangeType
+    {
+        /// <summary>
+        /// 鍏ュ簱
+        /// </summary>
+        [Description("鍏ュ簱")]
+        Inbound,
+
+        /// <summary>
+        /// 鍑哄簱
+        /// </summary>
+        [Description("鍑哄簱")]
+        Outbound,
+
+        /// <summary>
+        /// 鎵嬪姩璋冩暣
+        /// </summary>
+        [Description("鎵嬪姩璋冩暣")]
+        ManualAdjust,
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_DTO/Basic/MesLockDTO.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_DTO/Basic/MesLockDTO.cs"
new file mode 100644
index 0000000..e272f36
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_DTO/Basic/MesLockDTO.cs"
@@ -0,0 +1,16 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace WIDESEA_DTO.Basic
+{
+    public class MesLockDTO
+    {
+        public string pvi { get; set; }
+        public string vehicleCharacteristic { get; set; }
+        public string carBodyCharacteristic { get; set; }
+        public int lockStatue { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/LocationAreaView/LocationView.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_DTO/Location/LocationView.cs"
similarity index 89%
rename from "\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/LocationAreaView/LocationView.cs"
rename to "\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_DTO/Location/LocationView.cs"
index 88ef6a5..3835b75 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Common/LocationAreaView/LocationView.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_DTO/Location/LocationView.cs"
@@ -3,14 +3,15 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Model.Models;
 
-namespace WIDESEA_Common
+namespace WIDESEA_DTO.Location
 {
     public class LocationLayer
     {
         public int index { get; set; }
 
-     
+
 
         /// <summary>
         /// 
@@ -45,5 +46,8 @@
         /// 閿佸畾鐘舵��
         /// </summary>
         public string location_lock { get; set; }
+
+        public VV_StockInfo stockInfo { get; set; }
     }
+
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicRepository/BasicInfo/IDt_PassPointRecordRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicRepository/BasicInfo/IDt_PassPointRecordRepository.cs"
new file mode 100644
index 0000000..4efbf50
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicRepository/BasicInfo/IDt_PassPointRecordRepository.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IRecordRepository
+{
+    public interface IDt_PassPointRecordRepository : IRepository<Dt_PassPointRecord>
+    {
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockQuantityChangeRecordRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockQuantityChangeRecordRepository.cs"
new file mode 100644
index 0000000..06425ee
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicRepository/Stock/IStockQuantityChangeRecordRepository.cs"
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IStorageBasicRepository
+{
+    public interface IStockQuantityChangeRecordRepository : IRepository<Dt_StockQuantityChangeRecord>
+    {
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/BasicInfo/IDt_PassPointRecordService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/BasicInfo/IDt_PassPointRecordService.cs"
new file mode 100644
index 0000000..0f5ad1e
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/BasicInfo/IDt_PassPointRecordService.cs"
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_DTO;
+using WIDESEA_IRecordRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IRecordService
+{
+    public interface IDt_PassPointRecordService : IService<Dt_PassPointRecord>
+    {
+        void AddPassPointRecord(PassPointInfo info, RequestTaskDto request);
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IStockQuantityChangeRecordService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IStockQuantityChangeRecordService.cs"
new file mode 100644
index 0000000..00fc42f
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IStockQuantityChangeRecordService.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_IRecordRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IStorageBasicService
+{
+    public interface IStockQuantityChangeRecordService : IService<Dt_StockQuantityChangeRecord>
+    {
+
+        void AddStockChangeRecord(VV_StockInfo stockInfo, StockChangeType changeType, int taskNum);
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_MesLockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_MesLockInfoService.cs"
index 00c5a6e..d8b38c7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_MesLockInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_MesLockInfoService.cs"
@@ -2,4 +2,7 @@
 
 public interface IVV_MesLockInfoService : IService<VV_MesLockInfo>
 {
+    WebResponseContent GetMesLockInfo();
+
+    WebResponseContent GetStockInfo(string PVI);
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_StockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_StockInfoService.cs"
index c117742..fbeb73e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_StockInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_IStorageBasicService/Stock/IVV_StockInfoService.cs"
@@ -5,4 +5,5 @@
     WebResponseContent stockLock(object[] keys);
 
     WebResponseContent stockUnLock(object[] keys);
+
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_PassPointRecord.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_PassPointRecord.cs"
new file mode 100644
index 0000000..87d62d0
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_PassPointRecord.cs"
@@ -0,0 +1,72 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable(nameof(Dt_PassPointRecord), "MES杩囩偣璁板綍")]
+    public class Dt_PassPointRecord : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "涓婚敭")]
+        [ExporterHeader(DisplayName = "涓婚敭")]
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// PVI鐮�
+        /// </summary>
+        [ImporterHeader(Name = "PVI鐮�")]
+        [ExporterHeader(DisplayName = "PVI鐮�")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "PVI鐮�")]
+        public string PVI { get; set; }
+
+        /// <summary>
+        /// 婊戞﹪鍙�
+        /// </summary>
+        [ImporterHeader(Name = "婊戞﹪鍙�")]
+        [ExporterHeader(DisplayName = "婊戞﹪鍙�")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "婊戞﹪鍙�")]
+        public string PalletCode { get; set; }
+
+        [ImporterHeader(Name = "鐐逛綅")]
+        [ExporterHeader(DisplayName = "鐐逛綅")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐐逛綅")]
+        public string Position { get; set; }
+
+        [ImporterHeader(Name = "绾垮彿")]
+        [ExporterHeader(DisplayName = "绾垮彿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绾垮彿")]
+        public string lineCode { get; set; }
+
+        [ImporterHeader(Name = "绾垮彿")]
+        [ExporterHeader(DisplayName = "绾垮彿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "绾垮彿")]
+        public string Content { get; set; }
+
+        [ImporterHeader(Name = "杩囩偣鏃堕棿")]
+        [ExporterHeader(DisplayName = "杩囩偣鏃堕棿")]
+        [SugarColumn(IsNullable = false, ColumnDescription = "杩囩偣鏃堕棿")]
+        public DateTime PassPointTime { get; set; }
+
+        
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囩敤")]
+        public string Spare1 { get; set; }
+
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囩敤")]
+        public string Spare2 { get; set; }
+
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囩敤")]
+        public string Spare3 { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_StockQuantityChangeRecord.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_StockQuantityChangeRecord.cs"
new file mode 100644
index 0000000..63c9d32
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_Model/Models/BasicModel/Dt_StockQuantityChangeRecord.cs"
@@ -0,0 +1,162 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable(nameof(Dt_StockQuantityChangeRecord), "搴撳瓨鍙樺姩淇℃伅璁板綍")]
+    public class Dt_StockQuantityChangeRecord : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [ImporterHeader(Name = "涓婚敭")]
+        [ExporterHeader(DisplayName = "涓婚敭")]
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 鎵�灞炲贩閬�
+        /// </summary>
+        [ImporterHeader(Name = "鎵�灞炲贩閬�")]
+        [ExporterHeader(DisplayName = "鎵�灞炲贩閬�")]
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "鎵�灞炲贩閬�")]
+        public string RoadwayNo { get; set; }
+
+        /// <summary>
+        /// 璐т綅缂栧彿
+        /// </summary>
+        [ImporterHeader(Name = "璐т綅缂栧彿")]
+        [ExporterHeader(DisplayName = "璐т綅缂栧彿")]
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "璐т綅缂栧彿")]
+        public string LocationCode { get; set; }
+
+        /// <summary>
+        /// 杞﹁韩ID
+        /// </summary>
+        [ImporterHeader(Name = "杞﹁韩ID")]
+        [ExporterHeader(DisplayName = "杞﹁韩ID")]
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "杞﹁韩ID")]
+        public int carBodyID { get; set; }
+        /// <summary>
+        /// PVI鐮�
+        /// </summary>
+        [ImporterHeader(Name = "PVI鐮�")]
+        [ExporterHeader(DisplayName = "PVI鐮�")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "PVI鐮�")]
+        public string PVI { get; set; }
+
+        /// <summary>
+        /// 婊戞﹪鍙�
+        /// </summary>
+        [ImporterHeader(Name = "婊戞﹪鍙�")]
+        [ExporterHeader(DisplayName = "婊戞﹪鍙�")]
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "婊戞﹪鍙�")]
+        public string PalletCode { get; set; }
+
+        /// <summary>
+        /// 杞﹀瀷
+        /// </summary>
+        [ImporterHeader(Name = "杞﹀瀷")]
+        [ExporterHeader(DisplayName = "杞﹀瀷")]
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "杞﹀瀷")]
+        public string vehicleCharacteristic { get; set; }
+
+        /// <summary> 
+        /// 杞﹁韩绫诲瀷  1-鐧� 2-褰� 3-绌烘粦姗� 
+        /// </summary>
+        [ImporterHeader(Name = "杞﹁韩绫诲瀷")]
+        [ExporterHeader(DisplayName = "杞﹁韩绫诲瀷")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "杞﹁韩绫诲瀷")]
+        public int CarType { get; set; }
+
+        /// <summary>
+        /// 璁㈠崟绫诲瀷
+        /// </summary>
+        [ImporterHeader(Name = "璁㈠崟绫诲瀷")]
+        [ExporterHeader(DisplayName = "璁㈠崟绫诲瀷")]
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "璁㈠崟绫诲瀷")]
+        public string workOrderType { get; set; }
+
+        /// <summary>
+        /// 澶╃獥鐗瑰緛
+        /// </summary>
+        [ImporterHeader(Name = "澶╃獥鐗瑰緛")]
+        [ExporterHeader(DisplayName = "澶╃獥鐗瑰緛")]
+        [SugarColumn(IsNullable = true, Length = 40, ColumnDescription = "澶╃獥鐗瑰緛")]
+        public string skylightCharacteristic { get; set; }
+
+        /// <summary>
+        /// 杞﹁韩棰滆壊
+        /// </summary>
+        [ImporterHeader(Name = "杞﹁韩棰滆壊")]
+        [ExporterHeader(DisplayName = "杞﹁韩棰滆壊")]
+        [SugarColumn(IsNullable = true, Length = 20, ColumnDescription = "杞﹁韩棰滆壊")]
+        public string carBodyCharacteristic { get; set; }
+
+        /// <summary>
+        /// 鐧借溅韬墿鏂欏彿
+        /// </summary>
+        [ImporterHeader(Name = "鐧借溅韬墿鏂欏彿")]
+        [ExporterHeader(DisplayName = "鐧借溅韬墿鏂欏彿")]
+        [SugarColumn(IsNullable = true, Length = 40, ColumnDescription = "鐧借溅韬墿鏂欏彿")]
+        public string biwMaterialCode { get; set; }
+
+        /// <summary>
+        /// 褰╄溅韬墿鏂欏彿
+        /// </summary>
+        [ImporterHeader(Name = "褰╄溅韬墿鏂欏彿")]
+        [ExporterHeader(DisplayName = "褰╄溅韬墿鏂欏彿")]
+        [SugarColumn(IsNullable = true, Length = 40, ColumnDescription = "褰╄溅韬墿鏂欏彿")]
+        public string pbMaterial { get; set; }
+
+        /// <summary>
+        /// 鐒婅涓婄嚎鏃堕棿
+        /// </summary>
+        [ImporterHeader(Name = "鐒婅涓婄嚎鏃堕棿")]
+        [ExporterHeader(DisplayName = "鐒婅涓婄嚎鏃堕棿")]
+        [SugarColumn(IsNullable = true, Length = 40, ColumnDescription = "鐒婅涓婄嚎鏃堕棿")]
+        public DateTime? biwInPassTime { get; set; }
+
+        /// <summary>
+        /// 淇濈暀鐘舵��
+        /// </summary>
+        [ImporterHeader(Name = "淇濈暀鐘舵��")]
+        [ExporterHeader(DisplayName = "淇濈暀鐘舵��")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "淇濈暀鐘舵��")]
+        public int StayStatus { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨Id")]
+        public int StockId { get; set; }
+
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "浠诲姟鍙�")]
+        public int? TaskNum { get; set; }
+
+        /// <summary>
+        /// 鍙樻洿绫诲瀷
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍙樺姩绫诲瀷锛堝嚭搴撱�佸叆搴撱�佹墜鍔ㄨ皟鏁�...锛�")]
+        public int ChangeType { get; set; }
+
+        
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囩敤")]
+        public string Spare1 { get; set; }
+
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囩敤")]
+        public string Spare2 { get; set; }
+
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囩敤")]
+        public string Spare3 { get; set; }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs"
index fd48056..c5bbd8d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/MESService.cs"
@@ -6,6 +6,8 @@
 using System.Threading.Tasks;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_IBusinessesRepository;
+using WIDESEA_IRecordRepository;
+using WIDESEA_IRecordService;
 using WIDESEA_IServices;
 using WIDESEA_IStorageBasicRepository;
 using WIDESEA_IStorageOutOrderRepository;
@@ -34,8 +36,10 @@
         private readonly IDt_PaintingOrderInfoRepository _paintingOrderInfoRepository;
         private readonly IVV_StockInfoRepository _VVStockInfoRepository;
         private readonly IDt_MESLockInfoRepository _MESLockInfoRepository;
+        private readonly IDt_PassPointRecordRepository _passPointRecordRepository;
+        private readonly IDt_PassPointRecordService _passPointRecordService;
 
-        public MESService(ILocationInfoRepository locationRepository, IDt_TaskRepository taskRepository, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository, IDt_AreaInfoRepository dt_AreaInfoRepository, IDt_PalletInfoRepository palletInfoRepository, IDt_PalletStockInfoRepository palletStockInfoRepository, IDt_OutOrderRepository OutOrderRepository, IUnitOfWorkManage unitOfWorkManage, IDt_CarBodyInfoRepository carBodyRepository, IDt_AssemblyOrderInfoRepository assemblyOrderInfoRepository, IDt_PaintingOrderInfoRepository paintingOrderInfoRepository, IVV_StockInfoRepository VVStockInfoRepository, IDt_MESLockInfoRepository mESLockInfoRepository)
+        public MESService(ILocationInfoRepository locationRepository, IDt_TaskRepository taskRepository, ISys_ConfigService configService, IDt_StationManagerRepository stationManagerRepository, IDt_AreaInfoRepository dt_AreaInfoRepository, IDt_PalletInfoRepository palletInfoRepository, IDt_PalletStockInfoRepository palletStockInfoRepository, IDt_OutOrderRepository OutOrderRepository, IUnitOfWorkManage unitOfWorkManage, IDt_CarBodyInfoRepository carBodyRepository, IDt_AssemblyOrderInfoRepository assemblyOrderInfoRepository, IDt_PaintingOrderInfoRepository paintingOrderInfoRepository, IVV_StockInfoRepository VVStockInfoRepository, IDt_MESLockInfoRepository mESLockInfoRepository,IDt_PassPointRecordRepository passPointRecordRepository, IDt_PassPointRecordService passPointRecordService)
         {
             _locationRepository = locationRepository;
             _taskRepository = taskRepository;
@@ -51,6 +55,8 @@
             _paintingOrderInfoRepository = paintingOrderInfoRepository;
             _VVStockInfoRepository = VVStockInfoRepository;
             _MESLockInfoRepository = mESLockInfoRepository;
+            _passPointRecordRepository = passPointRecordRepository;
+            _passPointRecordService = passPointRecordService;
         }
 
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs"
index f116670..f959852 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StoragIntegrationServices/MES/Partial/PassPoint.cs"
@@ -5,6 +5,8 @@
 using WIDESEA_Core.Const;
 using WIDESEA_Core.Helper;
 using WIDESEA_DTO;
+using WIDESEA_Model.Models;
+using WIDESEA_RecordService;
 using WIDESEA_StorageBasicRepository;
 
 namespace WIDESEA_StoragIntegrationServices
@@ -54,6 +56,9 @@
                     pass_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                 };
 
+                //璁板綍璇锋眰MES杩囩偣淇℃伅
+                _passPointRecordService.AddPassPointRecord(passPoint, json);
+
                 var MESrespon = HttpHelper.PostAsync(wmsIpAddress, passPoint.ToJson(), contentType, headers).Result;
 
                 MesResponse responseContent = JsonConvert.DeserializeObject<MesResponse>(MESrespon.ToString());
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicRepository/BasicInfo/Dt_PassPointRecordRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicRepository/BasicInfo/Dt_PassPointRecordRepository.cs"
new file mode 100644
index 0000000..1169b9e
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicRepository/BasicInfo/Dt_PassPointRecordRepository.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_IRecordRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_RecordRepository
+{
+    public class Dt_PassPointRecordRepository : RepositoryBase<Dt_PassPointRecord>, IDt_PassPointRecordRepository
+    {
+        public Dt_PassPointRecordRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
+        {
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicRepository/Stock/StockQuantityChangeRecordRepository.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicRepository/Stock/StockQuantityChangeRecordRepository.cs"
new file mode 100644
index 0000000..aeaddf9
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicRepository/Stock/StockQuantityChangeRecordRepository.cs"
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_IRecordRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_StorageBasicRepository
+{
+    public class StockQuantityChangeRecordRepository : RepositoryBase<Dt_StockQuantityChangeRecord>, IStockQuantityChangeRecordRepository
+    {
+        public StockQuantityChangeRecordRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
+        {
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_PassPointRecordService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_PassPointRecordService.cs"
new file mode 100644
index 0000000..4154459
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/BasicInfo/Dt_PassPointRecordService.cs"
@@ -0,0 +1,49 @@
+锘縰sing AutoMapper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO;
+using WIDESEA_IRecordRepository;
+using WIDESEA_IRecordService;
+using WIDESEA_Model.Models;
+using WIDESEA_RecordRepository;
+
+namespace WIDESEA_RecordService
+{
+    public partial class Dt_PassPointRecordService : ServiceBase<Dt_PassPointRecord, IDt_PassPointRecordRepository>, IDt_PassPointRecordService
+    {
+        private readonly IMapper _mapper;
+        public Dt_PassPointRecordService(IDt_PassPointRecordRepository BaseDal, IMapper mapper) : base(BaseDal)
+        {
+            _mapper = mapper;
+        }
+
+        public void AddPassPointRecord(PassPointInfo info, RequestTaskDto json)
+        {
+            try
+            {
+                Dt_PassPointRecord record = new Dt_PassPointRecord()
+                {
+                    Content = info.Serialize(),
+                    Position = json.Position,
+                    PalletCode = json.PalletCode,
+                    PVI = json.PVI,
+                    lineCode = info.line_code,
+                    PassPointTime = DateTime.Now
+                };
+                BaseDal.AddData(record);
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+
+            }
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Location/LocationInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Location/LocationInfoService.cs"
index d44d961..5f125f1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Location/LocationInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Location/LocationInfoService.cs"
@@ -9,6 +9,7 @@
 using WIDESEA_Core;
 using WIDESEA_Core.HttpContextUser;
 using WIDESEA_DTO;
+using WIDESEA_DTO.Location;
 using WIDESEA_Model.Models;
 
 namespace WIDESEA_StorageBasicService;
@@ -26,6 +27,7 @@
     private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository;
     private readonly IMapper _mapper;
     private readonly IDt_PalletStockInfoRepository _palletStockInfoRepository;
+    private readonly IVV_StockInfoRepository _stockrepository;
 
     public LocationInfoService(ILocationInfoRepository BaseDal,
                                     IUnitOfWorkManage unitOfWorkManage,
@@ -37,7 +39,8 @@
                                     IStockInfoDetailRepository stockInfoDetailRepository,
                                     IMapper mapper,
                                     IDt_TaskService taskService,
-                                    IDt_PalletStockInfoRepository palletStockInfoRepository) : base(BaseDal)
+                                    IDt_PalletStockInfoRepository palletStockInfoRepository,
+                                    IVV_StockInfoRepository stockrepository) : base(BaseDal)
     {
         _unitOfWorkManage = unitOfWorkManage;
         _taskRepository = taskRepository;
@@ -49,6 +52,7 @@
         _mapper = mapper;
         _taskService = taskService;
         _palletStockInfoRepository = palletStockInfoRepository;
+        _stockrepository = stockrepository;
     }
 
 
@@ -263,6 +267,8 @@
     {
         var data = BaseDal.QueryData(x => x.AreaId == Convert.ToInt32(area.areaCode));
 
+        List<VV_StockInfo> stockInfos = _stockrepository.QueryData(x => true);
+
         List<LocationLayer> layers = new List<LocationLayer>();
         foreach (var layer in data.GroupBy(t => t.Layer))
         {
@@ -273,6 +279,8 @@
                 var cols = new List<LocationCol>();
                 foreach (var data_col in data_row)
                 {
+                    var stock = stockInfos.FirstOrDefault(x => x.LocationCode == data_col.LocationCode);
+                    
                     cols.Add(new LocationCol()
                     {
                         //鍒�
@@ -280,6 +288,7 @@
                         locationCode = data_col.LocationCode,
                         location_state = data_col.LocationStatus.ToString(),
                         location_lock = data_col.EnalbeStatus.ToString(),
+                        stockInfo = stock
                     });
                 }
                 cols = cols.OrderBy(t => t.index).ToList();
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/StockQuantityChangeRecordService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/StockQuantityChangeRecordService.cs"
new file mode 100644
index 0000000..5e69f7f
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/StockQuantityChangeRecordService.cs"
@@ -0,0 +1,40 @@
+锘縰sing AutoMapper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_IRecordRepository;
+using WIDESEA_IRecordService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_StorageBasicService
+{
+    public partial class StockQuantityChangeRecordService : ServiceBase<Dt_StockQuantityChangeRecord, IStockQuantityChangeRecordRepository>, IStockQuantityChangeRecordService
+    {
+        private readonly IMapper _mapper;
+        public StockQuantityChangeRecordService(IStockQuantityChangeRecordRepository BaseDal, IMapper mapper) : base(BaseDal)
+        {
+            _mapper = mapper;
+        }
+
+        public void AddStockChangeRecord(VV_StockInfo stockInfo,  StockChangeType changeType,int taskNum)
+        {
+			try
+			{
+                Dt_StockQuantityChangeRecord stockQuantityChangeRecords = new Dt_StockQuantityChangeRecord();
+                stockQuantityChangeRecords = _mapper.Map<Dt_StockQuantityChangeRecord>(stockInfo);
+                stockQuantityChangeRecords.TaskNum = taskNum;
+                stockQuantityChangeRecords.ChangeType = Convert.ToInt32(changeType);
+                BaseDal.AddData(stockQuantityChangeRecords);
+            }
+			catch (Exception ex)
+			{
+				throw new Exception(ex.Message);
+			}
+        }
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_MesLockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_MesLockInfoService.cs"
index 5d007f0..245f1c5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_MesLockInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_MesLockInfoService.cs"
@@ -6,13 +6,67 @@
 using System.Drawing.Printing;
 using System.Linq.Expressions;
 using WIDESEA_Core;
+using WIDESEA_DTO.Basic;
 
 namespace WIDESEA_StorageBasicService;
 
 public class VV_MesLockInfoService : ServiceBase<VV_MesLockInfo, IVV_MesLockInfoRepository>, IVV_MesLockInfoService
 {
-    public VV_MesLockInfoService(IVV_MesLockInfoRepository BaseDal) : base(BaseDal)
+    private readonly IVV_StockInfoRepository _stockInfoRepository;
+    public VV_MesLockInfoService(IVV_MesLockInfoRepository BaseDal, IVV_StockInfoRepository stockInfoRepository) : base(BaseDal)
     {
+        _stockInfoRepository = stockInfoRepository;
     }
 
+    public WebResponseContent GetMesLockInfo()
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            List<VV_MesLockInfo> mesLockInfos = BaseDal.QueryData(x => x.LockStatue == 1 || x.LockStatue == 0).OrderBy(x => x.sequenceNo).ToList();
+            List<VV_StockInfo> stockInfos = _stockInfoRepository.QueryData(x => x.CarType == 2).OrderBy(x => x.CreateDate).Take(50).ToList();
+            List<MesLockDTO> mesLockDTOs = new List<MesLockDTO>();
+            mesLockInfos.ForEach(x =>
+            {
+                mesLockDTOs.Add(new MesLockDTO
+                {
+                    lockStatue = x.LockStatue,
+                    pvi = x.PVI,
+                    vehicleCharacteristic = x.vehicleCharacteristic,
+                    carBodyCharacteristic = x.carBodyCharacteristic
+                });
+            });
+            stockInfos.ForEach(x =>
+            {
+                mesLockDTOs.Add(new MesLockDTO
+                {
+                    lockStatue = 2,
+                    pvi = x.PVI,
+                    vehicleCharacteristic = x.vehicleCharacteristic,
+                    carBodyCharacteristic = x.carBodyCharacteristic
+                });
+            });
+
+            return content.OK(data: mesLockDTOs);
+        }
+        catch (Exception ex)
+        {
+            return content.Error(ex.Message);
+        }
+    }
+
+    public WebResponseContent GetStockInfo(string PVI)
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            VV_StockInfo stockInfos = _stockInfoRepository.QueryFirst(x => x.PVI == PVI);
+
+            return content.OK(data: stockInfos);
+        }
+        catch (Exception ex)
+        {
+            return content.Error(ex.Message);
+        }
+    }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_StockInfoService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_StockInfoService.cs"
index 4e7c8c2..7c27119 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_StockInfoService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_StorageBasicServices/Stock/VV_StockInfoService.cs"
@@ -6,15 +6,18 @@
 using System.Drawing.Printing;
 using System.Linq.Expressions;
 using WIDESEA_Core;
+using WIDESEA_IRecordService;
 
 namespace WIDESEA_StorageBasicService;
 
 public class VV_StockInfoService : ServiceBase<VV_StockInfo, IVV_StockInfoRepository>, IVV_StockInfoService
 {
 	private readonly IDt_PalletStockInfoRepository _repository;
-    public VV_StockInfoService(IVV_StockInfoRepository BaseDal, IDt_PalletStockInfoRepository repository) : base(BaseDal)
+    private readonly IStockQuantityChangeRecordService _stockQuantityChangeRecord;
+    public VV_StockInfoService(IVV_StockInfoRepository BaseDal, IDt_PalletStockInfoRepository repository, IStockQuantityChangeRecordService stockQuantityChangeRecord) : base(BaseDal)
     {
         _repository = repository;
+        _stockQuantityChangeRecord = stockQuantityChangeRecord;
     }
 
     public WebResponseContent stockLock(object[] keys)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_PassPointRecordController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_PassPointRecordController.cs"
new file mode 100644
index 0000000..f174b55
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_PassPointRecordController.cs"
@@ -0,0 +1,23 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using WIDESEA_BusinessServices;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IBusinessServices;
+using WIDESEA_IRecordService;
+using WIDESEA_Model.Models;
+using WIDESEAWCS_BasicInfoService;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    [Route("api/Dt_PassPointRecord")]
+    [ApiController]
+    public class Dt_PassPointRecordController : ApiBaseController<IDt_PassPointRecordService, Dt_PassPointRecord>
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+        public Dt_PassPointRecordController(IDt_PassPointRecordService service, IHttpContextAccessor httpContextAccessor) : base(service)
+        {
+            _httpContextAccessor = httpContextAccessor;
+        }
+
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_StockQuantityChangeRecordController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_StockQuantityChangeRecordController.cs"
new file mode 100644
index 0000000..7a6bb7d
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/BasicInfo/Dt_StockQuantityChangeRecordController.cs"
@@ -0,0 +1,23 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using WIDESEA_BusinessServices;
+using WIDESEA_Core.BaseController;
+using WIDESEA_IBusinessServices;
+using WIDESEA_IRecordService;
+using WIDESEA_Model.Models;
+using WIDESEAWCS_BasicInfoService;
+using WIDESEAWCS_Model.Models;
+
+namespace WIDESEA_WMSServer.Controllers
+{
+    [Route("api/StockQuantityChangeRecord")]
+    [ApiController]
+    public class Dt_StockQuantityChangeRecordController : ApiBaseController<IStockQuantityChangeRecordService, Dt_PassPointRecord>
+    {
+        private readonly IHttpContextAccessor _httpContextAccessor;
+        public Dt_StockQuantityChangeRecordController(IStockQuantityChangeRecordService service, IHttpContextAccessor httpContextAccessor) : base(service)
+        {
+            _httpContextAccessor = httpContextAccessor;
+        }
+
+    }
+}
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_MesLockInfoController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_MesLockInfoController.cs"
index 3f33943..99c9a52 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_MesLockInfoController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_MesLockInfoController.cs"
@@ -11,4 +11,16 @@
     {
 
     }
+
+    [HttpGet,HttpPost,Route("GetMesLockInfo"),AllowAnonymous]
+    public WebResponseContent GetMesLockInfo()
+    {
+        return Service.GetMesLockInfo();
+    }
+
+    [HttpGet, HttpPost, Route("GetStockInfo"), AllowAnonymous]
+    public WebResponseContent GetStockInfo(string PVI)
+    {
+        return Service.GetStockInfo(PVI);
+    }
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_StockInfoController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_StockInfoController.cs"
index 3d8b7e9..83584b8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_StockInfoController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Controllers/Stock/VV_StockInfoController.cs"
@@ -31,5 +31,4 @@
     {
         return Service.stockUnLock(keys);
     }
-
 }
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs"
index c3d1570..09e5c2d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs"
@@ -21,6 +21,8 @@
             CreateMap<RegistrationDTO, Sys_CompanyRegistration>();
             CreateMap<Dt_OutOrderAndStock, Dt_OutOrderAndStock_Hty>();
             CreateMap<Dt_Task, Dt_Task_Hty>();
+            CreateMap<VV_StockInfo, Dt_StockQuantityChangeRecord>()
+                .ForMember(a => a.StockId, b => b.MapFrom(b => b.Id));
         }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/GlobalUsing.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/GlobalUsing.cs"
index 9fd4dd7..aa2f49c 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/GlobalUsing.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServer/WIDESEA_WMSServer/GlobalUsing.cs"
@@ -12,5 +12,4 @@
 global using WIDESEA_Model.Models.System;
 global using WIDESEA_Core.Authorization;
 global using WIDESEA_Core.Utilities;
-global using WIDESEA_Model;
-//global using WIDESEA_StorageBasicServices;
\ No newline at end of file
+global using WIDESEA_Model;
\ No newline at end of file

--
Gitblit v1.9.3