From 2fbbc3ccaa4123a2d550fa64d91fa8ac25323a58 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期五, 11 七月 2025 15:32:03 +0800
Subject: [PATCH] 上传最新

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IErpProScrapSheetDetailService.cs                 |    6 
 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/ScrapSheet.vue                               |  387 ++++++++++++++++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetService.cs                         |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutProStockInfoService.cs                          |   30 +
 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/erpProScrapSheet.js                                 |    5 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs                            |  164 +++++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheetDetail.cs                 |    6 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs                                 |    8 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs                        |    1 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                                   |    1 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs                         |    1 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs                                    |    7 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs                                     |   86 ++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs                   |    9 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs                           |    6 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheet.cs                       |    2 
 代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/erpProScrapSheet.vue                                    |   16 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs                        |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs                         |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs                              |   10 
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs                                 |   16 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetDetailService.cs                   |  330 +++++++++++++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs                                |   66 +++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs                               |    2 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs                              |    6 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ErpProScrapSheetDetailController.cs |   18 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs                            |   13 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs                          |   21 +
 28 files changed, 1,185 insertions(+), 40 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
index 7fe6c29..b73d2c1 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs"
@@ -14,19 +14,16 @@
         /// </summary>
         [Description("棰嗘枡鍑哄簱")]
         Outbound = 100,
-
         /// <summary>
         /// 鐩樼偣鍑哄簱
         /// </summary>
         [Description("鐩樼偣鍑哄簱")]
         OutInventory = 110,
-
         /// <summary>
         /// 鍒嗘嫞鍑哄簱
         /// </summary>
         [Description("鍒嗘嫞鍑哄簱")]
         OutPick = 120,
-
         /// <summary>
         /// 璐ㄦ鍑哄簱
         /// </summary>
@@ -67,13 +64,16 @@
         /// </summary>
         [Description("鎴愬搧鍑哄簱")]
         OutProduct = 230,
-
+        /// <summary>
+        /// 鎴愬搧鎶ュ簾鍑哄簱
+        /// </summary>
+        [Description("鎴愬搧鎶ュ簾鍑哄簱")]
+        OutProScrap = 235,
         /// <summary>
         /// 鎴愬搧瀵勫敭鍑哄簱
         /// </summary>
         [Description("鎴愬搧瀵勫敭鍑哄簱")]
         OutSendProduct = 240,
-
         /// <summary>
         /// 鎴愬搧MES鎻愬簱
         /// </summary>
@@ -91,7 +91,6 @@
         /// </summary>
         [Description("闃茬剨鍓嶆淳宸ュぇ浠�")]
         MaskOutNoticeLarge = 265,
-
         /// <summary>
         /// 闃茬剨鍒扮嚎杈瑰皬浠�
         /// </summary>
@@ -103,25 +102,21 @@
         /// </summary>
         [Description("闃茬剨鍒扮嚎杈瑰ぇ浠�")]
         MaskOutLarge = 275,
-
         /// <summary>
         /// 閲囪喘鍏ュ簱
         /// </summary>
         [Description("閲囪喘鍏ュ簱")]
         Inbound = 510,
-
         /// <summary>
         /// 鐩樼偣鍏ュ簱
         /// </summary>
         [Description("鐩樼偣鍏ュ簱")]
         InInventory = 520,
-
         /// <summary>
         /// 鍒嗘嫞鍏ュ簱
         /// </summary>
         [Description("鍒嗘嫞鍏ュ簱")]
         InPick = 530,
-
         /// <summary>
         /// 璐ㄦ鍏ュ簱
         /// </summary>
@@ -195,6 +190,7 @@
         /// </summary>
         [Description("宸烽亾鍐呯Щ搴�")]
         Relocation = 900
+
     }
 
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/erpProScrapSheet.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/erpProScrapSheet.js"
index 9e7c04a..e351097 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/erpProScrapSheet.js"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/erpProScrapSheet.js"
@@ -1,11 +1,10 @@
 
 //姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜
