From 3fb6a51a60230f42be4db54cc4371a7106b322a4 Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期五, 06 二月 2026 18:23:24 +0800
Subject: [PATCH] Merge branch 'htq20251215' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu into htq20251215

---
 项目代码/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue                                             |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs        |    6 
 项目代码/WIDESEA_WMSClient/src/extension/inbound/extend/Pallet.vue                                        |   31 +++
 项目代码/WIDESEA_WMSClient/src/views/outbound/outPicking.vue                                              |   66 +++++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs      |    6 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs                      |    2 
 项目代码/WIDESEA_WMSClient/src/extension/stock/stockInfoDetailByMaterielSum.js                            |   13 +
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IStockService/IStockDetailByMaterielService.cs                 |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockDetailByMaterielController.cs |    9 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs                          |   12 +
 项目代码/WIDESEA_WMSClient/src/extension/stock/extend/CalculateStock.vue                                  |  250 +++++++++++++++++++++++++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs                        |    2 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs                        |   34 +++
 项目代码/WIDESEA_WMSClient/src/extension/inbound/extend/AllcatedPallet.vue                                |   33 +++
 项目代码/WIDESEA_WMSClient/src/extension/check/extend/ReCheckGroupPallet.vue                              |   33 +++
 项目代码/WIDESEA_WMSClient/src/extension/inbound/extend/StockTakeGroupPallet.vue                          |   32 +++
 项目代码/WIDESEA_WMSClient/config/buttons.js                                                              |    8 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs                   |   26 ++
 项目代码/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue                                           |    3 
 19 files changed, 545 insertions(+), 25 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js"
index 53cdeef..ca34800 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/config/buttons.js"
@@ -347,6 +347,14 @@
     type: 'warning',
     onClick: function () {
     }
+},{
+    name: "璁$畻搴撳瓨鎬诲拰",
+    icon: '',
+    class: '',
+    value: 'CalculateStock',
+    type: 'warning',
+    onClick: function () {
+    }
 }
 ]
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/extend/ReCheckGroupPallet.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/extend/ReCheckGroupPallet.vue"
index 3bfaaa6..57655b5 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/extend/ReCheckGroupPallet.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/extend/ReCheckGroupPallet.vue"
@@ -19,8 +19,8 @@
       <div class="location-section compact">
         <el-form :model="form" :rules="rules" ref="locationForm" class="compact-form">
           <el-form-item label="浠撳簱鍖哄煙" prop="locationType" class="location-select compact-item">
-            <el-select v-model="form.locationType" placeholder="璇峰厛閫夋嫨浠撳簱" clearable filterable
-              @change="handleLocationChange" style="width: 100%" :loading="locationLoading" size="medium">
+            <el-select v-model="form.locationType" placeholder="鑷姩鑾峰彇浠撳簱鍖哄煙" clearable filterable
+              @change="handleLocationChange" style="width: 100%" :loading="locationLoading" size="medium" :disabled="true">
               <el-option v-for="item in locationTypes" :key="item.locationType" :label="item.locationTypeDesc"
                 :value="item.locationType" />
             </el-select>
@@ -282,6 +282,7 @@
       }
     },
     
+    
     visible(newVal, oldVal) {
       this.palletVisible = newVal;
 
@@ -412,6 +413,33 @@
       }
     },
 
