From 638a684258fb4bc6adf76a1964bdf0d7f99e404f Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 31 三月 2025 02:18:54 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn

---
 代码管理/WMS/WIDESEA_WMSClient/src/extension/stock/materielnfoStatistics.js                           |   59 +++
 代码管理/WMS/WIDESEA_WMSClient/src/router/viewGird.js                                                 |    5 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IMaterielnfoStatisticsService.cs                 |   17 +
 代码管理/WMS/WIDESEA_WMSClient/src/views/basic/materielInfo.vue                                       |  155 ++++++--
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs                          |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs                  |   10 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/MaterielnfoStatisticsDTO.cs                          |   66 +++
 代码管理/WMS/WIDESEA_WMSClient/src/views/stock/materielnfoStatistics.vue                              |  189 +++++++++++
 代码管理/WMS/WIDESEA_WMSClient/src/extension/basic/materielInfo.js                                    |  116 +++---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/MaterielnfoStatisticsController.cs |   55 +++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielTypeEnum.cs                        |   13 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/MaterielnfoStatisticsService.cs                   |  308 ++++++++++++++++++
 12 files changed, 891 insertions(+), 104 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/materielInfo.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/materielInfo.js"
index 24e1d94..7e986ec 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/materielInfo.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/materielInfo.js"
@@ -2,57 +2,71 @@
 //姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
 
 let extension = {
-    components: {
-      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
-      gridHeader: '',
-      gridBody: '',
-      gridFooter: '',
-      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
-      modelHeader: '',
-      modelBody: '',
-      modelFooter: ''
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: '',
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+    //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {
     },
-    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
-    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
-    methods: {
-       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
-      onInit() {  
-      },
-      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)
+    onInited() {
+      //妗嗘灦鍒濆鍖栭厤缃悗
+      //濡傛灉瑕侀厤缃槑缁嗚〃,鍦ㄦ鏂规硶鎿嶄綔
+      //this.detailOptions.columns.forEach(column=>{ });
+    },
+    searchBefore(param) {
+      //鐣岄潰鏌ヨ鍓�,鍙互缁檖aram.wheres娣诲姞鏌ヨ鍙傛暟
+      //杩斿洖false锛屽垯涓嶄細鎵ц鏌ヨ
+      return true;
+    },
+    searchAfter(result) {
+      //鏌ヨ鍚庯紝result杩斿洖鐨勬煡璇㈡暟鎹�,鍙互鍦ㄦ樉绀哄埌琛ㄦ牸鍓嶅鐞嗚〃鏍肩殑鍊�
+      // if (Array.isArray(result)) {
+      //   result.forEach(item => {
+      //     if (item.hasOwnProperty('isCheck')) {
+      //       item.isCheck = item.isCheck === 'True' ? '鏄�' : '鍚�';
+      //     }
+      //     if (item.hasOwnProperty('materielState')) {
+      //       item.materielState = item.materielState === 'Enable' ? '鍚敤' : '绂佺敤'
+      //     }
+      //   });
+      // }
+      return result;
+
+    },
+    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)
+      let isAdd = this.currentAction == 'Add'
+      if (isAdd) {
+        this.editFormFields.materielInvOrgId = '娣畨鐗瑰垱浜屽巶'
       }
     }