-import gridBody from './extend/MesOutOrderDetail.vue'
-import gridHeader from './extend/addMesOutOrder.vue'
+import gridBody from './extend/ScrapSheet.vue'
 let extension = {
   components: {
     //鏌ヨ鐣岄潰鎵╁睍缁勪欢
-    gridHeader: gridHeader,
+    gridHeader: '',
     gridBody: gridBody,
     gridFooter: '',
     //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/ScrapSheet.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/ScrapSheet.vue"
new file mode 100644
index 0000000..431fe01
--- /dev/null
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/ScrapSheet.vue"
@@ -0,0 +1,387 @@
+<template>
+    <div>
+        <vol-box
+      v-model="dialogFormVisible"
+      :on-model-close="closeCustomModel"
+      :lazy="true"
+      width="20%"
+      :padding="15"
+      title="閫夋嫨鍑哄簱绾夸綋"
+    >   
+        <div> 
+          <VolForm
+            ref="myform"
+            :label-width="120"
+            :loadKey="true"
+            :formFields="formFields2"
+            :formRules="formRules2"
+          >
+
+          </VolForm>
+        </div>
+        <template #footer>
+          <!-- <el-button type="primary" size="small" @click="submit">纭</el-button> -->
+          <el-button type="danger" size="small" @click="outbound"
+            >鍑哄簱</el-button
+          >
+        </template>
+    </vol-box>
+      <vol-box
+        v-model="showDetialBox"
+        :lazy="true"
+        width="75%"
+        :padding="15"
+        title="鎶ュ簾鏄庣粏"
+      >
+        <div class="box-head">
+          <el-alert :closable="false" style="width: 100%">
+            <el-row>
+              <el-col :span="18">
+                <span class="less-style">鎶ュ簾鍗曞彿锛� {{ row.proScrapSheetOrderNo }} </span>
+              </el-col>
+              <el-col :span="6">
+                <span>宸查�変腑 {{ selection.length }} 椤�</span>
+              <!-- <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px"
+                @click="lockstocks"
+                >閿佸畾搴撳瓨</el-link
+              > -->
+              <el-link
+                type="primary"
+                size="small"
+                v-if="row.proScrapStatus == 0"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="UpProScrap"
+                >鎻愪氦鎶ュ簾</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="outSelect"
+                >鐩存帴鍑哄簱</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
+                @click="getData"
+                >鍒锋柊</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
+            @current-change="handleCurrentChange"
+            height="500px"
+            @row-click="handleRowClick"
+          @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="primary" size="small" @click="submit">纭</el-button> -->
+          <el-button type="danger" size="small" @click="showDetialBox = false"
+            >鍏抽棴</el-button
+          >
+        </template>
+      </vol-box>
+    </div>
+  </template>
+      <script>
+  import VolBox from "@/components/basic/VolBox.vue";
+  import VolForm from "@/components/basic/VolForm.vue";
+  export default {
+    components: { VolBox,VolForm },
+    data() {
+      return {
+        row: null,
+      showDetialBox: false,
+      flag: false,
+      currentRow: null,
+      selection: [],
+      tableData: [],
+      dialogFormVisible:false,
+      formLabelWidth: '160px',
+      formFields2: {
+        LineCode: "",
+        Grade: "0",
+      },
+      formRules2:[[
+          {
+            dataKey: "line",
+            title: "閫夋嫨绾夸綋",
+            required: true,
+            field: "LineCode",
+            data: [
+              { key: "5236", value: "1鍙风嚎" },
+              { key: "5243", value: "2鍙风嚎" },
+              { key: "5250", value: "3鍙风嚎" },
+            ],
+            type: "select",
+            extra: {
+              
+            },
+          }],
+          [
+          {
+            title: "鏄惁浼樺厛",
+            field: "Grade",
+            data: [],
+            required: false,
+            type: "switch",
+          },
+        ]],
+      form: {
+        name: '',
+        region: '',
+        date1: '',
+        date2: '',
+        delivery: false,
+        type: [],
+        resource: '',
+        desc: '',
+      },
+        tableColumns: [
+          {
+            prop: "id",
+            title: "涓婚敭",
+            type: "string",
+            width: 150,
+            hidden: true,
+          },
+          {
+            prop: "proScrapSheetId",
+            title: "鎴愬搧鎶ュ簾鍗曚富閿�",
+            type: "string",
+            width: 150,
+            hidden: true,
+          },
+          {
+            prop: "scrapProCode",
+            title: "浜у搧缂栫爜",
+            type: "string",
+            width: 150,
+          },
+          {
+            prop: "scrapProVersion",
+            title: "鎶ュ簾鐗堟湰",
+            type: "string",
+            width: 120,
+          },
+          {
+            prop: "scrapProLotNo",
+            title: "鎵规鍙�",
+            type: "string",
+            width: 150,
+          },
+          {
+            prop: "scrapSETQty",
+            title: "鎶ュ簾SET鏁伴噺",
+            type: "int",
+            width: 180,
+            hidden: true,
+          },
+          {
+            prop: "scrapPcsQty",
+            title: "鎶ュ簾PCS鏁�",
+            type: "int",
+            width: 180,
+          },
+          // {
+          //   prop: "assignQuantity",
+          //   title: "鍒嗛厤鍑哄簱閲�",
+          //   type: "string",
+          //   width: 100,
+          // },
+          {
+            prop: "overScrapSETQty",
+            title: "宸叉姤搴烻ET鏁�",
+            type: "int",
+            width: 180,
+          },
+          {
+            prop: "overScrapPcsQty",
+            title: "宸叉姤搴烶CS鏁�",
+            type: "string",
+            width: 180,
+          },
+          {
+            prop: "scrapProDetailStatus",
+            title: "璁㈠崟鏄庣粏鐘舵��",
+            type: "string",
+            width: 180,
+        }
+        ],
+      };
+    },
+    methods: {
+      open(row) {
+        this.row = row;
+        console.log(row);
+        this.showDetialBox = true;
+        this.getData();
+      },
+      handleCurrentChange(val) {
+      this.currentRow = val;
+    },
+    outSelect(){
+      if (this.selection.length === 0) {
+        return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
+      }
+      this.dialogFormVisible=true;
+    },
+      handleRowClick(row) {
+        this.$refs.singleTable.toggleRowSelection(row);
+        },
+        handleSelectionChange(val) {
+        this.selection = val;
+        },
+    UpProScrap() {
+      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+      this.http
+        .post("api/ErpProScrapSheetDetail/UpProScrap?scrapNo="+
+              this.row.proScrapSheetOrderNo, keys, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.$parent.refresh();
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+    closeCustomModel() {
+      this.formFields2.LineCode="";
+      this.formFields2.Grade="0";
+          this.dialogFormVisible=false;
+          this.$parent.refresh();
+    },
+    outbound() {
+      if (this.selection.length === 0) {
+        return this.$message.error("璇烽�夋嫨鍗曟嵁鏄庣粏");
+      }
+      //璇烽�夋嫨鍗曟潯鏁版嵁
+      if (this.selection.length > 1) {
+        return this.$message.error("璇烽�夋嫨鍗曟潯鏁版嵁");
+      }
+      var keys = this.selection.map((item) => item.id); // 鑾峰彇閫変腑琛岀殑id
+
+      this.http
+        .post("api/Task/OutProductTask?stationCode="+this.formFields2.LineCode +"&grade="+this.formFields2.Grade, keys, "鏁版嵁澶勭悊涓�")
+        .then((x) => {
+          if (!x.status) return this.$message.error(x.message);
+          this.$message.success("鎿嶄綔鎴愬姛");
+          this.formFields2.LineCode="";
+          this.formFields2.Grade="0";
+          this.dialogFormVisible=false;
+          this.$parent.refresh();
+          this.showDetialBox = false;
+          this.$emit("parentCall", ($vue) => {
+            $vue.getData();
+          });
+        });
+    },
+      getData() {
+        this.http
+          .post(
+            "api/ErpProScrapSheetDetail/GetByDetails?scrapNo=" +
+              this.row.proScrapSheetOrderNo,
+            null,
+            "鏌ヨ涓�"
+          )
+          .then((x) => {
+            var label=[
+                { label: '鏈紑濮�', value: 0 },
+                { label: '鍑哄簱涓�', value: 1 },
+                { label: '鍑哄簱瀹屾垚', value: 2 },
+                { label: '鍙栨秷', value: 98 },
+                { label: '鎻愪氦鍏抽棴', value: 99 }
+            ]
+            this.tableData=x.map((i) => ({
+              ...i,
+              scrapProDetailStatus:label.find((j) => j.value === i.scrapProDetailStatus).label
+            }))
+          });
+      },
+    },
+  };
+  </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;
+    /* color: #ffffff; */
+  }
+  
+  .box-table .el-table tbody tr.current-row > td {
+    background-color: #f0f9eb !important;
+    /* color: #ffffff; */
+  }
+  
+  .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/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/erpProScrapSheet.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/erpProScrapSheet.vue"
index 8683b1b..0de7b24 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/erpProScrapSheet.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/erpProScrapSheet.vue"
@@ -130,14 +130,14 @@
       table: "erpProScrapSheetDetail",
       columns: [
             {
-            field: "id",
-            title: "Id",
-            type: "int",
-            width: 90,
-            hidden: true,
-            readonly: true,
-            require: true,
-            align: "left",
+              field: "id",
+              title: "Id",
+              type: "int",
+              width: 90,
+              hidden: true,
+              readonly: true,
+              require: true,
+              align: "left",
             },
             {
                 field: "proScrapSheetId",
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs"
index bb5a54d..6a77d8a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderResultService.cs"
@@ -264,12 +264,15 @@
                     }
                     _purchaseOrderDetailRepository.UpdateData(purchaseOrderDetail);
                 }
-                //ERP涓婃姤
-                WebResponseContent responseContent = _checkOrderService.FeedbackCheckResult(checkOrder, checkOrderResult != null ? new List<Dt_CheckOrderResult> { checkOrderResult } : new List<Dt_CheckOrderResult>());
-                if (!responseContent.Status)
+                if (string.IsNullOrEmpty(checkModel.CreatorCode))
                 {
-                    throw new Exception(responseContent.Message);
-                }
+                    //ERP涓婃姤
+                    WebResponseContent responseContent = _checkOrderService.FeedbackCheckResult(checkOrder, checkOrderResult != null ? new List<Dt_CheckOrderResult> { checkOrderResult } : new List<Dt_CheckOrderResult>());
+                    if (!responseContent.Status)
+                    {
+                        throw new Exception(responseContent.Message);
+                    }
+                } 
                 checkOrder.UploadStatus = CheckUploadEnum.UploadOk.ObjToInt();
                 _checkOrderRepository.UpdateData(checkOrder);
                 _unitOfWorkManage.CommitTran();
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
index 90c524e..3d17fc0 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs"
@@ -65,6 +65,11 @@
         [Description("鎴愬搧鍑哄簱")]
         OutProduct = 230,
         /// <summary>
+        /// 鎴愬搧鎶ュ簾鍑哄簱
+        /// </summary>
+        [Description("鎴愬搧鎶ュ簾鍑哄簱")]
+        OutProScrap = 235,
+        /// <summary>
         /// 鎴愬搧瀵勫敭鍑哄簱
         /// </summary>
         [Description("鎴愬搧瀵勫敭鍑哄簱")]
@@ -74,7 +79,7 @@
         /// </summary>
         [Description("鎴愬搧MES鎻愬簱")]
         OutMesRworkProduct =250,
-
+        
         /// <summary>
         /// 闃茬剨鍓嶆淳宸ュ皬浠�
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs"
index 9ed3de3..18225f6 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs"
@@ -19,5 +19,7 @@
         IProOutOrderRepository ProOutOrderRepository { get; }
         IProOutOrderDetailRepository ProOutOrderDetailRepository { get; }
         IMesRworkOutboundOrderRepository RworkOutboundOrderRepository { get; }
+        IErpProScrapSheetRepository ErpProScrapSheetRepository { get;}
+        IErpProScrapSheetDetailRepository ErpProScrapDetailRepository { get;}
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IErpProScrapSheetDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IErpProScrapSheetDetailService.cs"
index 74d29cb..28fac2a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IErpProScrapSheetDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IErpProScrapSheetDetailService.cs"
@@ -3,6 +3,8 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Core;
 using WIDESEA_Core.BaseServices;
 using WIDESEA_IOutboundRepository;
 using WIDESEA_Model.Models;
@@ -12,5 +14,9 @@
     public interface IErpProScrapSheetDetailService : IService<Dt_ErpProScrapSheetDetail>
     {
         IErpProScrapSheetDetailRepository Repository { get; }
+        List<Dt_ErpProScrapSheetDetail> GetByDetails(string scrapNo);
+        WebResponseContent UpProScrap(string scrapNo,int[] keys);
+        (List<Dt_ProStockInfo>, List<Dt_ErpProScrapSheetDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) AssignProStockOut(List<Dt_ErpProScrapSheetDetail> proOutOrderDetails, Dt_ErpProScrapSheet scrapSheet);
+        WebResponseContent LockOutboundStockDataUpdate(List<Dt_ProStockInfo> proStockInfos, List<Dt_ErpProScrapSheetDetail> scrapSheetDetails, List<Dt_OutProStockInfo> outProStockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock, List<Dt_Task>? tasks = null);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs"
index f27c514..ce59d59 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs"
@@ -16,6 +16,10 @@
         Dt_OutProStockInfo GetOutStockLockInfo(Dt_ProOutOrder proOutOrder, Dt_ProOutOrderDetail proOutOrderDetail, Dt_ProStockInfo proStockInfo, float assignQty, int? taskNum = null);
         //澶勭悊鎻愬簱鍑哄簱璇︽儏
         Dt_OutProStockInfo GetOutStockLockInfo(Dt_MesRworkOutboundOrder mesOutboundOrder, Dt_ProStockInfo outStock, float assignQuantity, int? taskNum = null);
+        /// <summary>
+        /// 鎴愬搧鎶ュ簾鍑哄簱璇︽儏
+        /// </summary>
+        Dt_OutProStockInfo GetOutStockLockInfo(Dt_ErpProScrapSheet proScrapSheet, Dt_ErpProScrapSheetDetail scrapSheetDetail, Dt_ProStockInfo proStockInfo, float assignQty, int? taskNum = null);
         List<Dt_OutProStockInfo> GetByOrderDetailId(int orderDetailId, OutLockStockStatusEnum? outStockStatus);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs"
index 991ad73..3f408b2 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs"
@@ -29,5 +29,7 @@
 
         IMesRworkOutboundOrderService RworkOutboundOrderService { get; }
         IErpProTransferOrderService ErpProTransferOrderService { get; }
+        IErpProScrapSheetService ErpProScrapSheetService { get; }
+        IErpProScrapSheetDetailService ErpProScrapSheetDetailService { get;}
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs"
index 4d8d4c7..05fcc95 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs"
@@ -18,5 +18,6 @@
         /// 鑾峰彇鎴愬搧搴撳瓨
         /// </summary>
         List<Dt_ProStockInfo> GetProStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder, List<string> locationInfos);
+        List<Dt_ProStockInfo> GetProStocks(Dt_ErpProScrapSheetDetail erpProScrapSheetDetail, List<string> locationInfos);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs"
index 6e082b8..2b323b0 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs"
@@ -33,9 +33,15 @@
         /// </summary>
         /// <returns></returns>
         public List<Dt_ProStockInfo> GetUseableStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder);
+
+        List<Dt_ProStockInfo> GetUseableStocks(int warehoseId, Dt_ErpProScrapSheetDetail erpProScrapSheetDetail);
         /// <summary>
         /// 鑾峰彇MES鎻愬簱搴撳瓨
         /// </summary>
         List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_MesRworkOutboundOrder mesRworkOutboundOrder, float needQuantity, out float residueQuantity);