+    fetchLocationByWarehouse(warehouseCode) {
+      if (!warehouseCode) {
+        this.form.locationType = null;
+        return;
+      }
+      this.locationLoading = true;
+      http.post(`/api/InboundOrder/GetLocationType?code=${warehouseCode}`)
+        .then(({ data }) => {
+          if (data) {
+            this.form.locationType = data.locationType || data;
+            if (!this.locationTypes.find(item => item.locationType === this.form.locationType)) {
+              this.locationTypes.push({
+                locationType: this.form.locationType,
+                locationTypeDesc: this.form.locationType
+              });
+            }
+          }
+        })
+        .catch((err) => {
+          console.error("鑾峰彇浠撳簱鍖哄煙澶辫触:", err);
+          this.$message.error("鑾峰彇浠撳簱鍖哄煙澶辫触锛岃閲嶈瘯");
+          this.form.locationType = null;
+        })
+        .finally(() => {
+          this.locationLoading = false;
+        });
+    },
     async fetchStockStatistics(orderNo) {
       // 鍗曟嵁鍙蜂负绌烘椂涓嶆煡璇�
       if (!orderNo) {
@@ -860,6 +888,7 @@
       this.barcode = '';
       this.materials = [];
       this.error = '';
+      this.fetchLocationByWarehouse(this.form.warehouseType);
     },
     
     // 鍖哄煙鍒囨崲浜嬩欢
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/AllcatedPallet.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/AllcatedPallet.vue"
index 92ca4a5..f09a1e1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/AllcatedPallet.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/AllcatedPallet.vue"
@@ -19,8 +19,8 @@
       <div class="location-section compact">
         <el-form :model="form" :rules="rules" ref="locationForm" class="compact-form">
           <el-form-item label="浠撳簱鍖哄煙" prop="locationType" class="location-select compact-item">
-            <el-select v-model="form.locationType" placeholder="璇峰厛閫夋嫨浠撳簱" clearable filterable
-              @change="handleLocationChange" style="width: 100%" :loading="locationLoading" size="medium">
+            <el-select v-model="form.locationType" placeholder="鑷姩鑾峰彇浠撳簱鍖哄煙" clearable filterable
+              @change="handleLocationChange" style="width: 100%" :loading="locationLoading" size="medium" :disabled="true">
               <el-option v-for="item in locationTypes" :key="item.locationType" :label="item.locationTypeDesc"
                 :value="item.locationType" />
             </el-select>
@@ -446,6 +446,34 @@
         })
         .finally(() => {
           this.warehouseLoading = false;
+        });
+    },
+
+    fetchLocationByWarehouse(warehouseCode) {
+      if (!warehouseCode) {
+        this.form.locationType = null;
+        return;
+      }
+      this.locationLoading = true;
+      http.post(`/api/InboundOrder/GetLocationType?code=${warehouseCode}`)
+        .then(({ data }) => {
+          if (data) {
+            this.form.locationType = data.locationType || data;
+            if (!this.locationTypes.find(item => item.locationType === this.form.locationType)) {
+              this.locationTypes.push({
+                locationType: this.form.locationType,
+                locationTypeDesc: this.form.locationType
+              });
+            }
+          }
+        })
+        .catch((err) => {
+          console.error("鑾峰彇浠撳簱鍖哄煙澶辫触:", err);
+          this.$message.error("鑾峰彇浠撳簱鍖哄煙澶辫触锛岃閲嶈瘯");
+          this.form.locationType = null;
+        })
+        .finally(() => {
+          this.locationLoading = false;
         });
     },
 
@@ -937,6 +965,7 @@
       this.barcode = '';
       this.materials = [];
       this.error = '';
+      this.fetchLocationByWarehouse(this.form.warehouseType);
     },
 
     // 鍖哄煙鍒囨崲浜嬩欢
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/Pallet.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/Pallet.vue"
index 14da45b..1fe40a9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/Pallet.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/Pallet.vue"
@@ -57,13 +57,14 @@
           >
             <el-select
               v-model="form.locationType"
-              placeholder="璇峰厛閫夋嫨浠撳簱"
+              placeholder="鑷姩鑾峰彇浠撳簱鍖哄煙"
               clearable
               filterable
               @change="handleLocationChange"
               style="width: 100%"
               :loading="locationLoading"
               size="medium"
+              :disabled="true"
             >
               <el-option
                 v-for="item in locationTypes"
@@ -752,6 +753,33 @@
         });
     },
 
+    fetchLocationByWarehouse(warehouseCode) {
+      if (!warehouseCode) {
+        this.form.locationType = null;
+        return;
+      }
+      this.locationLoading = true;
+      http.post(`/api/InboundOrder/GetLocationType?code=${warehouseCode}`)
+        .then(({ data }) => {
+          if (data) {
+            this.form.locationType = data.locationType || data;
+            if (!this.locationTypes.find(item => item.locationType === this.form.locationType)) {
+              this.locationTypes.push({
+                locationType: this.form.locationType,
+                locationTypeDesc: this.form.locationType
+              });
+            }
+          }
+        })
+        .catch((err) => {
+          console.error("鑾峰彇浠撳簱鍖哄煙澶辫触:", err);
+          this.$message.error("鑾峰彇浠撳簱鍖哄煙澶辫触锛岃閲嶈瘯");
+          this.form.locationType = null;
+        })
+        .finally(() => {
+          this.locationLoading = false;
+        });
+    },
     // 鑾峰彇搴撳瓨缁熻
     fetchStockStatistics(orderNo) {
       if (!orderNo) {
@@ -1249,6 +1277,7 @@
       this.barcode = "";
       this.materials = [];
       this.error = "";
+      this.fetchLocationByWarehouse(this.form.warehouseType);
     },
 
     // 鍖哄煙鍒囨崲浜嬩欢
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/StockTakeGroupPallet.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/StockTakeGroupPallet.vue"
index b6ec746..8391632 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/StockTakeGroupPallet.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/StockTakeGroupPallet.vue"
@@ -19,8 +19,8 @@
       <div class="location-section compact">
         <el-form :model="form" :rules="rules" ref="locationForm" class="compact-form">
           <el-form-item label="浠撳簱鍖哄煙" prop="locationType" class="location-select compact-item">
-            <el-select v-model="form.locationType" placeholder="璇峰厛閫夋嫨浠撳簱" clearable filterable
-              @change="handleLocationChange" style="width: 100%" :loading="locationLoading" size="medium">
+            <el-select v-model="form.locationType" placeholder="鑷姩鑾峰彇浠撳簱鍖哄煙" clearable filterable
+              @change="handleLocationChange" style="width: 100%" :loading="locationLoading" size="medium" :disabled="true">
               <el-option v-for="item in locationTypes" :key="item.locationType" :label="item.locationTypeDesc"
                 :value="item.locationType" />
             </el-select>
@@ -412,6 +412,33 @@
       }
     },
 
