From b13d3d2c634df625dcaa74371f1d36a8376851b4 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期二, 06 一月 2026 14:54:16 +0800
Subject: [PATCH] 优化撤销组盘功能

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs                   |  153 +++++++++----
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs |    4 
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs                 |    2 
 项目代码/WIDESEA_WMSClient/config/buttons.js                                                       |    8 
 项目代码/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js                                   |  290 +-------------------------
 项目代码/WIDESEA_WMSClient/src/extension/inbound/extend/UndoPalletGroup.vue                        |  170 +++++++++++++++
 6 files changed, 295 insertions(+), 332 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 9d55312..456f9a8 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"
@@ -307,6 +307,14 @@
     type: 'warning',
     onClick: function () {
     }
+},{
+    name: "鎾ら攢缁勭洏",
+    icon: '',
+    class: '',
+    value: 'UndoPalletGroup',
+    type: 'warning',
+    onClick: function () {
+    }
 },
 ]
 
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/UndoPalletGroup.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/UndoPalletGroup.vue"
new file mode 100644
index 0000000..e5c00d1
--- /dev/null
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/extend/UndoPalletGroup.vue"
@@ -0,0 +1,170 @@
+<template>
+  <vol-box v-model="show" title="鎾ら攢缁勭洏" :width="500" :height="300">
+    <template #content>
+      <el-form ref="form" :model="form" :rules="rules" label-width="90px">
+        <el-form-item label="鎵樼洏鏉$爜:" prop="code">
+          <el-input
+            v-model="form.code"
+            placeholder="璇锋壂鎻�/杈撳叆鎵樼洏鏉$爜"
+            @keydown.enter.prevent="submit"
+            clearable
+            @paste="handlePaste"
+            @input="handleInput"
+            ref="boxCodeInput"
+            autocomplete="off"
+            maxlength="50"
+          />
+        </el-form-item>
+      </el-form>
+    </template>
+
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button @click="onCancel">鍙栨秷</el-button>
+        <el-button type="primary" @click="submit">纭鎾ら攢</el-button>
+      </div>
+    </template>
+  </vol-box>
+</template>
+
+<script>
+import VolBox from '@/components/basic/VolBox.vue'
+
+export default {
+  components: { VolBox },
+  props: {
+    value: { type: Boolean, default: false }
+  },
+  data() {
+    return {
+      show: false,
+      form: {
+        code: ''
+      },
+      rules: {
+        code: [
+          { required: true, message: '璇疯緭鍏ユ墭鐩樺彿', trigger: ['blur', 'change'] },
+          { min: 1, max: 50, message: '鎵樼洏鍙烽暱搴︿笉鑳借秴杩�50涓瓧绗�', trigger: ['blur', 'input'] }
+        ]
+      }
+    }
+  },
+  methods: {
+    open() {
+      this.show = true
+    },
+
+    async submit() {
+      try {
+        await this.$refs.form.validate()
+      } catch (error) {
+        this.$message.warning('璇疯緭鍏ユ湁鏁堢殑鎵樼洏鍙�')
+        this.focusAndSelectInput()
+        return
+      }
+
+      try {
+        const response = await this.http.post(
+          `/api/InboundOrder/UndoPalletGroup?code=${encodeURIComponent(this.form.code.trim())}`
+        )
+        const { status, message, data } = response
+
+        if (status) {
+          this.$message.success(message || '鎾ら攢缁勭洏鎴愬姛')
+          this.refresh()
+
+          if (message && message.includes('鎵樼洏浠嶆湁鍓╀綑鏄庣粏')) {
+            this.form.code = ''
+            this.$refs.form.clearValidate('code')
+            this.focusAndSelectInput()
+          } else {
+            this.show = false
+          }
+        } else {
+          this.$message.error(message || data?.message || '鎾ら攢缁勭洏澶辫触')
+          this.focusAndSelectInput()
+        }
+      } catch (error) {
+        console.error('鎾ら攢缁勭洏璇锋眰寮傚父锛�', error)
+        this.$message.error('缃戠粶寮傚父鎴栨帴鍙i敊璇紝璇风◢鍚庨噸璇�')
+        this.focusAndSelectInput()
+      }
+    },
+
+    handleInput(value) {
+      this.form.code = value.replace(/[^a-zA-Z0-9]/g, '').toUpperCase()
+    },
+
+    handlePaste(e) {
+      const clipboardData = e.clipboardData || window.clipboardData
+      const pastedText = clipboardData.getData('text')
+      const cleanedText = pastedText.replace(/[^a-zA-Z0-9]/g, '').toUpperCase()
+      if (cleanedText) {
+        this.form.code = cleanedText
+        setTimeout(() => {
+          this.submit()
+        }, 50)
+      }
+      e.preventDefault()
+    },
+
+    focusAndSelectInput() {
+      this.$nextTick(() => {
+        setTimeout(() => {
+          const inputRef = this.$refs.boxCodeInput
+          if (inputRef) {
+            const inputEl = inputRef.$el ? inputRef.$el.querySelector('input') : inputRef
+            if (inputEl) {
+              inputEl.focus()
+              inputEl.select()
+            }
+          }
+        }, 100)
+      })
+    },
+
+    onCancel() {
+      this.$message.info('鍙栨秷鎾ら攢缁勭洏')
+      this.show = false
+    },
+
+    refresh() {
+      this.$emit('refresh')
+    }
+  },
+  watch: {
+    value(val) {
+      this.show = val
+    },
+    show(val) {
+      this.$emit('input', val)
+      if (val) {
+        // 寮圭獥鎵撳紑鏃跺欢杩熻仛鐒︼紝纭繚DOM宸叉覆鏌�
+        this.$nextTick(() => {
+          setTimeout(() => {
+            const inputRef = this.$refs.boxCodeInput
+            if (inputRef) {
+              const inputEl = inputRef.$el ? inputRef.$el.querySelector('input') : inputRef
+              if (inputEl) {
+                inputEl.focus()
+                inputEl.select() // 閫変腑鍐呭锛屾柟渚跨洿鎺ユ壂鐮佽鐩�
+              }
+            }
+          }, 100)
+        })
+      } else {
+        this.form.code = ''
+        if (this.$refs.form) {
+          this.$refs.form.clearValidate()
+        }
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+.dialog-footer {
+  text-align: right;
+}
+</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/inbound/inboundOrder.js" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js"
index e70505c..014b9b7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WIDESEA_WMSClient/src/extension/inbound/inboundOrder.js"
@@ -1,24 +1,13 @@
 //姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
 import gridHeader from "./extend/EmptyTrayInbound.vue";
 import gridBody from "./extend/Pallet.vue";
-import http from "@/api/http.js";
-import { h, createVNode, render, reactive, ref } from "vue";
-import {
-  ElDialog,
-  ElForm,
-  ElFormItem,
-  ElInput,
-  ElButton,
-  ElMessage,
-  ElSelect,
-  ElOption,
-} from "element-plus";
+import gridFooter from "./extend/UndoPalletGroup.vue";
 let extension = {
   components: {
     //鏌ヨ鐣岄潰鎵╁睍缁勪欢
     gridHeader: gridHeader,
     gridBody: gridBody,
-    gridFooter: "",
+    gridFooter: gridFooter,
     //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
     modelHeader: "",
     modelBody: "",
@@ -27,243 +16,7 @@
   tableAction: "", //鎸囧畾鏌愬紶琛ㄧ殑鏉冮檺(杩欓噷濉啓琛ㄥ悕,榛樿涓嶇敤濉啓)
   buttons: {
     view: [
-      {
-        name: "鎾ら攢缁勭洏",
-        type: "primary",
-        value: "鎾ら攢缁勭洏",
-        onClick: function() {
-          console.log("鎾ら攢缁勭洏鎸夐挳琚偣鍑�");
-          const mountNode = document.createElement("div");
-          document.body.appendChild(mountNode);
-
-          // 鍝嶅簲寮忚〃鍗曟暟鎹細鎵樼洏鍙凤紙蹇呭~锛�
-          const formData = reactive({
-            palletCode: "", // 鎵樼洏鍙疯緭鍏ユ
-            barcode: "",
-          });
-
-          // 鎻愪氦琛ㄥ崟鐨勭粺涓�閫昏緫
-          const submitForm = async () => {
-            const formRef = vnode.component.refs.cancelPalletForm;
-            try {
-              // 鎵ц琛ㄥ崟鏍¢獙锛堟墭鐩樺彿蹇呭~锛�
-              await formRef.validate();
-            } catch (err) {
-              ElMessage.warning("璇疯緭鍏ユ湁鏁堢殑鎵樼洏鍙�");
-              return;
-            }
-
-            // 鍙戣捣鎾ら攢缁勭洏璇锋眰
-            try {
-              const response = await http.post(
-                "/api/InboundOrder/UndoPalletGroup?palletCode=" +
-                  formData.palletCode.trim() +
-                  "&barcode=" +
-                  formData.barcode.trim()
-              );
-              const { status, message, data } = response;
-              if (status) {
-                ElMessage.success(response.message);
-                this.refresh(); // 鎴愬姛鍚庡埛鏂板垪琛�
-                // 鍏抽棴瀵硅瘽妗�
-                render(null, mountNode);
-                document.body.removeChild(mountNode);
-              } else {
-                ElMessage.error(message || data?.message || "鎾ら攢缁勭洏澶辫触");
-                selectPalletCodeInput(); // 閫変腑杈撳叆妗嗘柟渚块噸鏂拌緭鍏�
-              }
-            } catch (error) {
-              console.error("鎾ら攢缁勭洏璇锋眰寮傚父锛�", error);
-              ElMessage.error("缃戠粶寮傚父鎴栨帴鍙i敊璇紝璇风◢鍚庨噸璇�");
-              selectPalletCodeInput();
-            }
-          };
-
-          // 閫変腑杈撳叆妗嗘枃鏈紙鏂逛究閲嶆柊杈撳叆锛�
-          const selectPalletCodeInput = () => {
-            setTimeout(() => {
-              const inputRef = vnode.component.refs.palletCodeInput;
-              if (inputRef) {
-                const targetInput =
-                  inputRef.$el?.querySelector("input") || inputRef;
-                targetInput?.focus();
-                targetInput?.select();
-              }
-            }, 100);
-          };
-
-          // 鍒涘缓瀵硅瘽妗哣Node
-          const vnode = createVNode(
-            ElDialog,
-            {
-              title: "鎾ら攢缁勭洏",
-              width: "400px",
-              modelValue: true,
-              appendToBody: true,
-              onOpened: () => {
-                // 瀵硅瘽妗嗘墦寮�鍚庤嚜鍔ㄨ仛鐒﹁緭鍏ユ
-                setTimeout(() => {
-                  const inputRef = vnode.component.refs.palletCodeInput;
-                  inputRef?.focus();
-                }, 100);
-              },
-              "onUpdate:modelValue": (isVisible) => {
-                if (!isVisible) {
-                  render(null, mountNode);
-                  document.body.removeChild(mountNode);
-                }
-              },
-            },
-            {
-              default: () =>
-                h(
-                  ElForm,
-                  {
-                    model: formData,
-                    rules: {
-                      palletCode: [
-                        {
-                          required: true,
-                          message: "璇疯緭鍏ユ墭鐩樺彿",
-                          trigger: ["blur", "enter"],
-                        },
-                        {
-                          min: 1,
-                          max: 50,
-                          message: "鎵樼洏鍙烽暱搴︿笉鑳借秴杩�50涓瓧绗�",
-                          trigger: ["blur", "input"],
-                        },
-                      ],
-                    },
-                    ref: "cancelPalletForm",
-                  },
-                  [
-                    // 鎵樼洏鍙疯緭鍏ラ」
-                    h(
-                      ElFormItem,
-                      { label: "鎵樼洏鏉$爜", prop: "palletCode", required: true },
-                      [
-                        h(ElInput, {
-                          type: "text",
-                          modelValue: formData.palletCode,
-                          "onUpdate:modelValue": (val) => {
-                            formData.palletCode = val;
-                          },
-                          ref: "palletCodeInput",
-                          placeholder: "鎵爜杈撳叆鎴栨墜鍔ㄨ緭鍏ユ墭鐩樺彿",
-                          maxLength: 50,
-                          // 鐩戝惉鍥炶溅浜嬩欢锛堟壂鐮佹灙榛樿浼氬彂閫佸洖杞︼級
-                          onKeydown: (e) => {
-                            if (e.key === "Enter") {
-                              e.preventDefault();
-                              submitForm();
-                            }
-                          },
-                        }),
-                      ]
-                    ),
-                    h(ElFormItem, { label: " 鍐呯鏍囩", prop: "barcode" }, [
-                      h(ElInput, {
-                        type: "text",
-                        modelValue: formData.barcode,
-                        "onUpdate:modelValue": (val) => {
-                          formData.barcode = val;
-                        },
-                        placeholder: "鍙�夛紝鎵爜杈撳叆鎴栨墜鍔ㄨ緭鍏ユ潯鐮�",
-                        maxLength: 50,
-                        onKeydown: (e) => {
-                          if (e.key === "Enter") {
-                            e.preventDefault();
-                            submitForm();
-                          }
-                        },
-                      }),
-                    ]),
-                    // 搴曢儴鎸夐挳鍖�
-                    h(
-                      "div",
-                      { style: { textAlign: "right", marginTop: "16px" } },
-                      [
-                        h(
-                          ElButton,
-                          {
-                            type: "text",
-                            onClick: () => {
-                              render(null, mountNode);
-                              document.body.removeChild(mountNode);
-                              ElMessage.info("鍙栨秷鎾ら攢缁勭洏");
-                            },
-                          },
-                          "鍙栨秷"
-                        ),
-                        h(
-                          ElButton,
-                          {
-                            type: "primary",
-                            onClick: submitForm.bind(this), // 缁戝畾this涓婁笅鏂�
-                          },
-                          "纭鎾ら攢"
-                        ),
-                      ]
-                    ),
-                  ]
-                ),
-            }
-          );
-
-          vnode.appContext = this.$.appContext;
-          render(vnode, mountNode);
-        },
-      },
-      // {
-      //   name: '鍒嗘壒鍏ュ簱',
-      //   type: 'primary',
-      //   value: '鍒嗘壒鍏ュ簱',
-      //   onClick: async function () {
-      //     console.log('鍒嗘壒鍏ュ簱鎸夐挳琚偣鍑伙紝寮�濮嬫牎楠�');
-      //     const selectedRows = this.$refs.table.getSelected();
-
-      //     // 鏍¢獙1锛氭槸鍚﹂�変腑琛岋紙鑷冲皯閫夋嫨涓�鏉★級
-      //     if (selectedRows.length === 0) {
-      //       console.log('鏍¢獙涓嶉�氳繃锛氭湭閫変腑浠讳綍鍗曟嵁');
-      //       ElMessage.warning('璇烽�夋嫨鑷冲皯涓�鏉″崟鎹�');
-      //       return;
-      //     }
-
-      //     // 鏀堕泦鎵�鏈夐�変腑鍗曟嵁鐨勭紪鍙凤紙杩囨护鏃犲崟鎹彿鐨勫紓甯歌锛�
-      //     const inboundOrderNos = selectedRows
-      //       .filter(row => row.inboundOrderNo)
-      //       .map(row => row.inboundOrderNo);
-
-      //     // 鏍¢獙2锛氭槸鍚︽湁鏈夋晥鍗曟嵁鍙�
-      //     if (inboundOrderNos.length === 0) {
-      //       console.log('鏍¢獙涓嶉�氳繃锛氶�変腑鍗曟嵁鏃犳湁鏁堢紪鍙�');
-      //       ElMessage.warning('閫変腑鐨勫崟鎹腑鏃犳湁鏁堢紪鍙凤紝璇烽噸鏂伴�夋嫨');
-      //       return;
-      //     }
-
-      //     try {
-      //       console.log('鍙戣捣鍒嗘壒鍏ュ簱璇锋眰锛屽弬鏁帮細', { inboundOrderNos });
-      //       const response = await http.post('/api/InboundOrder/BatchOrderFeedbackToMes', {
-      //         orderNos: inboundOrderNos,
-      //         inout: 1
-      //       });
-
-      //       const { status, message, data } = response;
-      //       if (status) {
-      //         console.log('鍒嗘壒鍏ュ簱鎴愬姛锛屽悗绔繑鍥烇細', data);
-      //         ElMessage.success(`鍒嗘壒鍏ュ簱鎴愬姛锛乣);
-      //         this.refresh(); // 鍏ュ簱鎴愬姛鍚庡埛鏂板垪琛紙澶嶇敤鍘熸湁閫昏緫锛�
-      //       } else {
-      //         console.log('鍒嗘壒鍏ュ簱澶辫触锛屽悗绔彁绀猴細', message);
-      //         ElMessage.error(message || data?.message || '鍒嗘壒鍏ュ簱澶辫触');
-      //       }
-      //     } catch (error) {
-      //       console.error('鍒嗘壒鍏ュ簱璇锋眰寮傚父锛�', error);
-      //       ElMessage.error('缃戠粶寮傚父鎴栨帴鍙i敊璇紝璇风◢鍚庨噸璇�');
-      //     }
-      //   }
-      // },
+      
     ],
     box: [],
     detail: [],
@@ -277,6 +30,14 @@
       if (EmptyTrayInboundBtn != null) {
         EmptyTrayInboundBtn.onClick = () => {
           this.$refs.gridHeader.open();
+        };
+      }
+      var UndoPalletGroupBtn = this.buttons.find(
+        (x) => x.value == "UndoPalletGroup"
+      );
+      if (UndoPalletGroupBtn != null) {
+        UndoPalletGroupBtn.onClick = () => {
+          this.$refs.gridFooter.open();
         };
       }
       var BatchInOrderFeedbackToMesBtn = this.buttons.find(
@@ -307,35 +68,6 @@
             });
         };
       }
-
-      // let BatchInOrderFeedbackToMesBtn = this.buttons.find((x) => x.value == "BatchInOrderFeedbackToMes");
-      // if (BatchInOrderFeedbackToMesBtn != null) {
-      //   BatchInOrderFeedbackToMesBtn.onClick = ()=> {
-      //     let selectedRows = this.$refs.table.getSelected();
-
-      //     // 鏍¢獙鏄惁鏈夐�変腑鏁版嵁
-      //     if (!selectedRows || selectedRows.length === 0) {
-      //       return this.$Message.warning("璇峰厛閫夋嫨闇�瑕佸鐞嗙殑鍗曟嵁");
-      //     }
-      //     if (selectedRows.length > 1) {
-      //       return this.$Message.warning("璇烽�夋嫨涓�鏉℃暟鎹�");
-      //     }
-      //     this.http.post(`api/Inbound/BatchInOrderFeedbackToMes?orderNo=${selectedRows[0].orderNo}`,{},"鏁版嵁澶勭悊涓�...")
-      //       .then((x) => {
-      //         if (x.status) {
-      //           this.$Message.success("鍒嗘壒鍑哄簱鍥炶皟瀹屾垚");
-      //           this.refresh();
-      //         } else {
-      //           return this.$Message.error("鍒嗘壒鍑哄簱鍥炶皟澶辫触");
-      //         }
-      //       })
-      //       .catch((error) => {
-      //         // 澧炲姞寮傚父鎹曡幏锛屽鐞嗙綉缁滈敊璇瓑鎯呭喌
-      //         //_this.$Message.error('璇锋眰澶辫触锛�' + (error.message || '鏈煡閿欒'));
-      //       });
-      //   };
-      // }
-
       var GroupPalletBtn = this.buttons.find((x) => x.value == "GroupPallet");
       if (GroupPalletBtn != null) {
         GroupPalletBtn.onClick = () => {
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 fc84e96..dc0d91e 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"
@@ -24,7 +24,7 @@
 
         WebResponseContent UnPalletQuantity(string orderNo);
 
-        WebResponseContent UndoPalletGroup(string palletCode , string barcode = "");
+        WebResponseContent UndoPalletGroup(string code);
 
         WebResponseContent UnPalletGroupBarcode(string orderNo);
     }
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 6b609ac..1e5d637 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"
@@ -18,6 +18,7 @@
 using WIDESEA_Core.Utilities;
 using WIDESEA_DTO.Base;
 using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.Stock;
 using WIDESEA_IBasicService;
 using WIDESEA_IInboundService;
 using WIDESEA_IRecordService;
@@ -466,7 +467,7 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                
+
                 (bool, string, object?) result2 = ModelValidate.ValidateModelData(materielGroupDTO);
                 if (!result2.Item1) return content = WebResponseContent.Instance.Error(result2.Item2);
 
@@ -659,9 +660,9 @@
                 {
                     resultDTO.UniqueUnit = "";
                 }
-                var inbound =_inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo);
+                var inbound = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo);
                 var inboundDetails = _inboundOrderDetailRepository.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.OrderId == inbound.First().Id).ToList();
-                resultDTO.StockSumQuantity = inboundDetails.Where(x=>x.ReceiptQuantity==0).Sum(x=>x.OrderQuantity);
+                resultDTO.StockSumQuantity = inboundDetails.Where(x => x.ReceiptQuantity == 0).Sum(x => x.OrderQuantity);
                 resultDTO.StockCount = inboundDetails.Where(x => x.ReceiptQuantity == 0).Count();
                 //var validDetails = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(s => s.OrderNo == orderNo).ToList();
                 //resultDTO.StockSumQuantity = orderDetail.Details.Sum(d => d.OrderQuantity);
@@ -680,91 +681,139 @@
             }
         }
 