+        /// <summary>
+        /// 鑾峰彇鎴愬搧鎶ュ簾鐨勫簱瀛�
+        /// </summary>
+        List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ErpProScrapSheetDetail outOrderDetail, float needQuantity, out float residueQuantity);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
index 9488d88..d37cbe2 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
@@ -371,6 +371,7 @@
         /// <param name="StationCode">绔欏彴鍦板潃</param>
         /// <returns></returns>
         Task<WebResponseContent> OutProductTask(int[] keys, string StationCode, int Grade);
+        Task<WebResponseContent> OutProScrapTask(int[] keys, string StationCode, int Grade);
         /// <summary>
         /// 鎴愬搧浣欐枡閫�搴撳叆浠�
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheet.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheet.cs"
index 4427524..2afe795 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheet.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheet.cs"
@@ -41,7 +41,7 @@
         /// 宸叉牳鍑�<br/>
         /// </summary>
         [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎶ュ簾鐘舵��")]
-        public string ProScrapStatus { get; set; }
+        public int ProScrapStatus { get; set; }
 
         /// <summary>
         /// 澶囨敞
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheetDetail.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheetDetail.cs"
index 8d93ff0..0cd4448 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheetDetail.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ErpProScrapSheetDetail.cs"
@@ -57,6 +57,12 @@
         public int ScrapPcsQty { get; set; }
 
         /// <summary>
+        /// 閿佸畾PCS鏁�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鎶ュ簾PCS鏁�")]
+        public int LockPcsQty { get; set; }
+
+        /// <summary>
         /// 宸叉姤搴烻ET鏁伴噺
         /// </summary>
         [SugarColumn(IsNullable = false, ColumnDescription = "宸蹭笅鎶ュ簾SET鏁伴噺")]
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs"
index 81ed156..da9358a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs"
@@ -19,8 +19,10 @@
         public IProOutOrderRepository ProOutOrderRepository { get; }
         public IProOutOrderDetailRepository ProOutOrderDetailRepository { get; }
         public IMesRworkOutboundOrderRepository RworkOutboundOrderRepository { get; }
+        public IErpProScrapSheetRepository ErpProScrapSheetRepository { get;}
+        public IErpProScrapSheetDetailRepository ErpProScrapDetailRepository { get;}
 
-        public OutboundRepository(IOutboundOrderDetailRepository outboundOrderDetailRepository, IOutboundOrderRepository outboundOrderRepository, IOutStockLockInfoRepository outboundStockLockInfoRepository,IMesPPCutOutboundOrderRepository mesPPCutOutboundOrderRepository, IProOutOrderRepository proOutOrderRepository, IProOutOrderDetailRepository proOutOrderDetailRepository, IMesRworkOutboundOrderRepository rworkOutboundOrderRepository)
+        public OutboundRepository(IOutboundOrderDetailRepository outboundOrderDetailRepository, IOutboundOrderRepository outboundOrderRepository, IOutStockLockInfoRepository outboundStockLockInfoRepository,IMesPPCutOutboundOrderRepository mesPPCutOutboundOrderRepository, IProOutOrderRepository proOutOrderRepository, IProOutOrderDetailRepository proOutOrderDetailRepository, IMesRworkOutboundOrderRepository rworkOutboundOrderRepository, IErpProScrapSheetRepository erpProScrapSheetRepository, IErpProScrapSheetDetailRepository erpProScrapSheetDetailRepository)
         {
             OutboundOrderDetailRepository = outboundOrderDetailRepository;
             OutboundOrderRepository = outboundOrderRepository;
@@ -29,6 +31,8 @@
             ProOutOrderRepository = proOutOrderRepository;
             ProOutOrderDetailRepository = proOutOrderDetailRepository;
             RworkOutboundOrderRepository = rworkOutboundOrderRepository;
+            ErpProScrapSheetRepository= erpProScrapSheetRepository;
+            ErpProScrapDetailRepository = erpProScrapSheetDetailRepository;
         }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetDetailService.cs"
index e911579..7fb5094 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetDetailService.cs"
@@ -1,13 +1,28 @@
-锘縰sing System;
+锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.StockEnum;
+using WIDESEA_Common.WareHouseEnum;
+using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.ERP;
+using WIDESEA_External.ERPService;
+using WIDESEA_External.Model;
+using WIDESEA_IBasicService;
 using WIDESEA_IOutboundRepository;
 using WIDESEA_IOutboundService;
+using WIDESEA_IRecordService;
+using WIDESEA_IStockRepository;
+using WIDESEA_IStockService;
 using WIDESEA_Model.Models;
+using WIDESEA_OutboundRepository;
 
 namespace WIDESEA_OutboundService
 {
@@ -15,10 +30,321 @@
     {
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         public IErpProScrapSheetDetailRepository Repository => BaseDal;
+        public IErpProScrapSheetRepository _proScrapSheetRepository;
+        public IInvokeERPService _invokeERPService;
+        public IStockRepository _stockRepository;
+        public IStockService _stockService;
+        public IOutProStockInfoService _outProStockInfoService;
+        public IBasicService _basicService;
+        public IRecordService _recordService;
 
-        public ErpProScrapSheetDetailService(IErpProScrapSheetDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        public ErpProScrapSheetDetailService(IErpProScrapSheetDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IErpProScrapSheetRepository proScrapSheetRepository, IInvokeERPService invokeERPService, IStockRepository stockRepository, IStockService stockService, IOutProStockInfoService outProStockInfoService, IRecordService recordService) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
+            _proScrapSheetRepository = proScrapSheetRepository;
+            _invokeERPService = invokeERPService;
+            _stockRepository = stockRepository;
+            _stockService = stockService;
+            _outProStockInfoService = outProStockInfoService;
+            _recordService = recordService;
+        }
+        //鑾峰彇瀵瑰簲鍗曞彿鐨勬姤搴熸槑缁�
+        public List<Dt_ErpProScrapSheetDetail> GetByDetails(string scrapNo)
+        {
+            List<Dt_ErpProScrapSheetDetail> proScrapSheetDetails = _proScrapSheetRepository.Db.Queryable<Dt_ErpProScrapSheet, Dt_ErpProScrapSheetDetail>((master, detail) => master.Id == detail.ProScrapSheetId)
+                .Where((master, detail) => master.ProScrapSheetOrderNo==scrapNo)
+                .Select((master, detail) => detail)
+                .ToList();
+            return proScrapSheetDetails;
+        }
+        /// <summary>
+        /// 鎻愪氦鎶ュ簾鎿嶄綔
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent UpProScrap(string scrapNo,int[] keys)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                //鑾峰彇鎵�鏈夌殑鎶ュ簾鏄庣粏
+                Dt_ErpProScrapSheet erpProScrapSheet = _proScrapSheetRepository.Db.Queryable<Dt_ErpProScrapSheet>().Where(x => x.ProScrapSheetOrderNo == scrapNo).Includes(x => x.Details).First();
+                if (erpProScrapSheet == null)
+                {
+                    return content.Error($"鏈壘鍒板搴旀姤搴熷崟{scrapNo}");
+                }
+                if (erpProScrapSheet.Details == null || erpProScrapSheet.Details.Count<=0)
+                {
+                    return content.Error($"鏈壘鍒板搴旀姤搴熷崟{scrapNo}鏄庣粏");
+                }
+                List<Dt_ErpProScrapSheetDetail> erpProScrapSheetDetails = erpProScrapSheet.Details.Where(x=> keys.Contains(x.Id) && x.ScrapProDetailStatus== OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()).ToList();
+                List<Dt_ErpProScrapSheetDetail> overDetails= erpProScrapSheet.Details.Where(x => x.ScrapProDetailStatus == OutOrderStatusEnum.鍏抽棴.ObjToInt()).ToList();
+                int overCount = overDetails.Count;
+                //杩涜鎶ュ簾鎻愪氦鎿嶄綔
+                if (erpProScrapSheetDetails.Count!= keys.Length)
+                {
+                    return content.Error($"鎻愪氦浜嗗凡鎶ュ簾鏄庣粏鎴栨鍦ㄥ嚭搴撲腑,璇锋鏌�");
+                }
+                if ((overCount + keys.Length) == erpProScrapSheet.Details.Count)
+                {
+                    erpProScrapSheet.ProScrapStatus = ProScrapSheetStatusEnum.Valid.ObjToInt();
+                }
+                List<ScrapSheetItem> scrapSheetItems = new List<ScrapSheetItem>();
+                foreach (var item in erpProScrapSheetDetails)
+                {
+                    item.ScrapProDetailStatus = OutOrderStatusEnum.鍏抽棴.ObjToInt();
+                    item.OverScrapPcsQty = item.ScrapPcsQty;
+                    item.OverScrapSETQty = item.ScrapSETQty;
+                    ScrapSheetItem scrapSheetItem = new ScrapSheetItem()
+                    {
+                        PartNum = item.ScrapProCode,
+                        PartRev = item.ScrapProVersion,
+                        Lotno = item.ScrapProVersion,
+                        QtyOfArray = item.ScrapSETQty,
+                        QtyOfUnit = item.ScrapPcsQty,
+                        QtyOfArray_Alloc = 0,
+                        QtyOfUnit_Alloc = 0,
+                    };
+                    scrapSheetItems.Add(scrapSheetItem);
+                }
+                _unitOfWorkManage.BeginTran();
+                _proScrapSheetRepository.UpdateData(erpProScrapSheet);
+                BaseDal.UpdateData(erpProScrapSheetDetails);
+                if (erpProScrapSheet.ProScrapStatus == ProScrapSheetStatusEnum.Valid.ObjToInt())
+                {
+                    ERPScrapSheetModel scrapSheetModel = new ERPScrapSheetModel()
+                    {
+                        Way = 1,
+                        UniqueTag = erpProScrapSheet.Id.ToString(),
+                        Code = erpProScrapSheet.ProScrapSheetOrderNo,
+                        Status = ProScrapSheetStatusEnum.Valid.ToString(),
+                        Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                        Createuser = erpProScrapSheet.Creater,
+                        WarehouseCode = WarehouseEnum.HA71.ToString(),
+                        DataItem = new List<ScrapSheetItem>()
+                    };
+                    if (overCount>0)
+                    {
+                        foreach (var item in overDetails)
+                        {
+                            ScrapSheetItem scrapSheetItem = new ScrapSheetItem()
+                            {
+                                PartNum = item.ScrapProCode,
+                                PartRev = item.ScrapProVersion,
+                                Lotno = item.ScrapProVersion,
+                                QtyOfArray = item.ScrapSETQty,
+                                QtyOfUnit = item.ScrapPcsQty,
+                                QtyOfArray_Alloc = 0,
+                                QtyOfUnit_Alloc = 0,
+                            };
+                            scrapSheetItems.Add(scrapSheetItem);
+                        }
+                    }
+                    scrapSheetModel.DataItem = scrapSheetItems;
+                    //涓婁紶ERP鎶ュ簾
+                    string response = _invokeERPService.InvokeProScrapSheetApi(scrapSheetModel);
+                    ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>();
+                    if (requestContent.res != 1)
+                    {
+                        throw new Exception($"{requestContent.Data}");
+                    }
+                }
+                _unitOfWorkManage.CommitTran();
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 鎶ュ簾鏁版嵁澶勭悊
+        /// </summary>
+        public WebResponseContent LockOutboundStockDataUpdate(List<Dt_ProStockInfo> proStockInfos, List<Dt_ErpProScrapSheetDetail> scrapSheetDetails, List<Dt_OutProStockInfo> outProStockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock, List<Dt_Task>? tasks = null)
+        {
+            try
+            {
+                //鏇存柊搴撳瓨灞炴��
+                _stockService.ProStockInfoService.Repository.UpdateData(proStockInfos);
+                List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>();
+                foreach (var item in proStockInfos)
+                {
+                    proStockInfoDetails.AddRange(item.proStockInfoDetails);
+                }
+                //鏇存柊搴撳瓨鏄庣粏
+                proStockInfoDetails.ForEach(x => x.ProOutDetailStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt());
+                _stockService.ProStockInfoDetailService.Repository.UpdateData(proStockInfoDetails);
+                
+                BaseDal.UpdateData(scrapSheetDetails);
+
+                List<Dt_OutProStockInfo> addOutStockLockInfos = outProStockInfos.Where(x => x.Id == 0).ToList();
+                if (addOutStockLockInfos != null && addOutStockLockInfos.Any())
+                {
+                    if (tasks != null)
+                    {
+                        addOutStockLockInfos.ForEach(x =>
+                        {
+                            x.TaskNum = tasks.FirstOrDefault(v => v.PalletCode == x.PalletCode)?.TaskNum;
+                        });
+                    }
+
+                    _outProStockInfoService.Repository.AddData(addOutStockLockInfos);
+                }
+                List<Dt_OutProStockInfo> updateOutStockLockInfos = outProStockInfos.Where(x => x.Id > 0).ToList();
+                if (updateOutStockLockInfos != null && updateOutStockLockInfos.Any())
+                {
+                    _outProStockInfoService.Repository.UpdateData(updateOutStockLockInfos);
+                }
+
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, locationStatus, LocationChangeType.OutboundAssignLocation, "", tasks?.Select(x => x.TaskNum).ToList());
+                _basicService.LocationInfoService.Repository.UpdateLocationStatus(locationInfos, locationStatus);
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+        public (List<Dt_ProStockInfo>, List<Dt_ErpProScrapSheetDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) AssignProStockOut(List<Dt_ErpProScrapSheetDetail> proOutOrderDetails, Dt_ErpProScrapSheet scrapSheet)
+        {
+            List<Dt_ProStockInfo> outStocks = new List<Dt_ProStockInfo>();
+            List<Dt_OutProStockInfo> outProStockInfos = new List<Dt_OutProStockInfo>();
+            List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+            //List<Dt_ProOutOrderDetail> groupDetails = proOutOrderDetails.GroupBy(x => new { x.SaleOrder, x.PCode, x.PVer, x.PLot, x.DateCode }).Select(x => new Dt_ProOutOrderDetail()
+            //{
+            //    QtyPcs = x.Sum(x => x.QtyPcs) - x.Sum(x => x.OverQtyPcs),
+            //    SaleOrder = x.Key.SaleOrder,
+            //    PCode = x.Key.PCode,
+            //    PVer = x.Key.PVer,
+            //    PLot = x.Key.PLot,
+            //    DateCode = x.Key.DateCode,
+            //}).ToList();
+            //foreach (var item in groupDetails)
+            //{
+            //    float needQty = item.QtyPcs;
+            //    //鏌ユ壘鍙敤搴撳瓨
+            //    List<Dt_ProStockInfo> stockInfoss = _stockInfoService.ProStockInfoService.GetUseableStocks(proOutOrder.WarehouseId, item);
+            //    if (!stockInfoss.Any())
+            //    {
+            //        throw new Exception("鏈壘鍒板彲鍒嗛厤搴撳瓨");
+            //    }
+            //    //鑾峰彇鍑哄簱搴撳瓨
+            //    List<Dt_ProStockInfo> assignOutStocks = _stockInfoService.ProStockInfoService.GetOutboundStocks(stockInfoss, item, needQty, out float residueQuantity);
+            //    item.LockQtyPcs += needQty - residueQuantity;
+            //    if (item.QtyPcs> item.LockQtyPcs)
+            //    {
+            //        throw new Exception($"浜у搧缂栫爜{item.PCode}鍙垎閰嶆暟閲忎笉瓒�,鍙敤鏁伴噺{item.LockQtyPcs}");
+            //    }
+            //    outStocks.AddRange(assignOutStocks);
+            //    float assignQuantity = needQty - residueQuantity;
+            //    bool isCanLot = string.IsNullOrEmpty(item.PLot);
+            //    bool isCanDate = string.IsNullOrEmpty(item.DateCode);
+            //    List<Dt_ProOutOrderDetail> details = proOutOrderDetails
+            //        .Where(x =>x.PCode == item.PCode && x.PVer == item.PVer
+            //        && (isCanLot ? isCanLot : x.PLot == item.PLot)
+            //        && (isCanDate ? isCanDate : x.DateCode == item.DateCode))
+            //        .ToList();
+
+            //    for (int i = 0; i < details.Count; i++)
+            //    {
+            //        float orderQuantity = details[i].QtyPcs;
+            //        for (int j = 0; j < assignOutStocks.Count; j++)
+            //        {
+            //            //鍑哄簱璁㈠崟鏄庣粏宸插垎閰嶆暟閲�
+            //            float detailAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer
+            //                && (isCanLot ? isCanLot : x.PLot == item.PLot)
+            //                && (isCanDate ? isCanDate : x.DateCode == item.DateCode)
+            //                && x.OrderDetailId == details[i].Id).Sum(x => x.AssignQuantity);
+
+            //            float palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer
+            //                && (isCanLot ? isCanLot : x.PLot == item.PLot)
+            //                && (isCanDate ? isCanDate : x.DateCode == item.DateCode)
+            //                && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity);
+            //            //鍑哄簱璇︽儏宸插垎閰嶆暟閲�
+            //            palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer
+            //                && (isCanLot ? isCanLot : x.PLot == item.PLot)
+            //                && (isCanDate ? isCanDate : x.DateCode == item.DateCode) 
+            //                && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity);//鍑哄簱璇︽儏宸插垎閰嶆暟閲�
+            //            float palletOutboundQuantity = assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
+            //            if (palletAssignQuantity < palletOutboundQuantity)//濡傛灉鍑哄簱璇︽儏宸插垎閰嶆暟閲忓皬浜庢墭鐩樺凡鍒嗛厤鏁伴噺锛屽垯鍙互缁х画娣诲姞璇ユ墭鐩樺嚭搴撲俊鎭�
+            //            {
+            //                float orderDetailNeedQuantity = details[i].QtyPcs - detailAssignQuantity;
+            //                if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity)
+            //                {
+            //                    details[i].LockQtyPcs += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity;
+            //                    Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, details[i], assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity);
+            //                    outProStockInfos.Add(outStockLockInfo);
+            //                }
+            //                else
+            //                {
+            //                    Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, details[i], assignOutStocks[j], details[i].QtyPcs - details[i].LockQtyPcs);
+            //                    outProStockInfos.Add(outStockLockInfo);
+            //                    details[i].LockQtyPcs = details[i].QtyPcs;
+            //                    break;
+            //                }
+
+            //            }
+            //        }
+            //    }
+            //    List<string> locationArr = outStocks.Select(x => x.LocationCode).ToList();
+
+            //    locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr));
+
+            //}
+            foreach (var item in proOutOrderDetails)
+            {
+                float needQty = item.ScrapPcsQty;
+                //鏌ユ壘鍙敤搴撳瓨
+                List<Dt_ProStockInfo> stockInfoss = _stockService.ProStockInfoService.GetUseableStocks(scrapSheet.WarehouseId, item);
+                if (!stockInfoss.Any())
+                {
+                    throw new Exception("鏈壘鍒板彲鍒嗛厤搴撳瓨");
+                }
+                //鑾峰彇鍑哄簱搴撳瓨
+                List<Dt_ProStockInfo> assignOutStocks = _stockService.ProStockInfoService.GetOutboundStocks(stockInfoss, item, needQty, out float residueQuantity);
+                item.LockPcsQty += (int)(needQty - residueQuantity);
+                if (item.ScrapPcsQty > item.LockPcsQty)
+                {
+                    throw new Exception($"浜у搧缂栫爜{item.ScrapProCode}鍙垎閰嶆暟閲忎笉瓒�,鍙敤鏁伴噺{item.LockPcsQty}");
+                }
+                outStocks.AddRange(assignOutStocks);
+                item.LockPcsQty = 0;
+                for (int j = 0; j < assignOutStocks.Count; j++)
+                {
+                    //鍑哄簱璁㈠崟鏄庣粏宸插垎閰嶆暟閲�
+                    float detailAssignQuantity = outProStockInfos.Where(x => x.OrderDetailId == item.Id).Sum(x => x.AssignQuantity);
+                    ////鍑哄簱璇︽儏宸插垎閰嶆暟閲�
+                    //float palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer
+                    //    && (isCanLot ? isCanLot : x.PLot == item.PLot)
+                    //    && (isCanDate ? isCanDate : x.DateCode == item.DateCode)
+                    //    && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity);
+                    ////鍑哄簱璇︽儏宸插垎閰嶆暟閲�
+                    //float palletOutboundQuantity = assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
+                    //if (palletAssignQuantity < palletOutboundQuantity)//濡傛灉鍑哄簱璇︽儏宸插垎閰嶆暟閲忓皬浜庢墭鐩樺凡鍒嗛厤鏁伴噺锛屽垯鍙互缁х画娣诲姞璇ユ墭鐩樺嚭搴撲俊鎭�
+                    //{
+                    float orderDetailNeedQuantity = item.ScrapPcsQty - detailAssignQuantity;
+                    if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity))
+                    {
+                        item.LockPcsQty += (int)assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity);
+                        Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(scrapSheet, item, assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity));
+                        outProStockInfos.Add(outStockLockInfo);
+                    }
+                    else
+                    {
+                        Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(scrapSheet, item, assignOutStocks[j], item.ScrapPcsQty - detailAssignQuantity);
+                        outProStockInfos.Add(outStockLockInfo);
+                        item.LockPcsQty = item.ScrapPcsQty;
+                        break;
+                    }
+                    //}
+                }
+                List<string> locationArr = outStocks.Select(x => x.LocationCode).ToList();
+
+                locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr));
+
+            }
+            return (outStocks, proOutOrderDetails, outProStockInfos, locationInfos);
         }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetService.cs"