-  };
-  export default extension;
-  
\ No newline at end of file
+  }
+};
+export default extension;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/materielnfoStatistics.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/materielnfoStatistics.js"
new file mode 100644
index 0000000..6292426
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/stock/materielnfoStatistics.js"
@@ -0,0 +1,59 @@
+
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+
+let extension = {
+    components: {
+      //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+      gridHeader: '',
+      gridBody: '',
+      gridFooter: '',
+      //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+      modelHeader: '',
+      modelBody: '',
+      modelFooter: ''
+    },
+    tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+    buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+    methods: {
+       //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+      onInit() {  
+        
+      },
+      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;
+  
\ No newline at end of file
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/router/viewGird.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/router/viewGird.js"
index 490795d..4c8f700 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/router/viewGird.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/router/viewGird.js"
@@ -78,6 +78,11 @@
     path: '/outStockLockInfo',
     name: 'outStockLockInfo',
     component: () => import('@/views/outbound/outStockLockInfo.vue')
+  },
+  {
+    path: '/materielnfoStatistics',
+    name: 'materielnfoStatistics',
+    component: () => import('@/views/stock/materielnfoStatistics.vue')
   },{
     path: '/stockInfo',
     name: 'stockInfo',
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/materielInfo.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/materielInfo.vue"
index aaacaa0..97ab61e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/materielInfo.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/basic/materielInfo.vue"
@@ -38,9 +38,11 @@
       [
         {
           title: "浠撳簱",
-          required: true,
           field: "warehouseId",
-          type: "string",
+          type: "select",
+          dataKey: "warehouses",
+          data: [],
+          required: true,
         },
         {
           title: "鐗╂枡缂栧彿",
@@ -48,27 +50,74 @@
           field: "materielCode",
           type: "string",
         },
-        {
+      ],
+      [
+         {
           title: "鐗╂枡鍚嶇О",
           required: true,
           field: "materielName",
           type: "string",
         },
         {
-          title: "璁¢噺鍗曚綅",
+          title: "鐗╂枡瑙勬牸",
           required: true,
-          field: "unit",
+          field: "materielSpec",
           type: "string",
         },
       ],
       [
-        
-        {
-          title: "鐗╂枡鎻忚堪",
-          field: "materielDes",
-          type: "textarea",
+       {
+          title: "鐗╂枡鍩烘湰鍒嗙被",
+          required: true,
+          field: "materielType",
+          type: "select",
+          dataKey:"materielTypeEnum",
+          data:[]
+          
         },
+        {
+        field: "materielSourceType",
+        title: "鐗╂枡灞炴�у垎绫�",
+        required: true,
+        type: "select",
+        dataKey:"materielSourceTypeEnum",
+        data:[]
+      },  
       ],
+      [
+        {
+          title: "鍩烘湰鍗曚綅",
+          required: true,
+          field: "materielUnit",
+          type: "string",
+        },
+        {
+          title: "鐗╂枡鐘舵��",
+          required: true,
+          field: "materielState",
+          type: "select",
+          dataKey:"enableEnum",
+          data:[]
+        },
+        
+      ],
+      [
+        {
+          title: "搴撳瓨缁勭粐",
+          required: true,
+          field: "materielInvOrgId",
+          type: "string",
+        },
+        {
+          title: "鏄惁闇�瑕佽川妫�",
+          required: true,
+          field: "isCheck",
+          type: "select",
+          dataKey:"yesno",
+          data:[]
+        },
+      ]
+      
     ]);
     const searchFormFields = ref({
       materielCode: "",
@@ -78,6 +127,7 @@
       [
         { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
         { title: "鐗╂枡鍚嶇О", field: "materielName", type: "like" },
+        {title: "鎵�灞炰粨搴�", field:"warehouseId",type:"select",dataKey:"warehouses",data:[]}
       ],
     ]);
     const columns = ref([
@@ -114,57 +164,78 @@
         align: "left",
       },
       {
-        field: "materielDes",
-        title: "鐗╂枡鎻忚堪",
-        type: "decimal",
-        width: 90,
-        align: "left",
-      },
-      {
-        field: "cotainerType",
-        title: "瀹瑰櫒绫诲瀷",
+        field: "materielSpec",
+        title: "鐗╂枡瑙勬牸",
         type: "string",
-        width: 90,
+        width: 240,
         align: "left",
-        hidden:true
       },
       {
-        field: "packspes",
-        title: "鍖呰瑙勬牸",
-        type: "int",
+        field: "materielSourceType",
+        title: "鐗╂枡灞炴�у垎绫�",
+        type: "string",
         width: 120,
         align: "left",
-        hidden:true
+        bind: { key: "materielSourceTypeEnum", data: [] },
       },
       {
-        field: "attribute",
-        title: "鐗╂枡灞炴��",
+        field: "materielType",
+        title: "鐗╂枡鍩烘湰鍒嗙被",
         type: "string",
-        width: 200,
+        width: 120,
         align: "left",
-        hidden:true
+    
       },
       {
-        field: "unit",
-        title: "璁¢噺鍗曚綅",
+        field: "materielUnit",
+        title: "鍩烘湰鍗曚綅",
         type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "materielSize",
+        title: "鐗╂枡灏哄",
+        type: "float",
         width: 180,
         align: "left",
       },
       {
-        field: "validity",
-        title: "鏈夋晥鏈�",
-        type: "string",
+        field: "materielLength",
+        title: "鐗╂枡闀垮害",
+        type: "float",
         width: 120,
         align: "left",
       },
       {
-        field: "safetyStock",
-        title: "瀹夊叏搴撳瓨",
-        type: "string",
+        field: "materielThickness",
+        title: "鐗╂枡鍘氬害",
+        type: "float",
         width: 120,
         align: "left",
-        hidden:true
+      },
+      {
+        field: "materielState",
+        title: "鐗╂枡鐘舵��",
+        type: "select",
+        width: 100,
+        bind:{key:"",data: [{key:'Enable',value:'鍚敤'},{key:'Disable',value:'绂佺敤'}] },
+        align: "left",
+      },
+      {
+        field: "materielInvOrgId",
+        title: "搴撳瓨缁勭粐",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "isCheck",
+        title: "鏄惁闇�瑕佽川妫�",
+        type: "int",
+        bind:{key:"",data: [{key:'False',value:'鍚�'},{key:'True',value:'鏄�'}] },
+        width: 100,
+        align: "left",
       },
       {
         field: "creater",
@@ -196,13 +267,7 @@
         align: "left",
         hidden:true
       },
-      {
-        field: "remark",
-        title: "澶囨敞",
-        type: "string",
-        width: 100,
-        align: "left",
-      },
+      
     ]);
     const detail = ref({
       cnName: "#detailCnName",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/materielnfoStatistics.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/materielnfoStatistics.vue"
new file mode 100644
index 0000000..c50070b
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/materielnfoStatistics.vue"
@@ -0,0 +1,189 @@
+<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/stock/materielnfoStatistics.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "stockId",
+      footer: "Foots",
+      cnName: "鐗╂枡鍒嗙被缁熻",
+      name: "materielnfoStatistics",
+      url: "/materielnfoStatistics/",
+      sortName: "stockId",
+    });
+    const editFormFields = ref({
+      deviceCode: "",
+      deviceName: "",
+      deviceType: "",
+      deviceStatus: "",
+      deviceIp: "",
+      devicePort: "",
+      devicePlcType: "",
+      deviceRemark: "",
+    });
+    const editFormOptions = ref([
+      [
+        {
+          title: "鐗╂枡缂栧彿",
+          required: true,
+          field: "materielCode",
+          type: "string",
+        },
+        {
+          title: "鍗曟嵁缂栧彿",
+          required: true,
+          field: "materielName",
+          type: "string",
+        },
+        {
+          title: "鎵规鍙�",
+          required: true,
+          field: "orderNo",
+          type: "string",
+        },
+        {
+          title: "搴忓垪鍙�",
+          required: true,
+          field: "serialNumber",
+          type: "string",
+        },
+      ],
+      
+    ]);
+    const searchFormFields = ref({
+      materielCode: "",
+      materielName: "",
+      orderNo: "",
+    });
+    const searchFormOptions = ref([
+      [
+        { title: "鐗╂枡缂栧彿", field: "materielCode", type:"like"},
+        { title: "鐗╂枡鍚嶇О", field: "materielName" ,type:"like"},
+        { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "select",dataKey: "warehouses",data: []},
+        {title: "搴撳瓨鐘舵��",field: "stockStatus",type: "select",dataKey:"stockStatusEmun", data: []}
+      ],
+    ]);
+    const columns = ref([
+      {
+        field: "stockId",
+        title: "Id",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+       field: "warehouseId",
+          title: "浠撳簱",
+          type: "select",
+          width: 100,
+          align: "left",
+          bind: { key: "warehouses", data: [] },
+      },
+      {
+        field: "materielCode",
+        title: "鐗╂枡缂栧彿",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "materielName",
+        title: "鐗╂枡鍚嶇О",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "stockQuantity",
+        title: "搴撳瓨鏁伴噺",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "outboundQuantity",
+        title: "鍑哄簱鏁伴噺",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field:"unit",
+        title:"鍗曚綅",
+        type:"string",
+        width:60,
+        align:"left"
+      },
+      {
+        field: "stockStatus",
+        title: "搴撳瓨鐘舵��",
+        type: "string",
+        width: 120,
+        align: "left",
+        bind: { key: "stockStatusEmun", data: [] },
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      
+    ]);
+    const detail = ref({
+      cnName: "#detailCnName",
+      table: "",
+      columns: [],
+      sortName: "",
+    });
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
\ No newline at end of file
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs"
index 7cfbe87..157b741 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielSourceTypeEnum.cs"
@@ -1,5 +1,6 @@
 锘縰sing System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -11,16 +12,19 @@
         /// <summary>
         /// 閲囪喘浠�
         /// </summary>
-        PurchasePart = 1,
+        [Description("閲囪喘浠�")]
+        閲囪喘浠� = 1,
 
         /// <summary>
         /// 鑷埗浠�
         /// </summary>
-        SelfMadePart = 2,
+        [Description("鑷埗浠�")]
+        鑷埗浠� = 2,
 
         /// <summary>
         /// 閲囪喘&鑷埗浠�
         /// </summary>
-        PurchaseAndSelf = 3
+        [Description("閲囪喘鍜岃嚜鍒朵欢")]
+        閲囪喘鍜岃嚜鍒朵欢 = 3
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielTypeEnum.cs"
index 6878539..b08053b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielTypeEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/MaterielEnum/MaterielTypeEnum.cs"
@@ -1,5 +1,6 @@
 锘縰sing System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -14,21 +15,25 @@
         /// <summary>
         /// 鎴愬搧
         /// </summary>
-        FinishProduct = 1,
+        [Description("鎴愬搧")]
+        鎴愬搧 = 1,
 
         /// <summary>
         /// 鍗婃垚鍝�
         /// </summary>
-        HalfProduct = 2,
+        [Description("鍗婃垚鍝�")]
+        鍗婃垚鍝� = 2,
 
         /// <summary>
         /// 鍘熸潗鏂�
         /// </summary>
-        RawMateriel = 3,
+        [Description("鍘熸潗鏂�")]
+        鍘熸潗鏂� = 3,
 
         /// <summary>
         /// 澶囦欢
         /// </summary>
-        SpareParts = 4
+        [Description("澶囦欢")]
+        澶囦欢 = 4
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/MaterielnfoStatisticsDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/MaterielnfoStatisticsDTO.cs"
new file mode 100644
index 0000000..cc5b348
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Stock/MaterielnfoStatisticsDTO.cs"
@@ -0,0 +1,66 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_DTO.Stock
+{
+   public class MaterielnfoStatisticsDTO
+   {
+        /// <summary>
+        /// 浠撳簱ID
+        /// </summary>
+        [ExporterHeader(DisplayName = "浠撳簱ID")]
+        public int WarehouseId { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [ExporterHeader(DisplayName = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [ExporterHeader(DisplayName = "鐗╂枡鍚嶇О")]
+        public string MaterielName { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨鏁伴噺
+        /// </summary>
+        [ExporterHeader(DisplayName = "搴撳瓨鏁伴噺")]
+        public float StockQuantity { get; set; }
+
+        /// <summary>
+        /// 鍑哄簱鏁伴噺
+        /// </summary>
+        [ExporterHeader(DisplayName = "鍑哄簱鏁伴噺")]
+        public float OutboundQuantity { get; set; }
+
+        /// <summary>
+        /// 搴撳瓨鐘舵��
+        /// </summary>
+        [ExporterHeader(IsIgnore = true)]
+        public int StockStatus { get; set; }
+
+
+        /// <summary>
+        /// 鍗曚綅
+        /// </summary>
+        [ExporterHeader(DisplayName = "鍗曚綅")]
+        public string Unit { get; set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [ExporterHeader(DisplayName = "澶囨敞")]
+        public string Remark { get; set; }
+
+        
+
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IMaterielnfoStatisticsService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IMaterielnfoStatisticsService.cs"
new file mode 100644
index 0000000..93d8901
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IMaterielnfoStatisticsService.cs"
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_DTO.Stock;
+
+namespace WIDESEA_IStockService
+{
+    public interface  IMaterielnfoStatisticsService : IDependency
+    {
+        PageGridData<MaterielnfoStatisticsDTO> GetPageGridData(PageDataOptions options);
+
+        WebResponseContent Export(PageDataOptions options);
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs"
index 682c4fe..768a873 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Basic/Dt_MaterielInfo.cs"
@@ -68,7 +68,7 @@
         /// <summary>
         /// 鐗堟湰鍚嶇О
         /// </summary>
-        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗堟湰鍚嶇О")]
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鐗堟湰鍚嶇О")]
         public string MaterielVersion { get; set; }
 
         /// <summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/MaterielnfoStatisticsService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/MaterielnfoStatisticsService.cs"
new file mode 100644
index 0000000..d8d262c
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/MaterielnfoStatisticsService.cs"
@@ -0,0 +1,308 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.DB.Models;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.HostedService;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+using System.Linq;
+using WIDESEA_Common.WareHouseEnum;
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Core.Utilities;
+
+namespace WIDESEA_StockService
+{
+    public partial class MaterielnfoStatisticsService : IMaterielnfoStatisticsService
+    {
+        public readonly IUnitOfWorkManage _unitOfWorkManage;
+        public readonly SqlSugarClient _dbBase;
+
+        public MaterielnfoStatisticsService(IUnitOfWorkManage unitOfWorkManage) {
+            _unitOfWorkManage = unitOfWorkManage;
+            _dbBase = unitOfWorkManage.GetDbClient();
+        }
+
+        public virtual PageGridData<MaterielnfoStatisticsDTO> GetPageGridData(PageDataOptions options)
+        {
+            try
+            {
+
+                List<MaterielnfoStatisticsDTO> materielnfoStatistics = new List<MaterielnfoStatisticsDTO>();
+                ISugarQueryable<Dt_StockInfoDetail> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfoDetail>();
+
+                string whereStoDe = GetDataRole(typeof(Dt_StockInfoDetail));
+                sugarQueryable1 = sugarQueryable1.Where(whereStoDe);
+
+
+                string whereSto = GetDataRole(typeof(Dt_StockInfo));
+                ISugarQueryable<Dt_StockInfo> sugarQueryable = _dbBase.Queryable<Dt_StockInfo>().Where(whereSto);
+                if (!string.IsNullOrEmpty(options.Wheres))
+                {
+                    try
+                    {
+                        List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
+                        if (searchParametersList.Count > 0)
+                        {
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower());
+                                if (searchParameters != null)
+                                {
+                                    sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielCode.Contains(searchParameters.Value));
+                                }
+                            }
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.WarehouseId).FirstLetterToLower());
+                                if (searchParameters != null) {
+                                    sugarQueryable = sugarQueryable.Where(x => x.WarehouseId.Equals(searchParameters.Value));                             
+                                }
+                            }
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.StockStatus).FirstLetterToLower());
+                                if(searchParameters!= null)
+                                {
+                                    sugarQueryable = sugarQueryable.Where(x => x.StockStatus.Equals(searchParameters.Value));
+                                }
+                            }
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielName).FirstLetterToLower());
+                                if (searchParameters != null)
+                                {
+                                    sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielName.Contains(searchParameters.Value));
+                                }
+                            }
+
+                        }
+
+                    }
+                    catch(Exception ex)
+                    {
+                    
+                    }
+                }
+                    
+
+                ISugarQueryable<MaterielnfoStatisticsDTO> sugarQueryable2 = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => b.StockId == a.Id).Where((b,a)=>a.LocationCode!="" && a.LocationCode!=null).Select((b, a)
+                    => new MaterielnfoStatisticsDTO
+                    {
+                        WarehouseId = a.WarehouseId,
+                        MaterielCode = b.MaterielCode,
+                        MaterielName = b.MaterielName,
+                        StockQuantity = b.StockQuantity,
+                        OutboundQuantity = b.OutboundQuantity,
+                        StockStatus = a.StockStatus,
+                        Unit = b.Unit,
+                        Remark = a.Remark,
+                        
+                    });
+                // 鑾峰彇鎵�鏈夋暟鎹�
+                var allData = sugarQueryable2.ToList();
+
+                // 浣跨敤瀛楀吀杩涜鍒嗙粍姹囨��
+                var groupedData = new Dictionary<string, MaterielnfoStatisticsDTO>();
+                foreach (var item in allData)
+                {
+                    if (groupedData.ContainsKey(item.MaterielCode))
+                    {
+                        groupedData[item.MaterielCode].StockQuantity += item.StockQuantity;
+                        groupedData[item.MaterielCode].OutboundQuantity += item.OutboundQuantity;
+                    }
+                    else
+                    {
+                        groupedData[item.MaterielCode] = new MaterielnfoStatisticsDTO
+                        {
+                            WarehouseId = item.WarehouseId,
+                            MaterielCode = item.MaterielCode,
+                            MaterielName = item.MaterielName,
+                            StockQuantity = item.StockQuantity,
+                            OutboundQuantity = item.OutboundQuantity,
+                            StockStatus = item.StockStatus,
+                            Unit = item.Unit,
+                            Remark = item.Remark
+                        };
+                    }
+                }
+
+                // 杞崲涓哄垪琛�
+                materielnfoStatistics = groupedData.Values.ToList();
+
+                // 鍒嗛〉澶勭悊
+                int startIndex = (options.Page - 1) * options.Rows;
+                int endIndex = Math.Min(startIndex + options.Rows, materielnfoStatistics.Count);
+                materielnfoStatistics = materielnfoStatistics.GetRange(startIndex, endIndex - startIndex);
+
+                int count = groupedData.Count;
+
+                return new PageGridData<MaterielnfoStatisticsDTO>(count, materielnfoStatistics);
+                
+            }
+            catch(Exception ex) 
+            {
+            
+            }
+            return new PageGridData<MaterielnfoStatisticsDTO>();
+        }
+
+        public virtual WebResponseContent Export(PageDataOptions options)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Type t = typeof(MaterielnfoStatisticsDTO);
+
+                string savePath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelExport";
+                IExporter exporter = new ExcelExporter();
+                options.Page = 1;
+                options.Rows = 30;
+                options.Order = "desc";
+                options.Sort = "MaterielCode";
+                List<MaterielnfoStatisticsDTO> materielnfoStatistics = new List<MaterielnfoStatisticsDTO>();
+                ISugarQueryable<Dt_StockInfoDetail> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfoDetail>();
+
+                string whereStoDe = GetDataRole(typeof(Dt_StockInfoDetail));
+                sugarQueryable1 = sugarQueryable1.Where(whereStoDe);
+
+
+                string whereSto = GetDataRole(typeof(Dt_StockInfo));
+                ISugarQueryable<Dt_StockInfo> sugarQueryable = _dbBase.Queryable<Dt_StockInfo>().Where(whereSto);
+                if (!string.IsNullOrEmpty(options.Wheres))
+                {
+                    try
+                    {
+                        List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
+                        if (searchParametersList.Count > 0)
+                        {
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower());
+                                if (searchParameters != null)
+                                {
+                                    sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielCode.Contains(searchParameters.Value));
+                                }
+                            }
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.WarehouseId).FirstLetterToLower());
+                                if (searchParameters != null)
+                                {
+                                    sugarQueryable = sugarQueryable.Where(x => x.WarehouseId.Equals(searchParameters.Value));
+                                }
+                            }
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.StockStatus).FirstLetterToLower());
+                                if (searchParameters != null)
+                                {
+                                    sugarQueryable = sugarQueryable.Where(x => x.StockStatus.Equals(searchParameters.Value));
+                                }
+                            }
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielName).FirstLetterToLower());
+                                if (searchParameters != null)
+                                {
+                                    sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielName.Contains(searchParameters.Value));
+                                }
+                            }
+
+                        }
+
+                    }
+                    catch (Exception ex)
+                    {
+
+                    }
+                }
+
+
+                ISugarQueryable<MaterielnfoStatisticsDTO> sugarQueryable2 = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => b.StockId == a.Id).Where((b, a) => a.LocationCode != "" && a.LocationCode != null).Select((b, a)
+                    => new MaterielnfoStatisticsDTO
+                    {
+                        WarehouseId = a.WarehouseId,
+                        MaterielCode = b.MaterielCode,
+                        MaterielName = b.MaterielName,
+                        StockQuantity = b.StockQuantity,
+                        OutboundQuantity = b.OutboundQuantity,
+                        StockStatus = a.StockStatus,
+                        Unit = b.Unit,
+                        Remark = a.Remark,
+
+                    });
+                // 鑾峰彇鎵�鏈夋暟鎹�
+                var allData = sugarQueryable2.ToList();
+
+                // 浣跨敤瀛楀吀杩涜鍒嗙粍姹囨��
+                var groupedData = new Dictionary<string, MaterielnfoStatisticsDTO>();
+                foreach (var item in allData)
+                {
+                    if (groupedData.ContainsKey(item.MaterielCode))
+                    {
+                        groupedData[item.MaterielCode].StockQuantity += item.StockQuantity;
+                        groupedData[item.MaterielCode].OutboundQuantity += item.OutboundQuantity;
+                    }
+                    else
+                    {
+                        groupedData[item.MaterielCode] = new MaterielnfoStatisticsDTO
+                        {
+                            WarehouseId = item.WarehouseId,
+                            MaterielCode = item.MaterielCode,
+                            MaterielName = item.MaterielName,
+                            StockQuantity = item.StockQuantity,
+                            OutboundQuantity = item.OutboundQuantity,
+                            StockStatus = item.StockStatus,
+                            Unit = item.Unit,
+                            Remark = item.Remark
+                        };
+                    }
+                }
+
+                // 杞崲涓哄垪琛�
+                materielnfoStatistics = groupedData.Values.ToList();
+
+                byte[] data = exporter.ExportAsByteArray(materielnfoStatistics).Result;
+
+                string fileName = "鐗╂枡鍒嗙被缁熻.xlsx";
+
+                FileHelper.WriteFile(savePath, fileName, data);
+
+                content = WebResponseContent.Instance.OK(data: savePath + "\\" + fileName);
+            }
+            catch (Exception ex)
+            {
+                content = WebResponseContent.Instance.Error(ex.Message);
+            }
+            return content;
+        }
+        private string GetDataRole(Type type)
+        {
+            try
+            {
+                UserRole? userRole = PermissionDataHostService.UserRoles.FirstOrDefault(x => x.UserId == App.User.UserId);
+                if (userRole == null)
+                    throw new Exception($"鏃犳潈闄�");
+
+                if (type.IsAssignableFrom(typeof(BaseWarehouseEntity)) || type.GetProperty(nameof(BaseWarehouseEntity.WarehouseId)) != null)
+                {
+                    if (userRole.WarehouseIds.Count > 0)
+                    {
+                        return $"{nameof(BaseWarehouseEntity.WarehouseId)} in ({userRole.WarehouseIds.Serialize().Replace("[", "").Replace("]", "")})";
+                    }
+
+                    else
+                        return $"1 != 1";
+                }
+                else
+                {
+                    return "1 = 1";
+                }
+            }
+            catch (Exception ex)
+            {
+                throw new Exception($"鏃犳潈闄愶紝{ex.Message}");
+            }
+        }
+    }
+}
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/MaterielnfoStatisticsController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/MaterielnfoStatisticsController.cs"
new file mode 100644
index 0000000..fb32e85
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/MaterielnfoStatisticsController.cs"
@@ -0,0 +1,55 @@
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using System.Reflection;
+using WIDESEA_Core;
+using WIDESEA_IStockService;
+using WIDESEA_StockService;
+
+namespace WIDESEA_WMSServer.Controllers.Stock
+{
+    [Route("api/MaterielnfoStatistics")]
+    [Authorize,ApiController]
+    public class MaterielnfoStatisticsController : Controller
+    {
+        private readonly IMaterielnfoStatisticsService _materielnfoStatisticsService;
+
+        public MaterielnfoStatisticsController (IMaterielnfoStatisticsService materielnfoStatisticsService)
+        {
+            _materielnfoStatisticsService = materielnfoStatisticsService;
+        }
+        [HttpPost,Route("GetPageData")]
+        public object GetPageData([FromBody] PageDataOptions options)
+        {
+            return _materielnfoStatisticsService.GetPageGridData(options);
+        }
+
+        /// <summary>
+        /// 瀵煎嚭鏁版嵁
+        /// </summary>
+        /// <param name="loadData"></param>
+        /// <returns></returns>
+        [HttpPost, Route("Export")]
+        public virtual ActionResult Export([FromBody] PageDataOptions loadData)
+        {
+            WebResponseContent result = InvokeService("Export", new object[] { loadData }) as WebResponseContent;
+            if (result.Status)
+                return File(
+                       System.IO.File.ReadAllBytes(result.Data.ToString()),
+                       System.Net.Mime.MediaTypeNames.Application.Octet,
+                       Path.GetFileName(result.Data.ToString())
+                   );
+            return Json(result);
+        }
+        private object InvokeService(string methodName, object[] parameters)
+        {
+            Type t = _materielnfoStatisticsService.GetType();
+            List<Type> types = new List<Type>();
+            foreach (var param in parameters)
+            {
+                types.Add(param.GetType());
+            }
+            MethodInfo method = t.GetMethod(methodName, types.ToArray());
+            return method.Invoke(_materielnfoStatisticsService, parameters);
+        }
+    }
+}

--
Gitblit v1.9.3