-        public WebResponseContent UndoPalletGroup(string palletCode, string barcode = "")
+        /// <summary>
+        /// 鎾ら攢缁勭洏锛堟櫤鑳借瘑鍒緭鍏ユ槸鎵樼洏鍙锋垨鏉$爜锛�
+        /// </summary>
+        /// <param name="code">鎵樼洏鍙锋垨鏉$爜</param>
+        /// <returns>鎿嶄綔缁撴灉</returns>
+        public WebResponseContent UndoPalletGroup(string code)
         {
-
-            if (string.IsNullOrWhiteSpace(palletCode))
+            if (string.IsNullOrWhiteSpace(code))
             {
-                return WebResponseContent.Instance.Error("鎵樼洏鍙蜂笉鑳戒负绌�");
+                return WebResponseContent.Instance.Error("鎵樼洏鍙锋垨鏉$爜涓嶈兘涓虹┖");
             }
-
 
             try
             {
                 _unitOfWorkManage.BeginTran();
 
-                // 2. 鏌ヨ鎵樼洏搴撳瓨涓昏褰曪紙閬垮厤鏃犳暟鎹姏寮傚父锛�
-                var stock = _stockRepository.Db.Queryable<Dt_StockInfo>()
-                    .Includes(o => o.Details)
-                    .First(x => x.PalletCode == palletCode
-                                         && (x.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨
-                                             || x.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()));
+                // 鏅鸿兘璇嗗埆杈撳叆绫诲瀷
+                string palletCode = null;
+                string barcode = null;
 
-                if (stock == null)
+                // 1. 鍏堝皾璇曟寜鎵樼洏鍙锋煡璇�
+                var stockByPallet = _stockRepository.Db.Queryable<Dt_StockInfo>()
+                    .Includes(o => o.Details)
+                    .First(x => x.PalletCode == code
+                        && (x.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨
+                            || x.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()));
+
+                if (stockByPallet != null)
                 {
-                    return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺彿{palletCode}瀵瑰簲鐨勫簱瀛樿褰�");
+                    // 璇嗗埆涓烘墭鐩樺彿
+                    palletCode = code;
+                }
+                else
+                {
+                    var detail = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(d => d.Barcode == code).First();
+
+                    if (detail != null)
+                    {
+                        var stockInfo = _stockRepository
+                            .Db.Queryable<Dt_StockInfo>()
+                            .Where(s => s.Id == detail.StockId&& (s.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨 || s.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()))
+                            .First();
+
+                        if (stockInfo != null)
+                        {
+                            barcode = code;
+                            palletCode = stockInfo.PalletCode;
+                        }
+                    }
+                    else
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return WebResponseContent.Instance.Error($"鏈壘鍒� {code} 瀵瑰簲鐨勬墭鐩樻垨鏉$爜璁板綍");
+                    }
                 }
 
-                // 3. 鍦烘櫙1锛氬垹闄ゆ寚瀹氭潯鐮�
+                // 鏍规嵁璇嗗埆缁撴灉鎵ц鎾ら攢閫昏緫
                 if (!string.IsNullOrWhiteSpace(barcode))
                 {
+                    // ===== 鎾ら攢鎸囧畾鏉$爜 =====
+                    var stock = _stockRepository.Db.Queryable<Dt_StockInfo>()
+                        .Includes(o => o.Details)
+                        .First(x => x.PalletCode == palletCode
+                            && (x.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨
+                                || x.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()));
+
+                    if (stock == null)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺彿 {palletCode} 瀵瑰簲鐨勫簱瀛樿褰�");
+                    }
+
                     var targetDetail = stock.Details?.FirstOrDefault(x => x.Barcode == barcode);
                     if (targetDetail == null)
                     {
                         _unitOfWorkManage.RollbackTran();
-                        return WebResponseContent.Instance.Error($"鎵樼洏{palletCode}涓嬫湭鎵惧埌鏉$爜{barcode}鐨勬槑缁嗚褰�");
+                        return WebResponseContent.Instance.Error($"鎵樼洏 {palletCode} 涓嬫湭鎵惧埌鏉$爜 {barcode} 鐨勬槑缁嗚褰�");
                     }
 
                     ResetInboundOrderStatus(new List<string> { targetDetail.OrderNo }, new List<string> { targetDetail.Barcode });
-                    // 鍒犻櫎鎸囧畾鏄庣粏
                     _stockDetailRepository.DeleteData(targetDetail);
 
-
-                    // 閲嶆柊鏌ヨ鍓╀綑鏄庣粏锛堜繚璇佹暟鎹噯纭�э級
                     var remainingDetails = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>()
                         .Where(x => x.StockId == stock.Id)
                         .ToList();
 
-                    // 鍓╀綑鏄庣粏涓虹┖ 鈫� 鍒犻櫎涓昏〃 + 閲嶇疆鍏ュ簱鍗曞強鏄庣粏鐘舵��
                     if (!remainingDetails.Any())
                     {
-                        // 閲嶇疆鍏ュ簱鍗曞強鏄庣粏鐘舵��
                         ResetInboundOrderStatus(stock.Details.Select(d => d.OrderNo).Distinct().ToList());
-
                         _stockRepository.DeleteData(stock);
                         _unitOfWorkManage.CommitTran();
-                        return WebResponseContent.Instance.OK($"鏉$爜{barcode}鎾ら攢鎴愬姛锛屾墭鐩樻棤鍓╀綑鏄庣粏锛屽凡鍒犻櫎鎵樼洏骞堕噸缃叧鑱斿叆搴撳崟鐘舵��");
+                        return WebResponseContent.Instance.OK($"鏉$爜 {barcode} 鎾ら攢鎴愬姛锛屾墭鐩樻棤鍓╀綑鏄庣粏锛屽凡鍒犻櫎鎵樼洏骞堕噸缃叧鑱斿叆搴撳崟鐘舵��");
                     }
 
                     _unitOfWorkManage.CommitTran();
-                    return WebResponseContent.Instance.OK($"鏉$爜{barcode}鎾ら攢鎴愬姛锛屾墭鐩樹粛鏈夊墿浣欐槑缁�");
+                    return WebResponseContent.Instance.OK($"鏉$爜 {barcode} 鎾ら攢鎴愬姛锛屾墭鐩樹粛鏈夊墿浣欐槑缁�");
                 }