index 40a0e79..8ccb2c2 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetService.cs"
@@ -55,7 +55,7 @@
                 }
                 if (!item.ContainsKey(nameof(Dt_ErpProScrapSheetDetail.ScrapProDetailStatus).FirstLetterToLower()))
                 {
-                    item.Add(nameof(Dt_ErpProScrapSheetDetail.ScrapProDetailStatus).FirstLetterToLower(), OutOrderStatusEnum.鍑哄簱涓�.ObjToInt());
+                    item.Add(nameof(Dt_ErpProScrapSheetDetail.ScrapProDetailStatus).FirstLetterToLower(), OutOrderStatusEnum.鏈紑濮�.ObjToInt());
                 }
             }
             return base.AddData(saveModel);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutProStockInfoService.cs"
index 07bbbb5..891e797 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutProStockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutProStockInfoService.cs"
@@ -77,6 +77,36 @@
 
             return outProStockInfo;
         }
+        /// <summary>
+        /// 鎴愬搧鎶ュ簾鍑哄簱璇︽儏
+        /// </summary>
+        /// <returns></returns>
+        public Dt_OutProStockInfo GetOutStockLockInfo(Dt_ErpProScrapSheet proScrapSheet, Dt_ErpProScrapSheetDetail scrapSheetDetail, Dt_ProStockInfo proStockInfo, float assignQty, int? taskNum = null)
+        {
+            Dt_OutProStockInfo outProStockInfo = new Dt_OutProStockInfo()
+            {
+                OrderNo = proScrapSheet.ProScrapSheetOrderNo,
+                OrderDetailId = scrapSheetDetail.Id,
+                OrderType = 1,
+                BatchNo = scrapSheetDetail.ScrapProLotNo,
+                SaleOrder = "",
+                Customer = "",
+                PCode = scrapSheetDetail.ScrapProCode,
+                PVer = scrapSheetDetail.ScrapProVersion,
+                PLot = proStockInfo.proStockInfoDetails.FirstOrDefault()?.LotNumber ?? "",
+                DateCode = proStockInfo.proStockInfoDetails.FirstOrDefault()?.DateCode ?? "",
+                StockId = proStockInfo.Id,
+                OrderQuantity = scrapSheetDetail.ScrapPcsQty,
+                OriginalQuantity = proStockInfo.proStockInfoDetails.Sum(x => x.StockPcsQty),
+                AssignQuantity = assignQty,
+                LocationCode = proStockInfo.LocationCode,
+                PalletCode = proStockInfo.PalletCode,
+                Unit = "PCS",
+                TaskNum = taskNum,
+                Status = taskNum == null ? OutLockStockStatusEnum.宸插垎閰�.ObjToInt() : OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt()
+            };
+            return outProStockInfo;
+        }
         public List<Dt_OutProStockInfo> GetByOrderDetailId(int orderDetailId, OutLockStockStatusEnum? outStockStatus)
         {
             return BaseDal.QueryData(x => x.OrderDetailId == orderDetailId && outStockStatus == null ? true : x.Status == outStockStatus.ObjToInt());
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs"
index e97371f..8e775e6 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs"
@@ -30,8 +30,10 @@
         public IMesRworkOutboundOrderService RworkOutboundOrderService { get; }
         public IErpProTransferOrderService ErpProTransferOrderService { get; }
 
-
-        public OutboundService(IOutboundOrderDetailService outboundOrderDetailService, IMesRworkOutboundOrderService rworkOutboundOrderService,IMesPPOutboundOrderDetailService mesPPOutboundOrderDetailService, IMesPPCutOutboundOrderDetailService mesPPCutOutboundOrderDetailService, IMesPPCutOutboundOrderService mesPPCutOutboundOrderService, IMesPPOutboundOrderService mesPPOutboundOrderService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService, IMesOutboundOrderService mesOutboundOrderService,IProOutOrderService proOutOrderService, IProOutOrderDetailService proOutOrderDetailService,IErpProTransferOrderService erpProTransferOrderService)
+        public IErpProScrapSheetService ErpProScrapSheetService { get; }
+        public IErpProScrapSheetDetailService ErpProScrapSheetDetailService { get; }
+        public OutboundService(IOutboundOrderDetailService outboundOrderDetailService, IMesRworkOutboundOrderService rworkOutboundOrderService,IMesPPOutboundOrderDetailService mesPPOutboundOrderDetailService, IMesPPCutOutboundOrderDetailService mesPPCutOutboundOrderDetailService, IMesPPCutOutboundOrderService mesPPCutOutboundOrderService, IMesPPOutboundOrderService mesPPOutboundOrderService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService, IMesOutboundOrderService mesOutboundOrderService,IProOutOrderService proOutOrderService, IProOutOrderDetailService proOutOrderDetailService,IErpProTransferOrderService erpProTransferOrderService,
+            IErpProScrapSheetService erpProScrapSheetService, IErpProScrapSheetDetailService erpProScrapSheetDetailService)
         {
             OutboundOrderDetailService = outboundOrderDetailService;
             OutboundOrderService = outboundOrderService;
@@ -45,6 +47,8 @@
             ProOutOrderDetailService = proOutOrderDetailService;
             RworkOutboundOrderService = rworkOutboundOrderService;
             ErpProTransferOrderService = erpProTransferOrderService;
+            ErpProScrapSheetService = erpProScrapSheetService;
+            ErpProScrapSheetDetailService = erpProScrapSheetDetailService;
         }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
index 9ea6759..2ea2ca9 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
@@ -804,20 +804,20 @@
                             
                             //鏇存柊鍑哄簱鏄庣粏鍗曟暟閲�
                             proOutOrderDetail.OverQtyPcs += item.Quantity;
-                            item.Quantity -= item.Quantity;
-                            float Range = itemOut.StockPcsQty / itemOut.SETQty;
+                            int Range = (int)itemOut.StockPcsQty / (int)itemOut.SETQty;
                             if (Range == 0)
                             {
-                                return content.Error($"{itemOut.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�");
+                                return content.Error($"{itemOut.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�,Range:{Range}");
                             }
-                            int outSet = (int)(item.Quantity / Range);
+                            int outSet =item.Quantity / Range;
                             if (outSet == 0)
                             {
-                                return content.Error($"{itemOut.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�");
+                                return content.Error($"{itemOut.BagNo}鍗曞厓鏁伴噺杞崲澶辫触,璇锋鏌�,outSet:{outSet}");
                             }
                             itemOut.SETQty -= outSet;
                             
                             itemOut.StockPcsQty -= item.Quantity;
+                            item.Quantity = 0;
                             if (proOutOrderDetail.OverQtyPcs > proOutOrderDetail.QtyPcs)
                             {
                                 return content.Error($"鍑哄簱鍗晎proOutOrder.ProOutOrderNo}閿�鍞鍗晎item.SoNumber}鏁伴噺婧㈠嚭{proOutOrderDetail.OverQtyPcs - proOutOrderDetail.QtyPcs}");
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs"
index 2675255..f27bff3 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs"
@@ -86,5 +86,26 @@
             proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x => x.proStockInfoDetails.Sum(x => x.StockPcsQty)).ToList();
             return proStockInfos;
         }
