From c397c5582f8c4a2bc00ed78a9e5ddba1d3024316 Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期六, 29 十一月 2025 17:51:48 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu

---
 项目代码/WIDESEA_WMSClient/src/extension/check/extend/StockSelect.vue                            |  347 ++++++++++++++++++++++++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs                      |   10 
 项目代码/WIDESEA_WMSClient/src/views/check/checkOrder.vue                                        |  176 ++++++------
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/ReCheckOrderController.cs |   19 +
 项目代码/WIDESEA_WMSClient/src/router/viewGird.js                                                |    5 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs             |   24 
 项目代码/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue                      |    1 
 项目代码/WIDESEA_WMSClient/src/views/check/ReCheckOrder.vue                                      |  115 ++++++++
 项目代码/WIDESEA_WMSClient/src/extension/check/recheckOrder.js                                   |   84 ++++++
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs         |    2 
 10 files changed, 674 insertions(+), 109 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/extend/StockSelect.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/extend/StockSelect.vue"
new file mode 100644
index 0000000..ae450b1
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/extend/StockSelect.vue"
@@ -0,0 +1,347 @@
+<template>
+  <div>
+    <vol-box
+      v-model="showDetialBox"
+      :lazy="true"
+      width="60%"
+      :padding="15"
+      title="鎸囧畾搴撳瓨"
+    >
+      <div class="box-head">
+        <el-alert :closable="false" style="width: 100%">
+          <el-row>
+            <el-col :span="16">
+              <span class="less-style">鐗╂枡鍚嶇О锛� {{ row.materielName }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style">鐗╂枡缂栧彿锛� {{ row.materielCode }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span class="less-style">闇�姹傛暟閲忥細 {{ row.qty }} </span>
+              <el-divider direction="vertical"></el-divider>
+              <span :class="selectionClass">宸查�夋暟閲忥細 {{ selectionSum }} </span>
+            </el-col>
+            <el-col :span="8">
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="getData"
+                >鍒锋柊</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="openOutboundDialog"
+                >鐩存帴鍑哄簱</el-link
+              >
+            </el-col>
+          </el-row>
+        </el-alert>
+      </div>
+      <div class="box-table" style="margin-top: 1%">
+        <el-table
+          ref="singleTable"
+          :data="tableData"
+          style="width: 100%; height: 100%"
+          highlight-current-row
+          @row-click="handleRowClick"
+          height="500px"
+          @selection-change="handleSelectionChange"
+        >
+          <el-table-column type="selection" width="55"> </el-table-column>
+          <el-table-column
+            label="搴忓彿"
+            type="index"
+            fixed="left"
+            width="55"
+            align="center"
+          ></el-table-column>
+          <el-table-column
+            v-for="(item, index) in tableColumns.filter((x) => !x.hidden)"
+            :key="index"
+            :prop="item.prop"
+            :label="item.title"
+            :width="item.width"
+            align="center"
+          >
+            <template #default="scoped" v-if="item.type == 'icon'">
+              <el-tooltip
+                class="item"
+                effect="dark"
+                :content="item.title"
+                placement="bottom"
+                ><el-button
+                  type="text"
+                  @click="tableButtonClick(scoped.row, item)"
+                  ><i :class="item.icon" style="font-size: 22px"></i></el-button
+              ></el-tooltip>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <template #footer>
+        <el-button type="danger" size="small" @click="showDetialBox = false"
+          >鍏抽棴</el-button
+        >
+      </template>
+    </vol-box>
+
+    <!-- 鍑哄簱绔欏彴閫夋嫨寮圭獥锛堥潤鎬佹ā鏉垮疄鐜帮級 -->
+    <el-dialog
+      v-model="showOutboundDialog"
+      title="鍑哄簱鎿嶄綔 - 閫夋嫨鍑哄簱绔欏彴"
+      width="500px"
+      :append-to-body="true"
+    >
+      <el-form
+        :model="outboundForm"
+        :rules="outboundRules"
+        ref="outboundFormRef"
+        label-width="100px"
+        style="padding: 0 20px"
+      >
+        <el-form-item label="鍑哄簱绔欏彴" prop="selectedPlatform" style="margin-bottom: 24px">
+          <el-select
+            v-model="outboundForm.selectedPlatform"
+            placeholder="璇烽�夋嫨鍑哄簱绔欏彴锛�3-12锛�"
+            style="width: 100%; height: 40px"
+          >
+            <el-option
+              v-for="platform in platformOptions"
+              :key="platform.value"
+              :label="platform.label"
+              :value="platform.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button @click="showOutboundDialog = false" style="margin-right: 8px">鍙栨秷</el-button>
+        <el-button type="primary" @click="confirmOutbound">纭畾鍑哄簱</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import VolBox from "@/components/basic/VolBox.vue";
+import { ElMessage } from "element-plus";
+
+export default {
+  components: { VolBox },
+  data() {
+    return {
+      row: null,
+      showDetialBox: false, 
+      tableData: [],
+      tableColumns: [
+        { prop: "materielCode", title: "鐗╂枡缂栧彿", type: "string", width: 150 },
+        { prop: "barcode", title: "鐗╂枡鏉$爜", type: "string", width: 150 },
+        { prop: "palletCode", title: "鎵樼洏缂栧彿", type: "string", width: 150 },
+        { prop: "locationCode", title: "璐т綅缂栧彿", type: "string", width: 180 },
+        { prop: "useableQuantity", title: "鍙敤鏁伴噺", type: "string" },
+      ],
+      selection: [],
+      selectionSum: 0,
+      selectionClass: "less-style",
+      originalQuantity: 0,
+
+      // 鍑哄簱寮圭獥鐩稿叧鏁版嵁
+      showOutboundDialog: false,
+      outboundForm: { selectedPlatform: "" }, // 琛ㄥ崟缁戝畾鏁版嵁
+      outboundRules: {
+        selectedPlatform: [
+          { required: true, message: "璇烽�夋嫨鍑哄簱绔欏彴", trigger: "change" },
+        ],
+      },
+      platformOptions: [
+        { label: "绔欏彴2", value: "2-1" },
+        { label: "绔欏彴3", value: "3-1" },
+      ],
+    };
+  },
+  methods: {
+    open(row) {
+      this.row = row;
+      this.showDetialBox = true;
+      this.getData();
+      console.log(row.id)
+      this.updateSelectionClass(); // 鍒濆鍖栧凡閫夋暟閲忔牱寮�
+    },
+
+    lockStock() {
+      this.http
+        .post(
+          "api/OutboundOrderDetail/LockOutboundStock?id=" + this.row.id,
+          this.selection,
+          "鏁版嵁澶勭悊涓�"
+        )
+        .then((x) => {
+          if (!x.status) return ElMessage.error(x.message);
+          ElMessage.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+
+    // 鎵撳紑鍑哄簱寮圭獥
+    openOutboundDialog() {
+      if (this.selection.length === 0) {
+        return ElMessage.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
+      }
+      // 閲嶇疆琛ㄥ崟閬垮厤娈嬬暀鍊�
+      this.outboundForm.selectedPlatform = "";
+      this.showOutboundDialog = true;
+    },
+
+    // 纭鍑哄簱鎿嶄綔
+    confirmOutbound() {
+      this.$refs.outboundFormRef.validate((valid) => {
+        if (!valid) return;
+
+
+     if (this.selection.length <= 0) {
+        return this.$message.error("璇峰嬀閫�");
+      }
+      let url = this.pkcx
+        ? "api/Task/GenerateOutboundTask?orderDetailId="
+        : "api/Task/GenerateOutboundTask?orderDetailId=";
+      this.http
+        .post(url + this.row.id, this.selection, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+
+      });
+    },
+    
+    // 鍥哄畾鏌ヨ绔嬪簱搴撳瓨
+    getData() {
+      const url = "api/StockInfo/GetStockSelectViews?materielCode=";
+      this.http
+        .post(
+          url + this.row.materielCode + "&orderId=" + this.row.id,
+          null,
+          "鏌ヨ涓�"
+        )
+        .then((x) => {
+          this.tableData = x;
+          // 鍒锋柊鍚庢竻绌轰箣鍓嶇殑閫夋嫨鍜岃鏁�
+          this.clearSelection();
+          this.selectionSum = 0;
+          this.originalQuantity = 0;
+          this.updateSelectionClass();
+        });
+    },
+
+    revokeAssign() {
+      this.http
+        .post(
+          "api/OutboundOrderDetail/RevokeLockOutboundStock?id=" + this.row.id,
+          null,
+          "鏁版嵁澶勭悊涓�"
+        )
+        .then((x) => {
+          if (!x.status) return ElMessage.error(x.message);
+          ElMessage.success("鎿嶄綔鎴愬姛");
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+
+    handleSelectionChange(val) {
+      this.selection = val;
+      // 璁$畻宸查�夋暟閲忥紙杞暟瀛楅伩鍏嶅瓧绗︿覆鎷兼帴锛�
+      this.selectionSum = val.reduce(
+        (acc, curr) => acc + Number(curr.useableQuantity || 0),
+        0
+      ) + this.originalQuantity;
+      this.updateSelectionClass();
+    },
+
+    // 鏇存柊宸查�夋暟閲忔牱寮�
+    updateSelectionClass() {
+      if (!this.row) return;
+      if (this.selectionSum === this.row.orderQuantity) {
+        this.selectionClass = "equle-style";
+      } else if (this.selectionSum < this.row.orderQuantity) {
+        this.selectionClass = "less-style";
+      } else {
+        this.selectionClass = "more-style";
+      }
+    },
+
+    toggleSelection(rows) {
+      rows ? rows.forEach((row) => this.$refs.singleTable.toggleRowSelection(row)) : this.clearSelection();
+    },
+
+    clearSelection() {
+      if (this.$refs.singleTable) {
+        this.$refs.singleTable.clearSelection();
+      }
+    },
+
+    handleRowClick(row) {
+      this.$refs.singleTable.toggleRowSelection(row);
+    },
+
+    // 鍥炬爣鎸夐挳鐐瑰嚮鍗犱綅鏂规硶锛堝彲鏍规嵁闇�姹傛墿灞曪級
+    tableButtonClick(row, item) {
+      console.log("鍥炬爣鎸夐挳鐐瑰嚮锛�", item.title, row);
+    },
+  },
+};
+</script>
+
+<style scoped>
+.less-style {
+  color: black;
+}
+
+.equle-style {
+  color: green;
+}
+
+.more-style {
+  color: red;
+}
+</style>
+
+<style>
+.text-button:hover {
+  background-color: #f0f9eb !important;
+}
+
+.el-table .warning-row {
+  background: oldlace;
+}
+
+.box-table .el-table tbody tr:hover > td {
+  background-color: #d8e0d4 !important;
+}
+
+.box-table .el-table tbody tr.current-row > td {
+  background-color: #f0f9eb !important;
+}
+
+.el-table .success-row {
+  background: #f0f9eb;
+}
+
+.box-table .el-table {
+  border: 1px solid #ebeef5;
+}
+
+.box-head .el-alert__content {
+  width: 100%;
+}
+</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/check/recheckOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/recheckOrder.js"
new file mode 100644
index 0000000..5637829
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/check/recheckOrder.js"
@@ -0,0 +1,84 @@
+/*****************************************************************************************
+**  Author:jxx 2022
+**  QQ:283591387
+**瀹屾暣鏂囨。瑙侊細http://v2.volcore.xyz/document/api 銆愪唬鐮佺敓鎴愰〉闈iewGrid銆�
+**甯哥敤绀轰緥瑙侊細http://v2.volcore.xyz/document/vueDev
+**鍚庡彴鎿嶄綔瑙侊細http://v2.volcore.xyz/document/netCoreDev
+*****************************************************************************************/
+//姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
+import gridBody from './extend/StockSelect.vue'
+
+let extension = {
+  components: {
+    //鏌ヨ鐣岄潰鎵╁睍缁勪欢
+    gridHeader: '',
+    gridBody: gridBody,
+    gridFooter: '',
+    //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
+    modelHeader: '',
+    modelBody: '',
+    modelFooter: ''
+  },
+  tableAction: '', //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
+  buttons: { view: [], box: [], detail: [] }, //鎵╁睍鐨勬寜閽�
+  methods: {
+     //涓嬮潰杩欎簺鏂规硶鍙互淇濈暀涔熷彲浠ュ垹闄�
+    onInit() {  //妗嗘灦鍒濆鍖栭厤缃墠锛�
+        this.columns.push({
+        field: '鎿嶄綔',
+        title: '鎿嶄綔',
+        width: 90,
+        fixed: 'right',
+        align: 'center',
+        formatter: (row) => {
+          return (
+            '<i style="cursor: pointer;color: #2d8cf0;"class="el-icon-view">鎸囧畾搴撳瓨</i>'
+          );
+        },
+        click: (row) => {
+          const table = this.$refs.table.$refs.table;
+          if (table) {
+            table.clearSelection();
+            table.toggleRowSelection(row, true);
+          }
+          this.$refs.gridBody.open(row);
+        }
+      });
+    },
+    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/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
index d796938..75e3cfb 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/outbound/extend/outOrderDetail.vue"
@@ -213,6 +213,7 @@
           title: "鎸囧畾搴撳瓨",
           type: "icon",
           width: 90,
+          hidden:true,
           icon: "el-icon-s-grid",
         },
         {
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js"
index 977eff2..3896357 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/router/viewGird.js"
@@ -212,6 +212,11 @@
     path: '/allocateOrder',
     name: 'Dt_AllocateOrder',
     component: () => import('@/views/inbound/Dt_AllocateOrder.vue')
+  },
+  {
+    path: '/reCheckOrder',
+    name: 'Dt_ReCheckOrder',
+    component: () => import('@/views/check/ReCheckOrder.vue')
   }
 ]
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/check/ReCheckOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/check/ReCheckOrder.vue"
new file mode 100644
index 0000000..62a8a5c
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/check/ReCheckOrder.vue"
@@ -0,0 +1,115 @@
+<!--
+*Author锛歫xx
+ *Contact锛�283591387@qq.com
+ *浠g爜鐢辨鏋剁敓鎴�,浠讳綍鏇存敼閮藉彲鑳藉鑷磋浠g爜鐢熸垚鍣ㄨ鐩�
+ *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_CheckOrder.js姝ゅ缂栧啓
+ -->
+<template>
+    <view-grid ref="grid" :columns="columns" :editFormFields="editFormFields"
+        :editFormOptions="editFormOptions" :searchFormFields="searchFormFields" :searchFormOptions="searchFormOptions"
+        :table="table" :extend="extend">
+    </view-grid>
+</template>
+<script>
+import extend from "@/extension/check/recheckOrder.js"; 
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+    setup() {
+        const table = ref({
+            key: 'id', 
+            footer: "Foots",
+            cnName: '閲嶆鍗�', 
+            name: 'Dt_ReCheckOrder', 
+            url: "/ReCheckOrder/", 
+            sortName: "id" 
+        });
+
+        
+        const editFormFields = ref({
+            OrderNo: "",
+            MaterielCode: "",
+            BatchNo: "",
+            WarehouseCode: "",
+            Unit: "",
+            FactoryArea: "",
+            Result: 0,
+            InspectionNumber: 0,
+            Qty: 0,
+            SignSeq: 0
+        });
+
+       
+        const editFormOptions = ref([
+            [
+                { title: "澶嶆鍗曞彿", field: "OrderNo", type: "input", require: true },
+                { title: "鐗╂枡缂栧彿", field: "MaterielCode", type: "input", require: true },
+                { title: "鎵规鍙�", field: "BatchNo", type: "input", require: true },
+                { title: "浠撳簱缂栫爜", field: "WarehouseCode", type: "input", require: true }
+            ],
+            [
+                { title: "鍗曚綅", field: "Unit", type: "input", require: true },
+                { title: "鍘傚尯", field: "FactoryArea", type: "input", require: true },
+                { title: "妫�楠岀粨鏋�", field: "Result", type: "select", require: true,dataKey: "inOrderType",data: []},
+                { title: "妫�楠屾鏁�", field: "InspectionNumber", type: "number", require: true, min: 1 }
+            ],
+            [
+                { title: "鏁伴噺", field: "Qty", type: "number", require: true, min: 0 },
+                { title: "绛惧瓧椤哄簭", field: "SignSeq", type: "number", require: true, min: 1 }
+            ]
+        ]);
+
+        
+        const searchFormFields = ref({
+            OrderNo: "",
+            MaterielCode: "",
+            BatchNo: "",
+            WarehouseCode: "",
+            FactoryArea: "",
+            Result: ""
+        });
+
+        
+        const searchFormOptions = ref([
+            [
+                { title: "澶嶆鍗曞彿", field: "OrderNo", type: "like" },
+                { title: "鐗╂枡缂栧彿", field: "MaterielCode", type: "like" },
+                { title: "鎵规鍙�", field: "BatchNo", type: "like" },
+                { title: "浠撳簱缂栫爜", field: "WarehouseCode", type: "like" }
+            ],
+            [
+                { title: "鍘傚尯", field: "FactoryArea", type: "like" },
+                { title: "妫�楠岀粨鏋�", field: "Result", type: "select",dataKey: "inOrderType", data: []}
+            ]
+        ]);
+
+        
+        const columns = ref([
+            { field: 'id', title: '涓婚敭', type: 'int', width: 150, hidden: true, readonly: true, require: true, align: 'left' },
+            { field: 'orderNo', title: '澶嶆鍗曞彿', type: 'string', width: 160, require: true, align: 'left', sort: true },
+            { field: 'materielCode', title: '鐗╂枡缂栧彿', type: 'string', width: 160, require: true, align: 'left' },
+            { field: 'batchNo', title: '鎵规鍙�', type: 'string', width: 160, require: true, align: 'left' },
+            { field: 'warehouseCode', title: '浠撳簱缂栫爜', type: 'string', width: 160, require: true, align: 'left' },
+            { field: 'unit', title: '鍗曚綅', type: 'string', width: 100, require: true, align: 'left' },
+            { field: 'factoryArea', title: '鍘傚尯', type: 'string', width: 120, require: true, align: 'left' },
+            { field: 'result', title: '妫�楠岀粨鏋�', type: 'int', width: 110, require: true, align: 'left',bind: { key: "inOrderType", data: [] },},
+            { field: 'inspectionNumber', title: '妫�楠屾鏁�', type: 'int', width: 110, require: true, align: 'left' },
+            { field: 'qty', title: '鏁伴噺', type: 'float', width: 110, require: true, align: 'left' },
+            { field: 'signSeq', title: '绛惧瓧椤哄簭', type: 'int', width: 110, require: true, align: 'left' },
+            { field: 'creater', title: '鍒涘缓鑰�', type: 'string', width: 110, require: true, align: 'left' },
+            { field: 'createDate', title: '鍒涘缓鏃堕棿', type: 'datetime', width: 150, require: true, align: 'left', sort: true },
+            { field: 'modifier', title: '淇敼浜�', type: 'string', width: 100, align: 'left' },
+            { field: 'modifyDate', title: '淇敼鏃ユ湡', type: 'datetime', width: 150, align: 'left', sort: true },
+        ]);
+
+        return {
+            table,
+            extend,
+            editFormFields,
+            editFormOptions,
+            searchFormFields,
+            searchFormOptions,
+            columns
+        };
+    },
+});
+</script>
\ No newline at end of file
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/check/checkOrder.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/check/checkOrder.vue"
index 41ee0fc..d84f1b9 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/check/checkOrder.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/views/check/checkOrder.vue"
@@ -5,98 +5,92 @@
  *涓氬姟璇峰湪@/extension/widesea_wcs/order/Dt_CheckOrder.js姝ゅ缂栧啓
  -->
 <template>
-    <view-grid ref="grid"
-               :columns="columns"
-               :detail="detail"
-               :editFormFields="editFormFields"
-               :editFormOptions="editFormOptions"
-               :searchFormFields="searchFormFields"
-               :searchFormOptions="searchFormOptions"
-               :table="table"
-               :extend="extend">
+    <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/check/checkOrder.js";
-    import { ref, defineComponent } from "vue";
-    export default defineComponent({
-        setup() {
-            const table = ref({
-                key: 'checkOrderId',
-                footer: "Foots",
-                cnName: '妫�楠屽崟',
-                name: 'checkOrder',
-                url: "/CheckOrder/",
-                sortName: "checkOrderId"
-            });
-            const editFormFields = ref({});
-            const editFormOptions = ref([]);
-            const searchFormFields = ref({
-                checkOrderNo:"",
-                receiveOrderNo:"",
-                checkOrderStatus:"",
-                auditStatus:""
-            });
-            const searchFormOptions = ref([
-                [
-                    {title:"妫�楠屽崟鍙�", field:"checkOrderNo",type:"like"},
-                    {title:"鏀惰揣鍗曞彿", field:"receiveOrderNo",type:"like"},
-                    {title:"璐ㄦ鍗曠姸鎬�", field:"checkOrderStatus",type:"select",dataKey:"",data:[]},
-                    {title:"瀹℃壒鐘舵��", field:"auditStatus",type:"select",dataKey:"",data:[]},
-                ],
-                [
-                    {title:"鏀惰揣鍗曟槑缁嗚鍙�", field:"receiveDetailRowNo",type:"like"},
-                    {title:"鐗╂枡缂栧彿", field:"materielCode",type:"like"},
-                    {title:"妫�楠岀粨鏋�", field:"result",type:"like"},
-                ]
-            ]);
-            const columns = ref([{field:'checkOrderId',title:'涓婚敭',type:'int',width:150,hidden:true,readonly:true,require:true,align:'left'},
-                       {field:'checkOrderNo',title:'妫�楠屽崟鍙�',type:'string',width:160,require:true,align:'left',sort:true},
-                       {field:'receiveOrderNo',title:'鏀惰揣鍗曞彿',type:'string',width:160,require:true,align:'left'},
-                       {field:'checkOrderStatus',title:'璐ㄦ鍗曠姸鎬�',type:'int',width:110,require:true,align:'left'},
-                       {field:'auditStatus',title:'瀹℃壒鐘舵��',type:'int',width:110,require:true,align:'left'},
-                       {field:'receiveDetailRowNo',title:'鏀惰揣鍗曟槑缁嗚鍙�',type:'int',width:110,require:true,align:'left'},
-                       {field:'materielCode',title:'鐗╂枡缂栧彿',type:'string',width:110,require:true,align:'left'},
-                       {field:'qualifiedQuantity',title:'鍚堟牸鏁伴噺',type:'float',width:110,align:'left'},
-                       {field:'defectedQuantity',title:'鐗归噰鏁伴噺',type:'float',width:110,align:'left'},
-                       {field:'returnQuantity',title:'閫�璐ф暟閲�',type:'float',width:110,align:'left'},
-                       {field:'scrappedQuantity',title:'鎶ュ簾鏁伴噺',type:'float',width:110,align:'left'},
-                       {field:'receivedQuantity',title:'妫�楠屾�绘暟',type:'float',width:110,require:true,align:'left'},
-                       {field:'result',title:'妫�楠岀粨鏋�',type:'string',width:110,align:'left'},
-                       {field:'defectedNote',title:'鐗归噰璇存槑',type:'string',width:110,align:'left'},
-                       {field:'checkUserName',title:'妫�楠屼汉',type:'string',width:110,align:'left'},
-                       {field:'creater',title:'鍒涘缓鑰�',type:'string',width:110,require:true,align:'left'},
-                       {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
-                       {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
-                       {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}]);
-            const detail = ref({
-                cnName: "妫�楠岀粨鏋�",
-                table: "CheckOrderResult",
-                columns: [
-                    {field:'id',title:'涓婚敭',type:'int',width:110,hidden:true,readonly:true,require:true,align:'left'},
-                    {field:'checkOrderId',title:'妫�楠屽崟涓婚敭',type:'int',width:110,require:true,align:'left',sort:true},
-                    {field:'defectCode',title:'缂洪櫡浠g爜',type:'string',width:110,require:true,align:'left'},
-                    {field:'result',title:'妫�楠岀粨鏋�',type:'string',width:110,require:true,align:'left'},
-                    {field:'quantity',title:'鏁伴噺',type:'float',width:110,require:true,align:'left'},
-                    {field:'note',title:'澶囨敞',type:'string',width:220,align:'left'},
-                    {field:'creater',title:'鍒涘缓鑰�',type:'string',width:110,require:true,align:'left'},
-                    {field:'createDate',title:'鍒涘缓鏃堕棿',type:'datetime',width:150,require:true,align:'left',sort:true},
-                    {field:'modifier',title:'淇敼浜�',type:'string',width:100,align:'left'},
-                    {field:'modifyDate',title:'淇敼鏃ユ湡',type:'datetime',width:150,align:'left',sort:true}
-                ],
-                sortName: "id",
-                key: "id"
-            });
-            return {
-                table,
-                extend,
-                editFormFields,
-                editFormOptions,
-                searchFormFields,
-                searchFormOptions,
-                columns,
-                detail,
-            };
-        },
-    });
+import extend from "@/extension/check/checkOrder.js";
+import { ref, defineComponent } from "vue";
+export default defineComponent({
+    setup() {
+        const table = ref({
+            key: 'checkOrderId',
+            footer: "Foots",
+            cnName: '妫�楠屽崟',
+            name: 'checkOrder',
+            url: "/CheckOrder/",
+            sortName: "checkOrderId"
+        });
+        const editFormFields = ref({});
+        const editFormOptions = ref([]);
+        const searchFormFields = ref({
+            checkOrderNo: "",
+            receiveOrderNo: "",
+            checkOrderStatus: "",
+            auditStatus: ""
+        });
+        const searchFormOptions = ref([
+            [
+                { title: "妫�楠屽崟鍙�", field: "checkOrderNo", type: "like" },
+                { title: "鏀惰揣鍗曞彿", field: "receiveOrderNo", type: "like" },
+                { title: "璐ㄦ鍗曠姸鎬�", field: "checkOrderStatus", type: "select", dataKey: "", data: [] },
+                { title: "瀹℃壒鐘舵��", field: "auditStatus", type: "select", dataKey: "", data: [] },
+            ],
+            [
+                { title: "鏀惰揣鍗曟槑缁嗚鍙�", field: "receiveDetailRowNo", type: "like" },
+                { title: "鐗╂枡缂栧彿", field: "materielCode", type: "like" },
+                { title: "妫�楠岀粨鏋�", field: "result", type: "like" },
+            ]
+        ]);
+        const columns = ref([{ field: 'checkOrderId', title: '涓婚敭', type: 'int', width: 150, hidden: true, readonly: true, require: true, align: 'left' },
+        { field: 'checkOrderNo', title: '妫�楠屽崟鍙�', type: 'string', width: 160, require: true, align: 'left', sort: true },
+        { field: 'receiveOrderNo', title: '鏀惰揣鍗曞彿', type: 'string', width: 160, require: true, align: 'left' },
+        { field: 'checkOrderStatus', title: '璐ㄦ鍗曠姸鎬�', type: 'int', width: 110, require: true, align: 'left' },
+        { field: 'auditStatus', title: '瀹℃壒鐘舵��', type: 'int', width: 110, require: true, align: 'left' },
+        { field: 'receiveDetailRowNo', title: '鏀惰揣鍗曟槑缁嗚鍙�', type: 'int', width: 110, require: true, align: 'left' },
+        { field: 'materielCode', title: '鐗╂枡缂栧彿', type: 'string', width: 110, require: true, align: 'left' },
+        { field: 'qualifiedQuantity', title: '鍚堟牸鏁伴噺', type: 'float', width: 110, align: 'left' },
+        { field: 'defectedQuantity', title: '鐗归噰鏁伴噺', type: 'float', width: 110, align: 'left' },
+        { field: 'returnQuantity', title: '閫�璐ф暟閲�', type: 'float', width: 110, align: 'left' },
+        { field: 'scrappedQuantity', title: '鎶ュ簾鏁伴噺', type: 'float', width: 110, align: 'left' },
+        { field: 'receivedQuantity', title: '妫�楠屾�绘暟', type: 'float', width: 110, require: true, align: 'left' },
+        { field: 'result', title: '妫�楠岀粨鏋�', type: 'string', width: 110, align: 'left' },
+        { field: 'defectedNote', title: '鐗归噰璇存槑', type: 'string', width: 110, align: 'left' },
+        { field: 'checkUserName', title: '妫�楠屼汉', type: 'string', width: 110, align: 'left' },
+        { field: 'creater', title: '鍒涘缓鑰�', type: 'string', width: 110, require: true, align: 'left' },
+        { field: 'createDate', title: '鍒涘缓鏃堕棿', type: 'datetime', width: 150, require: true, align: 'left', sort: true },
+        { field: 'modifier', title: '淇敼浜�', type: 'string', width: 100, align: 'left' },
+        { field: 'modifyDate', title: '淇敼鏃ユ湡', type: 'datetime', width: 150, align: 'left', sort: true }]);
+        const detail = ref({
+            cnName: "妫�楠岀粨鏋�",
+            table: "CheckOrderResult",
+            columns: [
+                { field: 'id', title: '涓婚敭', type: 'int', width: 110, hidden: true, readonly: true, require: true, align: 'left' },
+                { field: 'checkOrderId', title: '妫�楠屽崟涓婚敭', type: 'int', width: 110, require: true, align: 'left', sort: true },
+                { field: 'defectCode', title: '缂洪櫡浠g爜', type: 'string', width: 110, require: true, align: 'left' },
+                { field: 'result', title: '妫�楠岀粨鏋�', type: 'string', width: 110, require: true, align: 'left' },
+                { field: 'quantity', title: '鏁伴噺', type: 'float', width: 110, require: true, align: 'left' },
+                { field: 'note', title: '澶囨敞', type: 'string', width: 220, align: 'left' },
+                { field: 'creater', title: '鍒涘缓鑰�', type: 'string', width: 110, require: true, align: 'left' },
+                { field: 'createDate', title: '鍒涘缓鏃堕棿', type: 'datetime', width: 150, require: true, align: 'left', sort: true },
+                { field: 'modifier', title: '淇敼浜�', type: 'string', width: 100, align: 'left' },
+                { field: 'modifyDate', title: '淇敼鏃ユ湡', type: 'datetime', width: 150, align: 'left', sort: true }
+            ],
+            sortName: "id",
+            key: "id"
+        });
+        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\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.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/OutboundOrderDetailService.cs"
index 94e20ec..c992e3d 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/OutboundOrderDetailService.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/OutboundOrderDetailService.cs"
@@ -98,7 +98,7 @@
 
                 if (!stockInfos.Any())
                 {
-                    throw new Exception($"鐗╂枡[{item.MaterielCode}]鎵规[{item.BatchNo}]鏈壘鍒板彲鍒嗛厤搴撳瓨");
+                    throw new Exception($"鐗╂枡[{item.MaterielCode}]鎵规[{item.BatchNo}]渚涘簲鍟哰{item.SupplyCode}]鏈壘鍒板彲鍒嗛厤搴撳瓨");
                 }
 
                 // 鍒嗛厤搴撳瓨锛堟寜鍏堣繘鍏堝嚭锛�
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/OutboundPickingService.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/OutboundPickingService.cs"
index cbd9442..f9c44da 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/OutboundPickingService.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/OutboundPickingService.cs"
@@ -765,19 +765,19 @@
                 if (currentLockInfo.PickedQty < context.PickingRecord.PickQuantity)
                     return ValidationResult<bool>.Error($"閿佸畾淇℃伅宸叉嫞閫夋暟閲�({currentLockInfo.PickedQty})灏忎簬鍙栨秷鏁伴噺({context.PickingRecord.PickQuantity})");
 
-                // 楠岃瘉搴撳瓨鏁版嵁
-                var currentStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-                    .FirstAsync(x => x.Barcode == context.PickingRecord.Barcode && x.StockId == context.PickingRecord.StockId);
+                ////// 楠岃瘉搴撳瓨鏁版嵁
+                ////var currentStockDetail = await _stockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+                ////    .FirstAsync(x => x.Barcode == context.PickingRecord.Barcode && x.StockId == context.PickingRecord.StockId);
 
-                if (currentStockDetail == null)
-                    return ValidationResult<bool>.Error($"鏈壘鍒板搴旂殑搴撳瓨鏄庣粏璁板綍");
+                ////if (currentStockDetail == null)
+                ////    return ValidationResult<bool>.Error($"鏈壘鍒板搴旂殑搴撳瓨鏄庣粏璁板綍");
 
-                if (currentStockDetail.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt() ||
-                    currentStockDetail.Status == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt())
-                    return ValidationResult<bool>.Error($"鏉$爜{context.PickingRecord.Barcode}宸茬粡鍥炲簱锛屾棤娉曞彇娑堝垎鎷�");
+                ////if (currentStockDetail.Status == StockStatusEmun.鍏ュ簱纭.ObjToInt() ||
+                ////    currentStockDetail.Status == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt())
+                ////    return ValidationResult<bool>.Error($"鏉$爜{context.PickingRecord.Barcode}宸茬粡鍥炲簱锛屾棤娉曞彇娑堝垎鎷�");
 
                 // 楠岃瘉鐘舵�佹祦杞殑鍚堟硶鎬�
-                if (!await CanCancelPicking(currentLockInfo, currentStockDetail))
+                if (!await CanCancelPicking(currentLockInfo, null))
                     return ValidationResult<bool>.Error($"褰撳墠鐘舵�佷笉鍏佽鍙栨秷鍒嗘嫞");
 
                 return ValidationResult<bool>.Success(true);
@@ -795,9 +795,9 @@
             if (lockInfo.Status != (int)OutLockStockStatusEnum.鎷i�夊畬鎴�)
                 return false;
 
-            // 搴撳瓨鐘舵�佹鏌�
-            if (stockDetail.Status == StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
-                return false;
+            ////// 搴撳瓨鐘舵�佹鏌�
+            ////if (stockDetail.Status == StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt())
+            ////    return false;
 
             // 濡傛灉鏄媶鍖呰褰曪紝杩橀渶瑕佹鏌ョ埗閿佸畾淇℃伅鐘舵��
             if (lockInfo.IsSplitted == 1 && lockInfo.ParentLockId.HasValue)
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/StockInfoService.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/StockInfoService.cs"
index e52e206..47b932e 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/StockInfoService.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/StockInfoService.cs"
@@ -311,9 +311,9 @@
                 // 鎵ц鏌ヨ骞舵寜鍏堣繘鍏堝嚭鎺掑簭
                 var stocks = stockQuery.ToList()
                     .Where(x => x.Details.Any(d =>
-                        d.MaterielCode == materielCode &&
-                        d.BatchNo == orderDetail.BatchNo &&
-                        d.SupplyCode == orderDetail.SupplyCode &&
+                        d.MaterielCode == materielCode && 
+                        string.IsNullOrEmpty(orderDetail.BatchNo)?true: d.BatchNo == orderDetail.BatchNo&&
+                        string.IsNullOrEmpty(orderDetail.BatchNo)?true:d.SupplyCode == orderDetail.SupplyCode &&
                         d.StockQuantity > d.OutboundQuantity
                     ))
                     .OrderBy(x => x.CreateDate)
@@ -323,8 +323,8 @@
                 {
                     var relevantDetails = stock.Details
                         .Where(d => d.MaterielCode == materielCode &&
-                                   d.BatchNo == orderDetail.BatchNo &&
-                                   d.SupplyCode == orderDetail.SupplyCode &&
+                                   string.IsNullOrEmpty(orderDetail.BatchNo) ? true : d.BatchNo == orderDetail.BatchNo &&
+                                   string.IsNullOrEmpty(orderDetail.BatchNo) ? true : d.SupplyCode == orderDetail.SupplyCode &&
                                    d.StockQuantity > d.OutboundQuantity)
                         .ToList();
 
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/Check/ReCheckOrderController.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/Check/ReCheckOrderController.cs"
new file mode 100644
index 0000000..216b453
--- /dev/null
+++ "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/Check/ReCheckOrderController.cs"
@@ -0,0 +1,19 @@
+锘縰sing Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core.BaseController;
+using WIDESEA_ICheckService;
+using WIDESEA_Model.Models.Check;
+
+namespace WIDESEA_WMSServer.Controllers.Check
+{
+    /// <summary>
+    /// 閲嶆鍗�
+    /// </summary>
+    [Route("api/ReCheckOrder")]
+    [ApiController]
+    public class ReCheckOrderController : ApiBaseController<IReCheckOrderService, Dt_ReCheckOrder>
+    {
+        public ReCheckOrderController(IReCheckOrderService service) : base(service)
+        {
+        }
+    }
+}

--
Gitblit v1.9.3