-
-                // 鍒犻櫎鏁存墭鐩橈紙鏃犳潯鐮佷紶鍏ワ級
-                if (stock.Details == null || !stock.Details.Any())
+                else
                 {
+                    // ===== 鎾ら攢鏁翠釜鎵樼洏 =====
+                    var stock = _stockRepository.Db.Queryable<Dt_StockInfo>()
+                        .Includes(o => o.Details)
+                        .First(x => x.PalletCode == palletCode
+                            && (x.StockStatus == (int)StockStatusEmun.缁勭洏鏆傚瓨
+                                || x.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()));
+
+                    if (stock == null)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺彿 {palletCode} 瀵瑰簲鐨勫簱瀛樿褰�");
+                    }
+
+                    if (stock.Details == null || !stock.Details.Any())
+                    {
+                        _stockRepository.DeleteData(stock);
+                        _unitOfWorkManage.CommitTran();
+                        return WebResponseContent.Instance.OK("鎵樼洏鏃犳槑缁嗚褰曪紝宸茬洿鎺ュ垹闄ゆ墭鐩樹富鏁版嵁");
+                    }
+
+                    var relatedOrderNos = stock.Details.Select(d => d.OrderNo).Distinct().ToList();
+                    if (!relatedOrderNos.Any())
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return WebResponseContent.Instance.Error("搴撳瓨鏄庣粏鏈叧鑱斾换浣曞叆搴撳崟鍙凤紝鏃犳硶瀹屾垚鎾ら攢");
+                    }
+
+                    ResetInboundOrderStatus(relatedOrderNos, stock.Details.Select(d => d.Barcode).ToList());
+                    _stockDetailRepository.DeleteData(stock.Details);
                     _stockRepository.DeleteData(stock);