+        /// <summary>
+        /// 鑾峰彇MES鎻愬簱搴撳瓨(灏炬暟浠�)
+        /// </summary>
+        /// <param name="mesRworkOutboundOrder"></param>
+        /// <param name="locationInfos"></param>
+        /// <returns></returns>
+        public List<Dt_ProStockInfo> GetProStocks(Dt_ErpProScrapSheetDetail erpProScrapSheetDetail, List<string> locationInfos)
+        {
+            List<Dt_ProStockInfo>? proStockInfos = null;
+            proStockInfos = Db.Queryable<Dt_ProStockInfo>().Where(x => locationInfos.Contains(x.LocationCode) && x.ProStockAttribute == ProStockAttributeEnum.鎴愬搧.ObjToInt())
+                .Includes(x => x.proStockInfoDetails)
+                .Where(x => x.proStockInfoDetails
+                .Any(v =>
+                v.ProductCode == erpProScrapSheetDetail.ScrapProLotNo
+                && v.ProductCode == erpProScrapSheetDetail.ScrapProCode
+                && v.ProductVersion == erpProScrapSheetDetail.ScrapProVersion
+                ))
+            .ToList();
+            proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x => x.proStockInfoDetails.Sum(x => x.StockPcsQty)).ToList();
+            return proStockInfos;
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
index 3db069b..00a3ae1 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs"
@@ -113,6 +113,12 @@
             List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehouse.WarehouseId);
             return BaseDal.GetProStocks(mesRworkOutboundOrder, locationCodes);
         }