+    fetchLocationByWarehouse(warehouseCode) {
+      if (!warehouseCode) {
+        this.form.locationType = null;
+        return;
+      }
+      this.locationLoading = true;
+      http.post(`/api/InboundOrder/GetLocationType?code=${warehouseCode}`)
+        .then(({ data }) => {
+          if (data) {
+            this.form.locationType = data.locationType || data;
+            if (!this.locationTypes.find(item => item.locationType === this.form.locationType)) {
+              this.locationTypes.push({
+                locationType: this.form.locationType,
+                locationTypeDesc: this.form.locationType
+              });
+            }
+          }
+        })
+        .catch((err) => {
+          console.error("鑾峰彇浠撳簱鍖哄煙澶辫触:", err);
+          this.$message.error("鑾峰彇浠撳簱鍖哄煙澶辫触锛岃閲嶈瘯");
+          this.form.locationType = null;
+        })
+        .finally(() => {
+          this.locationLoading = false;
+        });
+    },
     async fetchStockStatistics(orderNo) {
       // 鍗曟嵁鍙蜂负绌烘椂涓嶆煡璇�
       if (!orderNo) {
@@ -860,6 +887,7 @@
       this.barcode = '';
       this.materials = [];
       this.error = '';
+      this.fetchLocationByWarehouse(this.form.warehouseType);
     },
     
     // 鍖哄煙鍒囨崲浜嬩欢
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/extend/CalculateStock.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/extend/CalculateStock.vue"
new file mode 100644
index 0000000..cb6382b
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/extend/CalculateStock.vue"
@@ -0,0 +1,250 @@
+<template>
+    <vol-box v-model="show" title="鐗╂枡搴撳瓨鏌ヨ" :width="800" :height="600">
+        <template #content>
+            <el-form ref="form" :model="form" :rules="rules" label-width="90px">
+                <!-- 浠撳簱鍙疯緭鍏ユ -->
+                <el-form-item label="浠撳簱鍙�:" prop="warehouseCode">
+                    <el-input 
+                        v-model="form.warehouseCode" 
+                        placeholder="璇疯緭鍏ヤ粨搴撳彿锛堝锛�5053锛�" 
+                        clearable
+                        @input="handleWarehouseInput"
+                        @keyup.enter="focusMaterielInput"
+                        ref="warehouseCodeInput"
+                        :disabled="loading"
+                    />
+                </el-form-item>
+
+                <!-- 鐗╂枡鏉$爜杈撳叆妗� -->
+                <el-form-item label="鐗╂枡鏉$爜:" prop="materielBarcode">
+                    <el-input 
+                        v-model="form.materielBarcode" 
+                        placeholder="璇锋壂鎻�/杈撳叆鐗╂枡鏉$爜锛堝锛�100401-01211锛�" 
+                        @keyup.enter="getStockTotal" 
+                        clearable
+                        @paste="handlePaste" 
+                        @input="handleInput" 
+                        ref="materielCodeInput"
+                        :disabled="loading"
+                    />
+                    <!-- 搴撳瓨鏌ヨ鍔犺浇鐘舵�� -->
+                    <el-icon class="ml-2" v-if="loading"><loading /></el-icon>
+                </el-form-item>
+
+                <!-- 搴撳瓨鎬诲拰鏄剧ず鍖哄煙 -->
+                <el-form-item label="搴撳瓨鎬诲拰:" prop="totalStockQuantity">
+                    <el-input 
+                        v-model="form.totalStockQuantity" 
+                        placeholder="璇疯緭鍏ヤ粨搴撳彿鍜岀墿鏂欐潯鐮佹煡璇�" 
+                        disabled
+                        prefix-icon="el-icon-s-data"
+                    />
+                    <!-- 鏃犳暟鎹彁绀� -->
+                    <span v-if="form.totalStockQuantity === 0 && !loading && form.materielBarcode && form.warehouseCode" class="text-gray-500 ml-2">
+                        璇ョ墿鏂欏湪褰撳墠浠撳簱鏆傛棤搴撳瓨
+                    </span>
+                </el-form-item>
+            </el-form>
+        </template>
+
+        <template #footer>
+            <div class="dialog-footer">
+                <el-button @click="resetForm">閲嶇疆</el-button>
+                <el-button @click="show = false">鍏抽棴</el-button>
+            </div>
+        </template>
+    </vol-box>
+</template>
+  
+<script>
+import VolBox from '@/components/basic/VolBox.vue'
+import { Loading } from '@element-plus/icons-vue' 
+
+export default {
+    components: { VolBox, Loading },
+    props: {
+        value: { type: Boolean, default: false }
+    },
+    data() {
+        // 浠撳簱鍙烽獙璇佽鍒�
+        const validateWarehouseCode = (rule, value, callback) => {
+            if (!value) {
+                return callback(new Error('璇疯緭鍏ヤ粨搴撳彿'));
+            }
+            callback();
+        };
+
+        // 鐗╂枡鏉$爜楠岃瘉瑙勫垯
+        const validateMaterielBarcode = (rule, value, callback) => {
+            if (!value) {
+                return callback(new Error('璇疯緭鍏ョ墿鏂欐潯鐮�'));
+            }
+            callback();
+        };
+
+        return {
+            show: false,
+            loading: false, // 搴撳瓨鏌ヨ鍔犺浇鐘舵��
+            form: {
+                warehouseCode: '', // 浠撳簱鍙�
+                materielBarcode: '', // 鐗╂枡鏉$爜
+                totalStockQuantity: 0 // 搴撳瓨鎬诲拰
+            },
+            // 琛ㄥ崟楠岃瘉瑙勫垯
+            rules: {
+                warehouseCode: [
+                    { validator: validateWarehouseCode, trigger: ['blur', 'change'] }
+                ],
+                materielBarcode: [
+                    { validator: validateMaterielBarcode, trigger: ['blur', 'change'] }
+                ]
+            }
+        }
+    },
+    methods: {
+        // 鎵撳紑寮圭獥鍒濆鍖�
+        open() {
+            this.show = true
+            this.$nextTick(() => {
+                this.focusWarehouseInput()
+            })
+        },
+        async getStockTotal() {
+            // 琛ㄥ崟楠岃瘉
+            try {
+                await this.$refs.form.validate();
+            } catch (error) {
+                if (!this.form.warehouseCode) {
+                    this.focusWarehouseInput();
+                } else {
+                    this.focusAndSelectInput();
+                }
+                return;
+            }
+
+            this.loading = true;
+            try {
+                const res = await this.http.post('/api/StockDetailByMateriel/CalculateStock?warehouseCode=' + this.form.warehouseCode.trim() + '&materielCode=' + this.form.materielBarcode.trim());
+                if (res.status && res.code === 0) {
+                    this.form.totalStockQuantity = Number(res.data) || 0;
+                    this.$message.success('搴撳瓨鏌ヨ鎴愬姛');
+                } else {
+                    this.form.totalStockQuantity = 0;
+                    this.$message.error(res.message || '搴撳瓨鏌ヨ澶辫触锛氭帴鍙h繑鍥炲紓甯�');
+                }
+            } catch (error) {
+                this.form.totalStockQuantity = 0;
+                const errorMsg = error.response 
+                    ? `鎺ュ彛閿欒锛�${error.response.status} - ${error.response.data?.message || '鏈煡閿欒'}`
+                    : `缃戠粶寮傚父锛�${error.message}`;
+                this.$message.error(`搴撳瓨鏌ヨ澶辫触锛�${errorMsg}`);
+            } finally {
+                this.loading = false;
+            }
+        },
+
+        // 浠撳簱鍙疯緭鍏ヨ繃婊�
+        handleWarehouseInput(value) {
+            this.form.warehouseCode = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase();
+            this.$nextTick(() => {
+                this.$refs.form.validateField('warehouseCode');
+            });
+        },
+
+        // 鐗╂枡鏉$爜杈撳叆杩囨护
+        handleInput(value) {
+            this.form.materielBarcode = value.replace(/[^-a-zA-Z0-9]/g, '');
+            this.$nextTick(() => {
+                this.$refs.form.validateField('materielBarcode');
+            });
+        },
+
+        // 绮樿创鐗╂枡鏉$爜鑷姩鏌ヨ
+        handlePaste(e) {
+            const clipboardData = e.clipboardData || window.clipboardData;
+            const pastedText = clipboardData.getData('text');
+            const cleanedText = pastedText.replace(/[^-a-zA-Z0-9]/g, '');
+            if (cleanedText) {
+                this.form.materielBarcode = cleanedText;
+                setTimeout(() => {
+                    this.getStockTotal();
+                }, 50);
+            }
+            e.preventDefault();
+        },
+
+        // 浠撳簱鍙峰洖杞﹁仛鐒︾墿鏂欐潯鐮�
+        focusMaterielInput() {
+            this.$nextTick(() => {
+                const inputRef = this.$refs.materielCodeInput;
+                if (inputRef) {
+                    const inputEl = inputRef.$el ? inputRef.$el.querySelector('input') : inputRef;
+                    inputEl?.focus();
+                }
+            });
+        },
+
+        // 鑱氱劍浠撳簱鍙疯緭鍏ユ
+        focusWarehouseInput() {
+            this.$nextTick(() => {
+                const inputRef = this.$refs.warehouseCodeInput;
+                if (inputRef) {
+                    const inputEl = inputRef.$el ? inputRef.$el.querySelector('input') : inputRef;
+                    inputEl?.focus();
+                }
+            });
+        },
+
+        // 鑱氱劍骞堕�変腑鐗╂枡鏉$爜杈撳叆妗�
+        focusAndSelectInput() {
+            this.$nextTick(() => {
+                setTimeout(() => {
+                    const inputRef = this.$refs.materielCodeInput;
+                    if (inputRef) {
+                        const inputEl = inputRef.$el ? inputRef.$el.querySelector('input') : inputRef;
+                        if (inputEl) {
+                            inputEl.focus();
+                            inputEl.select();
+                        }
+                    }
+                }, 100);
+            });
+        },
+
+        // 閲嶇疆琛ㄥ崟
+        resetForm() {
+            this.form = {
+                warehouseCode: '',
+                materielBarcode: '',
+                totalStockQuantity: 0
+            };
+            this.$refs.form.clearValidate();
+            this.focusWarehouseInput();
+        }
+    },
+    watch: {
+        show(val) {
+            if (val) {
+                this.$nextTick(() => {
+                    this.focusWarehouseInput()
+                })
+            } else {
+                this.resetForm();
+            }
+        }
+    }
+}
+</script>
+  
+<style scoped>
+.dialog-footer {
+    text-align: right;
+}
+.text-gray-500 {
+    color: #909399;
+    font-size: 12px;
+}
+.ml-2 {
+    margin-left: 8px;
+}
+</style>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockInfoDetailByMaterielSum.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockInfoDetailByMaterielSum.js"
index 2d89d3f..b5d5ead 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockInfoDetailByMaterielSum.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/stock/stockInfoDetailByMaterielSum.js"
@@ -1,10 +1,10 @@
 
 //姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
-
+import gridHeader from "./extend/CalculateStock.vue";
 let extension = {
     components: {
       //鏌ヨ鐣岄潰鎵╁睍缁勪欢
-      gridHeader: '',
+      gridHeader: gridHeader,
       gridBody: '',
       gridFooter: '',
       //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
@@ -17,7 +17,14 @@
     methods: {
        //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
       onInit() {  
-        console.log(this)
+        var EmptyTrayInboundBtn = this.buttons.find(
+        (x) => x.value == "CalculateStock"
+      );
+      if (EmptyTrayInboundBtn != null) {
+        EmptyTrayInboundBtn.onClick = () => {
+          this.$refs.gridHeader.open();
+        };
+      }
       },
       onInited() {
         //妗嗘灦鍒濆鍖栭厤缃悗
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue"
index fa3313e..27ae659 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue"
@@ -70,7 +70,7 @@
           title: "涓氬姟绫诲瀷",
           field: "businessType",
           type: "select",
-          dataKey: "documentTypeEmun",
+          dataKey: "inboundbusinessType",
           data: [],
         },
         {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outPicking.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outPicking.vue"
index 8150bc5..5a5d03a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outPicking.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outPicking.vue"
@@ -9,6 +9,8 @@
                     <i class="el-icon-document"></i>
                     <span class="order-label">璁㈠崟鍙凤細</span>
                     <span class="order-value">{{ orderNo }}</span>
+                    <span class="order-label" style="margin-left: 20px;">浜х嚎鍚嶇О锛�</span>
+                    <span class="order-value">{{ orderInfo?.departmentName || '' }}</span>
                 </div>
                 <div class="order-status">
                     <el-tag v-if="orderInfo" :type="getStatusType(orderInfo.orderStatus)" size="medium"
@@ -409,6 +411,42 @@
                 }
             }
         },
+
+        // ============== 鏂板锛氭牴鎹墭鐩樺彿鑾峰彇璁㈠崟鍙凤紙鏍稿績鍔熻兘锛� ==============
+        async getOrderNoByPallet(palletCode) {
+            if (!palletCode) {
+                this.$message.warning('鎵樼洏鍙蜂笉鑳戒负绌�');
+                return null;
+            }
+
+            try {
+                this.showFullScreenLoading();
+                // 璋冪敤鑾峰彇璁㈠崟鍙风殑鎺ュ彛
+                const response = await this.http.get(`/api/OutboundOrder/GetOrderNoByPalletCode?palletCode=${palletCode}`);
+
+                if (response.status && response.data) {
+                    const validOrderNo = response.data;
+                    this.playSuccessAudio();
+                    this.$message.success(`鎴愬姛鑾峰彇璁㈠崟鍙凤細${validOrderNo}`);
+                    return validOrderNo;
+                } else {
+                    this.playErrorAudio();
+                    const errorMsg = response.message || '璇ユ墭鐩樺彿鏈叧鑱斾换浣曡鍗�';
+                    this.$message.error(errorMsg);
+                    return null;
+                }
+            } catch (error) {
+                this.playErrorAudio();
+                const errorMsg = `鑾峰彇璁㈠崟鍙峰紓甯革細${error.message || '缃戠粶閿欒'}`;
+                this.$message.error(errorMsg);
+                console.error("銆愭墭鐩樺彿鏌ヨ鍗曞彿鎺ュ彛寮傚父銆�", error);
+                return null;
+            } finally {
+                this.hideFullScreenLoading();
+            }
+        },
+        // ============== 鏂板缁撴潫 ==============
+
         // 鎾斁鎴愬姛闊抽
         playSuccessAudio() {
             try {
@@ -435,11 +473,13 @@
         initPage() {
             // 浠庤矾鐢卞弬鏁拌幏鍙栬鍗曞彿
             this.orderNo = this.$route.query.orderNo || ''
-            if (!this.orderNo) {
-                this.$message.error('璁㈠崟鍙蜂笉鑳戒负绌�')
-                this.$router.back()
-                return
-            }
+            // ============== 寰皟锛氭敞閲婂己鍒惰繑鍥為�昏緫锛屽吋瀹规墭鐩樺彿鏌ヨ鍗曞彿 ==============
+            // if (!this.orderNo) {
+            //     this.$message.error('璁㈠崟鍙蜂笉鑳戒负绌�')
+            //     this.$router.back()
+            //     return
+            // }
+            // ============== 寰皟缁撴潫 ==============
 
             // 鍔犺浇璁㈠崟淇℃伅
             this.loadOrderInfo()
@@ -619,10 +659,20 @@
         },
 
         handlePalletScan(flag = true) {
-            if (this.scanForm.palletCode) {
-                this.loadPalletData(flag)
-            } else {
+            const palletCode = this.scanForm.palletCode.trim();
+            if (!palletCode) {
+                return;
             }
+            // 鍏堟牴鎹墭鐩樺彿鑾峰彇璁㈠崟鍙�
+            this.getOrderNoByPallet(palletCode).then((orderNo) => {
+                if (orderNo) {
+                    // 璧嬪�艰鍗曞彿锛屼緵鍚庣画閫昏緫浣跨敤
+                    this.orderNo = orderNo;
+                    // 鍒锋柊璁㈠崟淇℃伅
+                    this.loadOrderInfo();
+                }
+                this.loadPalletData(flag);
+            });
         },
 
         handleMaterialScan() {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
index 46ad6fa..97f5a24 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue"
@@ -104,7 +104,7 @@
           title: "涓氬姟绫诲瀷",
           field: "businessType",
           type: "select",
-          dataKey: "documentTypeEmun",
+          dataKey: "outboundbusinessType",
           data: [],
         },
         {
@@ -124,6 +124,7 @@
           data: [],
         },
         { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+        { title: "鎷夌嚎鍚嶇О", field: "departmentName", type: "like" },
         { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" },
       ],
     ]);
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
index 70bacb2..73c0715 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs"
@@ -29,5 +29,7 @@
         WebResponseContent UnPalletGroupBarcode(string orderNo);
 
         WebResponseContent HandCloseOrder(List<string> orderIds);
+
+        WebResponseContent GetLocationType(string code);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs"
index 9ec6408..b110ac1 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs"
@@ -19,5 +19,7 @@
         Task<WebResponseContent> ReceiveOutboundOrder(Dt_OutboundOrder model, int operateType);
 
         Task<WebResponseContent> GetById(int id);
+
+        WebResponseContent GetOrderNoByPalletCode(string palletCode);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockDetailByMaterielService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockDetailByMaterielService.cs"
index d7838cc..40e9574 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockDetailByMaterielService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_IStockService/IStockDetailByMaterielService.cs"
@@ -14,5 +14,7 @@
     public interface IStockDetailByMaterielService : IDependency
     {
         PageGridData<StockDetailByMateriel> GetPageGridData(PageDataOptions options);
+
+        WebResponseContent CalculateStock(string warehouseCode, string materielCode);
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
index 0715523..3355b93 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
@@ -987,6 +987,18 @@
             return content.OK(data: details);
         }
 
+        public WebResponseContent GetLocationType(string code)
+        {
+           var warehouseAreaName = _warehouseAreaRepository.QueryFirst(x => x.Code == code);
+            if(string.IsNullOrWhiteSpace(warehouseAreaName.ToString()))
+            {
+                return WebResponseContent.Instance.Error("鏈壘鍒颁粨搴撳悕绉�");
+            }
+            var locationTypeDesc = _locationTypeRepository.Db.Queryable<Dt_LocationType>().Where(x => string.Equals(x.LocationTypeDesc, warehouseAreaName.Name, StringComparison.OrdinalIgnoreCase)).First();
+
+            return WebResponseContent.Instance.OK(data:locationTypeDesc.LocationType);
+        }
+
         public WebResponseContent HandCloseOrder(List<string> orderNos)
         {
             try
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
index 965212f..e7cfc2d 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
@@ -29,7 +29,8 @@
         private readonly ILogger<OutboundOrderService> _logger;
         private readonly IRepository<Dt_OutboundOrderDetail> _outboundOrderDetailRepository;
         private readonly IMaterialUnitService _materialUnitService;
-        public OutboundOrderService(IRepository<Dt_OutboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository, ILogger<OutboundOrderService> logger, IMaterialUnitService materialUnitService, IMaterielInfoService materielInfoService) : base(BaseDal)
+        private readonly IRepository<Dt_OutStockLockInfo> _outStockLockInfoRepository;
+        public OutboundOrderService(IRepository<Dt_OutboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository, ILogger<OutboundOrderService> logger, IMaterialUnitService materialUnitService, IMaterielInfoService materielInfoService, IRepository<Dt_OutStockLockInfo> outStockLockInfoRepository) : base(BaseDal)
         {
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
@@ -37,6 +38,7 @@
             _logger = logger;
             _materialUnitService = materialUnitService;
             _materielInfoService = materielInfoService;
+            _outStockLockInfoRepository = outStockLockInfoRepository;
         }
 
         private int[] OrderTypes = new int[] { (int)InOrderTypeEnum.AllocatOutbound, (int)InOrderTypeEnum.InternalAllocat, (int)InOrderTypeEnum.ReCheck };
@@ -301,6 +303,19 @@
         }
 
 
+        /// <summary>
+        /// 鏍规嵁鎵樼洏鍙疯幏鍙栧崟鎹紪鍙�
+        /// </summary>
+        public WebResponseContent GetOrderNoByPalletCode(string palletCode)
+        {
+           var orderNo = _outStockLockInfoRepository.QueryData(x => x.PalletCode == palletCode).Select(x=>x.OrderNo).FirstOrDefault();
+            if(string.IsNullOrWhiteSpace(orderNo))
+            {
+                return WebResponseContent.Instance.Error($"璇ユ墭鐩榹palletCode}宸叉嫞閫夊畬");
+            }
+            return WebResponseContent.Instance.OK(data: orderNo);
+        }
+
         static object lock_code = new object();
         public string CreateCodeByRule(string ruleCode)
         {
@@ -425,6 +440,23 @@
                             sugarQueryable1 = sugarQueryable1.Where(x => x.ReturnToMESStatus.Equals(returnToMESStatus));
                         }
 
+                        var businessTypeParam = searchParametersList.FirstOrDefault(x =>
+                            x.Name.Equals(nameof(Dt_OutboundOrder.BusinessType).FirstLetterToLower(), StringComparison.OrdinalIgnoreCase));
+                        if (businessTypeParam != null && !string.IsNullOrEmpty(businessTypeParam.Value?.ToString()))
+                        {
+                            string businessType = businessTypeParam.Value.ToString().Trim();
+                            sugarQueryable1 = sugarQueryable1.Where(x => x.BusinessType.Equals(businessType));
+                        }
+
+                        var departmentNameParam = searchParametersList.FirstOrDefault(x =>
+                   x.Name.Equals("departmentName", StringComparison.OrdinalIgnoreCase));
+                        if (departmentNameParam != null && !string.IsNullOrEmpty(departmentNameParam.Value?.ToString()))
+                        {
+                            string departmentName = departmentNameParam.Value.ToString().Trim();
+                            sugarQueryable1 = sugarQueryable1.Where(x =>
+                                x.DepartmentName.Contains(departmentName));
+                        }
+
                         var createDateParams = searchParametersList
                     .Where(x => x.Name.Equals("createDate", StringComparison.OrdinalIgnoreCase)
                                 && !string.IsNullOrEmpty(x.Value?.ToString()))
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs"
index 7ca9282..385eed4 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs"
@@ -18,11 +18,13 @@
     {
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly SqlSugarClient _dbBase;
+        private readonly IRepository<Dt_StockInfoDetail> _stockInfoDetailRepository;
 
-        public StockDetailByMaterielService(IUnitOfWorkManage unitOfWorkManage)
+        public StockDetailByMaterielService(IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_StockInfoDetail> stockInfoDetailRepository)
         {
             _unitOfWorkManage = unitOfWorkManage;
             _dbBase = unitOfWorkManage.GetDbClient();
+            _stockInfoDetailRepository = stockInfoDetailRepository;
         }
 
 
@@ -146,7 +148,12 @@
                     }
                 }
 
-                
+                decimal totalStockQuantity = 0;
+                if (groupedData.Count > 0)
+                {
+                    totalStockQuantity = groupedData.Values.Sum(x => x.StockQuantity);
+                }
+
                 materielnfoStatistics = groupedData.Values.ToList();
                 int startIndex = (options.Page - 1) * options.Rows;
                 int endIndex = Math.Min(startIndex + options.Rows, materielnfoStatistics.Count);
@@ -160,12 +167,25 @@
                 }
 
                 int count = groupedData.Count;
-                return new PageGridData<StockDetailByMateriel>(count, materielnfoStatistics);
+                return new PageGridData<StockDetailByMateriel>(count, materielnfoStatistics)
+                {
+                    TotalStockQuantity = totalStockQuantity 
+                };
             }
             catch (Exception ex)
             {
                 return new PageGridData<StockDetailByMateriel>();
             }
         }