+
                     _unitOfWorkManage.CommitTran();
-                    return WebResponseContent.Instance.OK("鎵樼洏鏃犳槑缁嗚褰曪紝宸茬洿鎺ュ垹闄ゆ墭鐩樹富鏁版嵁");
+                    return WebResponseContent.Instance.OK("鎵樼洏鎾ら攢鎴愬姛锛屽凡閲嶇疆鍏宠仈鍏ュ簱鍗曞強鏄庣粏鐘舵��");
                 }
-
-                // 鏈夋槑缁� 鈫� 閲嶇疆鍏ュ簱鍗曞強鏄庣粏鐘舵�� + 鍒犻櫎搴撳瓨
-                var relatedOrderNos = stock.Details.Select(d => d.OrderNo).Distinct().ToList();
-                if (!relatedOrderNos.Any())
-                {
-                    _unitOfWorkManage.RollbackTran();
-                    return WebResponseContent.Instance.Error("搴撳瓨鏄庣粏鏈叧鑱斾换浣曞叆搴撳崟鍙凤紝鏃犳硶瀹屾垚鎾ら攢");
-                }
-
-                // 閲嶇疆鍏ュ簱鍗曚富鐘舵�� + 鏄庣粏鐘舵��
-                ResetInboundOrderStatus(relatedOrderNos, stock.Details.Select(d => d.Barcode).ToList());
-
-                // 4.3 鍒犻櫎搴撳瓨鏄庣粏鍜屼富琛�
-                _stockDetailRepository.DeleteData(stock.Details);
-                _stockRepository.DeleteData(stock);
-
-                _unitOfWorkManage.CommitTran();
-                return WebResponseContent.Instance.OK("鎵樼洏鎾ら攢鎴愬姛锛屽凡閲嶇疆鍏宠仈鍏ュ簱鍗曞強鏄庣粏鐘舵��");
             }
             catch (Exception ex)
             {
@@ -803,6 +852,10 @@
                 {
                     detail.ReceiptQuantity = 0;
                     detail.OrderDetailStatus = 0;
+                    if(inboundOrder.BusinessType == "11")
+                    {
+                        detail.WarehouseCode = "";
+                    }
                     _inboundOrderDetailRepository.UpdateData(detail);
                 }
             }
@@ -904,14 +957,14 @@
         {
             WebResponseContent content = new WebResponseContent();
             var inbound = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo).First();
-            if(inbound == null)
+            if (inbound == null)
             {
                 return content.Error();
             }
 
             var details = _inboundOrderDetailRepository.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.OrderId == inbound.Id && x.ReceiptQuantity == 0).ToList();
 
-            return content.OK(data:details);
+            return content.OK(data: details);
         }
     }
 }
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 67a1cdf..519d52e 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"
@@ -228,9 +228,9 @@
         }
 
         [HttpPost, Route("UndoPalletGroup"), AllowAnonymous, MethodParamsValidate]
-        public WebResponseContent UndoPalletGroup(string palletCode,string barcode="")
+        public WebResponseContent UndoPalletGroup(string code)
         {
-            return Service.UndoPalletGroup(palletCode,barcode);
+            return Service.UndoPalletGroup(code);
         }
         /// <summary>
         /// 

--
Gitblit v1.9.3