+        //鏌ユ壘鍙敤鎶ュ簾搴撳瓨
+        public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId, Dt_ErpProScrapSheetDetail erpProScrapSheetDetail)
+        {
+            List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId);
+            return BaseDal.GetProStocks(erpProScrapSheetDetail, locationCodes);
+        }
         /// <summary>
         /// 鑾峰彇鍑哄簱搴撳瓨
         /// </summary>
@@ -222,6 +228,66 @@
             return assignOutStocks;
         }
         /// <summary>
+        /// 鑾峰彇鎶ュ簾搴撳瓨
+        /// </summary>
+        public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ErpProScrapSheetDetail outOrderDetail, float needQuantity, out float residueQuantity)
+        {
+            List<Dt_ProStockInfo> assignOutStocks = new List<Dt_ProStockInfo>();
+            float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x);
+            //stockInfos = stockInfos.OrderBy(x => x.Id).ToList();
+            if (stockTotalQuantity >= needQuantity)//搴撳瓨澶�
+            {
+                int index = 0;
+                while (needQuantity > 0)
+                {
+                    Dt_ProStockInfo stockInfo = stockInfos[index];
+                    float useableStockQuantity = stockInfo.proStockInfoDetails
+                        .Where(x => 
+                            x.ProductCode == outOrderDetail.ScrapProCode 
+                            && x.ProductVersion==outOrderDetail.ScrapProVersion
+                            && x.LotNumber == outOrderDetail.ScrapProLotNo)
+                        .Sum(x => x.StockPcsQty - x.OutboundQuantity);
+                    if (useableStockQuantity < needQuantity && useableStockQuantity > 0)
+                    {
+                        stockInfo.proStockInfoDetails.Where(x => 
+                            x.ProductCode == outOrderDetail.ScrapProCode
+                            && x.ProductVersion == outOrderDetail.ScrapProVersion
+                            && x.LotNumber == outOrderDetail.ScrapProLotNo).ToList().ForEach(x => x.OutboundQuantity = x.StockPcsQty);
+                        needQuantity -= useableStockQuantity;
+                    }
+                    else
+                    {
+                        stockInfo.proStockInfoDetails.ForEach(x =>
+                        {
+                            //婊¤冻鏉′欢杩涜鍒嗛厤
+                            if ((x.StockPcsQty > x.OutboundQuantity)
+                            && x.ProductCode == outOrderDetail.ScrapProCode
+                            && x.ProductVersion == outOrderDetail.ScrapProVersion
+                            && x.LotNumber == outOrderDetail.ScrapProLotNo)
+                            {
+                                if (x.StockPcsQty - x.OutboundQuantity >= needQuantity)
+                                {
+                                    x.OutboundQuantity += needQuantity;
+                                    needQuantity = 0;
+                                    x.OutDetailId = outOrderDetail.Id;
+                                }
+                                else
+                                {
+                                    needQuantity -= (x.StockPcsQty - x.OutboundQuantity);
+                                    x.OutboundQuantity = x.StockPcsQty;
+                                    x.OutDetailId = outOrderDetail.Id;
+                                }
+                            }
+                        });
+                    }
+                    assignOutStocks.Add(stockInfo);
+                    index++;
+                }
+            }
+            residueQuantity = needQuantity;
+            return assignOutStocks;
+        }
+        /// <summary>
         /// 鑾峰彇MES鎻愬簱搴撳瓨
         /// </summary>
         public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_MesRworkOutboundOrder mesRworkOutboundOrder, float needQuantity, out float residueQuantity)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index b3dcf34..b453a70 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