+
+        public WebResponseContent CalculateStock(string warehouseCode,string materielCode)
+        {
+           var calculateStock =_stockInfoDetailRepository.QueryData(x => x.WarehouseCode == warehouseCode && x.MaterielCode == materielCode).Sum(x => x.StockQuantity);
+           if(calculateStock == 0)
+            {
+                return WebResponseContent.Instance.Error("鏈壘鍒板簱瀛�");
+            }
+            return WebResponseContent.Instance.OK(data: calculateStock);
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
index ce7e8b9..0ca67c8 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs"
@@ -269,5 +269,11 @@
         {
             return Service.HandCloseOrder(orderIds);
         }
+
+        [HttpPost, Route("GetLocationType"), AllowAnonymous, MethodParamsValidate]
+        public WebResponseContent GetLocationType(string code)
+        {
+            return Service.GetLocationType(code);
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs"
index 088b88d..8dd9ee3 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs"
@@ -85,5 +85,11 @@
             }
             return WebResponseContent.Instance.OK(null, order);
         }
+
+        [HttpGet, Route("GetOrderNoByPalletCode"), AllowAnonymous, MethodParamsValidate]
+        public WebResponseContent GetOrderNoByPalletCode(string palletCode)
+        {
+            return Service.GetOrderNoByPalletCode(palletCode);
+        }
     }
 }
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockDetailByMaterielController.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockDetailByMaterielController.cs"
index 27e5858..fd3c85f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockDetailByMaterielController.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockDetailByMaterielController.cs"
@@ -1,4 +1,5 @@
-锘縰sing Microsoft.AspNetCore.Authorization;
+锘縰sing Autofac.Core;
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 using WIDESEA_Core;
 using WIDESEA_DTO.Stock;
@@ -22,5 +23,11 @@
         {
             return _stockDetailByMaterielService.GetPageGridData(options);
         }
+
+        [HttpPost, Route("CalculateStock"), AllowAnonymous]
+        public WebResponseContent CalculateStock(string warehouseCode,string materielCode)
+        {
+            return _stockDetailByMaterielService.CalculateStock(warehouseCode,materielCode);
+        }
     }
 }

--
Gitblit v1.9.3