@@ -829,6 +829,9 @@
                     case (int)TaskTypeEnum.OutMesRworkProduct:
                         content = OutMesRworkCompleted(task);
                         break;
+                    case (int)TaskTypeEnum.OutProScrap:
+                        content = OutProScrapCompleted(task);
+                        break;
                     default:
                         content.Error("鏈煡浠诲姟绫诲瀷");
                         break;
@@ -1023,6 +1026,89 @@
             }
             return content;
         }
+        public WebResponseContent OutProScrapCompleted(Dt_Task task)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                //鑾峰彇璐т綅
+                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
+                if (locationInfo == null)
+                {
+                    return content.Error("鏈壘鍒拌揣浣嶄俊鎭�");
+                }
+                //鏍规嵁浠诲姟鑾峰彇鎴愬搧鍑哄簱璇︽儏浠诲姟鍙婄墿鏂欎俊鎭�
+                Dt_OutProStockInfo outProStockInfo = _outProStockInfoRepository.QueryFirst(x => x.TaskNum == task.TaskNum);
+                if (outProStockInfo == null)
+                {
+                    return content.Error("鏈壘鍒版垚鍝佸嚭搴撹鎯�");
+                }
+                //鑾峰彇鎴愬搧鎶ュ簾鍗�
+
+                Dt_ErpProScrapSheet erpProScrapSheet = _outboundRepository.ErpProScrapSheetRepository.Db.Queryable<Dt_ErpProScrapSheet>().Where(x => x.ProScrapSheetOrderNo == outProStockInfo.OrderNo).Includes(x=>x.Details).First();
+                if (erpProScrapSheet == null)
+                {
+                    return content.Error("鏈壘鍒版垚鍝佹姤搴熷崟");
+                }
+                Dt_ErpProScrapSheetDetail erpProScrapSheetDetail = erpProScrapSheet.Details.FirstOrDefault(x => x.Id == outProStockInfo.OrderDetailId);
+                if (erpProScrapSheetDetail == null)
+                {
+                    return content.Error("鏈壘鍒版垚鍝佹姤搴熷崟鏄庣粏");
+                }
+                if (erpProScrapSheetDetail.ScrapProDetailStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+                {
+                    return content.Error($"鎴愬搧鎶ュ簾鍗曟槑缁嗚{erpProScrapSheetDetail.Id}宸插畬鎴�");
+                }
+                erpProScrapSheetDetail.ScrapProDetailStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+                //鑾峰彇褰撳墠搴撳瓨
+                Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First();
+                if (proStockInfo == null)
+                {
+                    return content.Error($"鏈壘鍒皗task.PalletCode}搴撳瓨淇℃伅");
+                }
+                List<Dt_ProStockInfoDetail> proStockInfoDetails = proStockInfo.proStockInfoDetails;
+                if (proStockInfoDetails.Count <= 0)
+                {
+                    return content.Error("鎴愬搧搴撳瓨鏄庣粏涓虹┖");
+                }
+                proStockInfoDetails.ForEach(x =>
+                {
+                    x.OutboundQuantity = 0;
+                    x.ProOutDetailStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
+                });
+                proStockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt();
+                //鑾峰彇鎴愬搧骞冲簱
+                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString());
+                proStockInfo.WarehouseId = warehouse.WarehouseId;
+                proStockInfo.LocationCode = "鎴愬搧鍖呰鎷h揣鍖�";
+                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
+                outProStockInfo.Status = OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+                _unitOfWorkManage.BeginTran();
+                //璐т綅鍙樺姩璁板綍
+                int beforeStatus = locationInfo.LocationStatus;
+                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
+                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, locationInfo.WarehouseId);
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, erpProScrapSheet?.ProScrapSheetOrderNo ?? "", task.TaskNum);
+                _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo);
+                _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
+                _outProStockInfoRepository.UpdateData(outProStockInfo);
+                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                //MES鎴愬搧搴撳瓨鏉垮嚭搴撳悓姝�
+                //WebResponseContent responseContent = ProductOutBoundSync(MesProOutBound(mesRworkOutboundOrder, proStockInfoDetails));
+                //if (!responseContent.Status)
+                //{
+                //    throw new Exception("鍚屾MES搴撳瓨鏉垮嚭搴撳け璐�,閿欒:"+ responseContent.Message);
+                //}
+                _unitOfWorkManage.CommitTran();
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
         /// <summary>
         /// 鐩樼偣鍑哄簱瀹屾垚
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
index 98f3311..c6482fb 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
@@ -260,6 +260,85 @@
             return content;
         }
         /// <summary>
+        /// 鐢熸垚鎴愬搧鎶ュ簾浠诲姟
+        /// </summary>
+        /// <param name="ProOutNo">鍑哄簱璁㈠崟鍙�</param>
+        /// <param name="StationCode">绔欏彴鍦板潃</param>
+        /// <returns></returns>
+        public async Task<WebResponseContent> OutProScrapTask(int[] keys, string StationCode, int Grade)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                if (StationCode.IsNullOrEmpty())
+                {
+                    return await Task.FromResult(content.Error("鍐呴儴閿欒"));
+                }
+                //鑾峰彇鎴愬搧鎶ュ簾璁㈠崟
+                List<Dt_ErpProScrapSheetDetail> _ProOutOrderDetails = await _outboundRepository.ErpProScrapDetailRepository.QueryDataAsync(x => keys.Contains(x.Id) && x.ScrapProDetailStatus == OutOrderStatusEnum.鏈紑濮�.ObjToInt());
+                if (_ProOutOrderDetails.Count <= 0)
+                {
+                    return await Task.FromResult(content.Error("鍕鹃�夎鍗曟槑缁嗙姸鎬佷负鍑哄簱涓�"));
+                }
+                List<Dt_Task> tasks = new List<Dt_Task>();
+                List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
+                List<Dt_ErpProScrapSheetDetail> proOutOrderDetails = new List<Dt_ErpProScrapSheetDetail>();
+                List<Dt_OutProStockInfo> outProStockInfos = new List<Dt_OutProStockInfo>();
+                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+                (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ErpProScrapSheetDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) result =
+                OutProScrapTaskDataHandle(_ProOutOrderDetails);
+                if (result.Item2 != null && result.Item2.Count > 0)
+                {
+                    proStockInfos.AddRange(result.Item2);
+                }
+                if (result.Item3 != null && result.Item3.Count > 0)
+                {
+                    proOutOrderDetails.AddRange(result.Item3);
+                }
+                if (result.Item4 != null && result.Item4.Count > 0)
+                {
+                    outProStockInfos.AddRange(result.Item4);
+                }
+                if (result.Item5 != null && result.Item5.Count > 0)
+                {
+                    locationInfos.AddRange(result.Item5);
+                }
+                if (result.Item1 != null && result.Item1.Count > 0)
+                {
+                    Dt_Task? task = BaseDal.QueryData(x => x.TaskType == TaskTypeEnum.OutProScrap.ObjToInt()).OrderBy(x => x.Grade).FirstOrDefault();
+                    //鏇存柊鍑哄簱鐩殑浣嶇疆
+                    result.Item1.ForEach(x =>
+                    {
+                        x.TargetAddress = StationCode;
+                        if (Grade == 1 || task == null)
+                        {
+                            x.Grade = 127;
+                        }
+                        else
+                        {
+                            if (task.Grade == 0 || task.Grade == 1)
+                            {
+                                x.Grade = 1;
+                            }
+                            else
+                            {
+                                x.Grade = task.Grade - 1;
+                            }
+                        }
+                    });
+                    tasks.AddRange(result.Item1);
+                }
+                //澶勭悊鍑哄簱鏁版嵁
+                return await Task.FromResult(GenerateOutboundTaskDataUpdate(tasks, proStockInfos, proOutOrderDetails, outProStockInfos, locationInfos));
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
         /// 浜哄伐閫夊畾搴撳瓨鍑哄簱
         /// </summary>
         /// <returns></returns>
@@ -505,6 +584,51 @@
 
         }
         /// <summary>
+        /// 澶勭悊鍑哄簱鏁版嵁
+        /// </summary>
+        public WebResponseContent GenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_ProStockInfo>? proStockInfos = null, List<Dt_ErpProScrapSheetDetail>? scrapSheetDetails = null, List<Dt_OutProStockInfo>? outProStockInfos = null, List<Dt_LocationInfo>? locationInfos = null)
+        {
+            try
+            {
+                _unitOfWorkManage.BeginTran();
+                //鑾峰彇鎴愬搧鍑哄簱鍗曚富琛�
+                Dt_ErpProScrapSheet scrapSheet = _outboundRepository.ErpProScrapSheetRepository.QueryFirst(x => x.Id == scrapSheetDetails.FirstOrDefault().ProScrapSheetId);
+                BaseDal.AddData(tasks);
+                if (proStockInfos != null && proStockInfos.Count > 0 && scrapSheetDetails != null && scrapSheetDetails.Count > 0 && outProStockInfos != null && outProStockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0)
+                {
+                    proStockInfos.ForEach(x =>
+                    {
+                        x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt();
+                    });
+                    WebResponseContent content = _outboundService.ErpProScrapSheetDetailService.LockOutboundStockDataUpdate(proStockInfos, scrapSheetDetails, outProStockInfos, locationInfos, tasks: tasks);
+
+                    if (!content.Status)
+                    {
+                        _unitOfWorkManage.RollbackTran();
+                        return content;
+                    }
+                }
+                else if (scrapSheetDetails != null && scrapSheetDetails.Count > 0)
+                {
+                    scrapSheetDetails.ForEach(x =>
+                    {
+                        x.ScrapProDetailStatus = OutOrderStatusEnum.鍑哄簱涓�.ObjToInt();
+                    });
+
+                    _outboundRepository.ErpProScrapDetailRepository.UpdateData(scrapSheetDetails);
+                }
+                _unitOfWorkManage.CommitTran();
+                PushTasksToWCS(tasks);
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+
+        }
+        /// <summary>
         /// 澶勭悊鎴愬搧鍑哄簱鏁版嵁
         /// </summary>
         /// <returns></returns>
@@ -552,6 +676,46 @@
             }
             return (tasks, proStockInfos, proOutOrderDetails, outProStockInfos, locationInfos);
         }
+        public (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ErpProScrapSheetDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) OutProScrapTaskDataHandle(List<Dt_ErpProScrapSheetDetail> scrapSheetDetails)
+        {
+            List<Dt_Task> tasks = new List<Dt_Task>();
+            List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
+            List<Dt_ErpProScrapSheetDetail> assignOutOrderDetails = new List<Dt_ErpProScrapSheetDetail>();
+            List<Dt_OutProStockInfo> outProStockInfos = new List<Dt_OutProStockInfo>();
+            List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+            
+            //鑾峰彇鎶ュ簾鍗�
+            Dt_ErpProScrapSheet scrapSheet = _outboundRepository.ErpProScrapSheetRepository.QueryFirst(x => x.Id == scrapSheetDetails.FirstOrDefault().ProScrapSheetId);
+            if (scrapSheet == null)
+            {
+                throw new Exception("鏈壘鍒版垚鍝佹姤搴熻鍗�");
+            }
+            //鍒嗛厤搴撳瓨
+            (List<Dt_ProStockInfo>, List<Dt_ErpProScrapSheetDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) result = _outboundService.ErpProScrapSheetDetailService.AssignProStockOut(scrapSheetDetails, scrapSheet);
+            if (result.Item1 != null && result.Item1.Count > 0)
+            {
+                TaskTypeEnum typeEnum = TaskTypeEnum.OutProScrap;
+                tasks = GetTasks(result.Item1, typeEnum);
+                result.Item2.ForEach(x =>
+                {
+                    x.ScrapProDetailStatus = OutOrderStatusEnum.鍑哄簱涓�.ObjToInt();
+                });
+                result.Item3.ForEach(x =>
+                {
+                    x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt();
+                });
+                tasks.ForEach(x => x.OrderNo = scrapSheet.ProScrapSheetOrderNo);
+                proStockInfos = result.Item1;
+                assignOutOrderDetails = result.Item2;
+                outProStockInfos = result.Item3;
+                locationInfos = result.Item4;
+            }
+            else
+            {
+                throw new Exception("鏃犲彲鍒嗛厤搴撳瓨");
+            }
+            return (tasks, proStockInfos, assignOutOrderDetails, outProStockInfos, locationInfos);
+        }
         /// <summary>
         /// 鐢熸垚浠诲姟
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs"
index d9fe9c0..5330a30 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs"
@@ -292,6 +292,7 @@
             {
                 return MesResponseContent.Instance.Error(responseContent.Message);
             }
+            model.Content.CreatorCode = "QMS";
             string content = _invokeERPService.InvokeCheckOrderApi(model.Content);
             ErpRequestContent requestContent = content.DeserializeObject<ErpRequestContent>();
             if (requestContent.res != 1)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ErpProScrapSheetDetailController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ErpProScrapSheetDetailController.cs"
index 986bfa7..ae53f35 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ErpProScrapSheetDetailController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ErpProScrapSheetDetailController.cs"
@@ -1,4 +1,7 @@
-锘縰sing Microsoft.AspNetCore.Mvc;
+锘縰sing Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using WIDESEA_Core;
+using WIDESEA_Core.Attributes;
 using WIDESEA_Core.BaseController;
 using WIDESEA_IOutboundService;
 using WIDESEA_Model.Models;
@@ -16,5 +19,18 @@
         {
 
         }
+        /// <summary>
+        /// 鎶ュ簾鍗曟槑缁嗘煡璇�
+        /// </summary>
+        [HttpPost, Route("GetByDetails"), AllowAnonymous]
+        public List<Dt_ErpProScrapSheetDetail> GetByDetails(string scrapNo)
+        {
+            return Service.GetByDetails(scrapNo);
+        }
+        [HttpPost, Route("UpProScrap"), AllowAnonymous]
+        public WebResponseContent UpProScrap([FromBody] int[] keys, string scrapNo)
+        {
+            return Service.UpProScrap(scrapNo,keys);
+        }
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
index 21ebc59..3a7cf2e 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -228,6 +228,15 @@
         {
             return await Service.OutProductTask(keys, StationCode, Grade);
         }
+
+        /// <summary>
+        /// 鐢熸垚鎴愬搧鎶ュ簾浠诲姟
+        /// </summary>
+        [HttpPost, HttpGet, Route("OutProScrapTask"), AllowAnonymous]
+        public async Task<WebResponseContent> OutProScrapTask([FromBody] int[] keys, string StationCode, int Grade)
+        {
+            return await Service.OutProScrapTask(keys, StationCode, Grade);
+        }
         ///// <summary>
         ///// 鐢熸垚MESPP浠撳ぇ鍗峰嚭搴撲换鍔�
         ///// </summary>

--
Gitblit v1.9.3