From 597f8e08e6264b2143454e40a7be553d1e8b6df7 Mon Sep 17 00:00:00 2001
From: sjz <1240968267@qq.com>
Date: 星期五, 09 五月 2025 17:04:19 +0800
Subject: [PATCH] 2025/5/9 沈

---
 StandardInterface/MESApplication/Controllers/QcIssueResult/QcIssueResultController.cs |  135 ++++
 StandardInterface/MES.Service/Modes/QcIssueResult/DingNameCode.cs                     |   25 
 .vs/HM-C#/v17/DocumentLayout.json                                                     |   23 
 StandardInterface/MES.Service/service/PLM/WarehouseDownloadDoc.cs                     |  145 ++++
 StandardInterface/MESApplication/Controllers/Base/LoginController.cs                  |   44 +
 StandardInterface/MES.Service/Modes/QcIssueResult/UpdateMesQaItems .cs                |   36 +
 StandardInterface/MES.Service/Modes/QcIssueResult/IqcApplicant.cs                     |   29 
 StandardInterface/MES.Service/Modes/QcIssueResult/QcIssueResults.cs                   |   70 ++
 StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs           |  764 ++++++++++++++++++++++++
 StandardInterface/MES.Service/Dto/webApi/PLM/StdDocument.cs                           |   23 
 StandardInterface/MES.Service/Modes/LtsLlj.cs                                         |   12 
 StandardInterface/MESApplication/Controllers/BasicData/MesRohInController.cs          |    1 
 StandardInterface/MES.Service/Modes/MesItems.cs                                       |   21 
 .vs/VSWorkspaceState.json                                                             |    1 
 StandardInterface/MES.Service/Dto/webApi/QcIssueResult/QcIssueResult.cs               |   12 
 StandardInterface/MES.Service/MES.Service.csproj                                      |   10 
 StandardInterface/MESApplication/Config/appsettings.json                              |   10 
 StandardInterface/MES.Service/Dto/webApi/ErpItems.cs                                  |    4 
 StandardInterface/MES.Service/Dto/webApi/QcIssueResult/ErpQcIssueResult.cs            |   44 +
 StandardInterface/MESApplication/Controllers/PLM/PLMController.cs                     |  125 ++++
 .vs/HM-C#/v17/.wsuo                                                                   |    0 
 StandardInterface/MES.Service/Dto/webApi/PLM/RelatedObject.cs                         |   17 
 StandardInterface/MES.Service/Modes/QcIssueResult/IqcDepartment.cs                    |   25 
 StandardInterface/MES.Service/service/BasicData/RawMaterial/MesRohInManager.cs        |    6 
 StandardInterface/MES.Service/Dto/webApi/PLM/BaseObject.cs                            |   12 
 StandardInterface/MES.Service/resources/TopSdk.dll                                    |    0 
 StandardInterface/MES.Service/Modes/QcIssueResult/GetQcIssueResultDetail.cs           |   51 +
 StandardInterface/MES.Service/service/BasicData/Material/MesItemsManager.cs           |    4 
 StandardInterface/MES.Service/service/PLM/PLMManager.cs                               |  189 ++++++
 29 files changed, 1,828 insertions(+), 10 deletions(-)

diff --git "a/.vs/HM-C\043/v17/.wsuo" "b/.vs/HM-C\043/v17/.wsuo"
new file mode 100644
index 0000000..ffcd3b5
--- /dev/null
+++ "b/.vs/HM-C\043/v17/.wsuo"
Binary files differ
diff --git "a/.vs/HM-C\043/v17/DocumentLayout.json" "b/.vs/HM-C\043/v17/DocumentLayout.json"
new file mode 100644
index 0000000..7f931ec
--- /dev/null
+++ "b/.vs/HM-C\043/v17/DocumentLayout.json"
@@ -0,0 +1,23 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "D:\\VISUAL STUDIOS JOB\\HM\\HM-C#\\",
+  "Documents": [],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": -1,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json
index 6b61141..7cec5fb 100644
--- a/.vs/VSWorkspaceState.json
+++ b/.vs/VSWorkspaceState.json
@@ -2,5 +2,6 @@
   "ExpandedNodes": [
     ""
   ],
+  "SelectedNode": "\\MESApplication.sln",
   "PreviewInSolutionExplorer": false
 }
\ No newline at end of file
diff --git a/StandardInterface/MES.Service/Dto/webApi/ErpItems.cs b/StandardInterface/MES.Service/Dto/webApi/ErpItems.cs
index f891521..f8b7caa 100644
--- a/StandardInterface/MES.Service/Dto/webApi/ErpItems.cs
+++ b/StandardInterface/MES.Service/Dto/webApi/ErpItems.cs
@@ -79,4 +79,8 @@
      public string? F_DCSL { get; set; }    //鍊掑啿鏁伴噺
     public string? F_BZGS { get; set; }    //鏍囧噯宸ユ椂
     public string? F_FZMC { get; set; }    //鐗╂枡鍒嗙粍鍚嶇О锛堢被鍨嬪悕绉帮級
+    public string? MJBM { get; set; }    //妯″叿缂栫爜锛堝悕绉帮級
+      public string? KHWLBM { get; set; }   //瀹㈡埛鐗╂枡缂栫爜
+    public string? YS { get; set; }      //棰滆壊
+    public string? NEXT_GX { get; set; }      //涓嬮亾宸ュ簭
 }
\ No newline at end of file
diff --git a/StandardInterface/MES.Service/Dto/webApi/PLM/BaseObject.cs b/StandardInterface/MES.Service/Dto/webApi/PLM/BaseObject.cs
new file mode 100644
index 0000000..5794080
--- /dev/null
+++ b/StandardInterface/MES.Service/Dto/webApi/PLM/BaseObject.cs
@@ -0,0 +1,12 @@
+锘�
+namespace MES.Service.Dto.webApi.PLM;
+
+public class BaseObject
+{
+    //瀹炰綋涓婚敭
+    public long? FID { get; set; }
+    //缂栫爜
+    public string? FCode { get; set; }
+    //鍚嶇О
+    public string? FName { get; set; }
+}
diff --git a/StandardInterface/MES.Service/Dto/webApi/PLM/RelatedObject.cs b/StandardInterface/MES.Service/Dto/webApi/PLM/RelatedObject.cs
new file mode 100644
index 0000000..cdee91e
--- /dev/null
+++ b/StandardInterface/MES.Service/Dto/webApi/PLM/RelatedObject.cs
@@ -0,0 +1,17 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.Dto.webApi.PLM;
+
+public class RelatedObject
+{
+    //瀹炰綋涓婚敭
+    public long? FID { get; set; }
+    //鐗╂枡缂栫爜
+    public string? FRE_FCode { get; set; }
+    //鐩稿叧瀵硅薄
+    public long? FRelatedObject { get; set; }
+}
diff --git a/StandardInterface/MES.Service/Dto/webApi/PLM/StdDocument.cs b/StandardInterface/MES.Service/Dto/webApi/PLM/StdDocument.cs
new file mode 100644
index 0000000..151a151
--- /dev/null
+++ b/StandardInterface/MES.Service/Dto/webApi/PLM/StdDocument.cs
@@ -0,0 +1,23 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.Dto.webApi.PLM;
+
+public class StdDocument
+{
+    //瀹炰綋涓婚敭
+    public long? FID { get; set; }
+    //缂栫爜
+    public string? FCode { get; set; }
+    //鍚嶇О
+    public string? FName { get; set; }
+    //鐗╃悊鏂囦欢鍚�
+    public string? FPhysicalFileName { get; set; }
+    //鐗╃悊鏂囦欢
+    public string? FFileId { get; set; }
+    //鍏宠仈瀵硅薄 杞殑 pdf
+    public string? FRelevantObject { get; set; }
+}
diff --git a/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/ErpQcIssueResult.cs b/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/ErpQcIssueResult.cs
new file mode 100644
index 0000000..62375ce
--- /dev/null
+++ b/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/ErpQcIssueResult.cs
@@ -0,0 +1,44 @@
+锘縰sing Newtonsoft.Json;
+using System.Collections.Generic;
+
+public class ErpQcIssueResult
+{
+  
+    public string? ProcessNo { get; set; }
+
+ 
+    public string? FReview { get; set; }
+
+
+    public string? QcStatus { get; set; }  // 鍘烸CSTATU鏀逛负瑙勮寖鍛藉悕
+
+    // 鏂板鍚堝苟瀛楁
+ 
+    public string? Remark { get; set; }
+
+
+    public int? ApplicationQuantity { get; set; }  // 淇濇寔鍙┖鎬�
+
+
+    public string? Reason { get; set; }
+
+
+    public string? BadCauses { get; set; }
+
+ 
+    public string? AffiliatedWorkshop { get; set; }
+
+ 
+    public string? ItemName { get; set; }
+
+ 
+    public string? SupplierName { get; set; }
+
+  
+    public string? ItemNo { get; set; }
+
+ 
+    public List<string> Applicants { get; set; } = new List<string>();
+
+    public List<string> ApplicationDepartments { get; set; } = new List<string>();
+}
diff --git a/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/QcIssueResult.cs b/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/QcIssueResult.cs
new file mode 100644
index 0000000..6ce15a0
--- /dev/null
+++ b/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/QcIssueResult.cs
@@ -0,0 +1,12 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.Dto.webApi.QcIssueResult;
+
+public class QcIssueResult
+{
+    public ErpQcIssueResult ErpQcIssueResult { get; set; }
+}
diff --git a/StandardInterface/MES.Service/MES.Service.csproj b/StandardInterface/MES.Service/MES.Service.csproj
index 89bbd58..0cdbe87 100644
--- a/StandardInterface/MES.Service/MES.Service.csproj
+++ b/StandardInterface/MES.Service/MES.Service.csproj
@@ -7,12 +7,19 @@
     </PropertyGroup>
 
     <ItemGroup>
+        <PackageReference Include="AlibabaCloud.SDK.Dingtalk" Version="2.1.99" />
         <PackageReference Include="Masuit.Tools.Core" Version="2024.3.4" />
+        <PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.4" />
+        <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.4" />
+        <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.4" />
+        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
+        <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
         <PackageReference Include="SqlSugarCore" Version="5.1.4.158" />
     </ItemGroup>
 
     <ItemGroup>
       <Folder Include="Dto\webApi\SRM\" />
+      <Folder Include="Dto\webApi\鏂版枃浠跺す\" />
       <Folder Include="Modes\SRM\" />
       <Folder Include="service\SRM\" />
     </ItemGroup>
@@ -21,6 +28,9 @@
       <Reference Include="Kingdee.CDP.WebApi.SDK">
         <HintPath>resources\Kingdee.CDP.WebApi.SDK.dll</HintPath>
       </Reference>
+      <Reference Include="TopSdk">
+        <HintPath>resources\TopSdk.dll</HintPath>
+      </Reference>
     </ItemGroup>
 
 </Project>
diff --git a/StandardInterface/MES.Service/Modes/LtsLlj.cs b/StandardInterface/MES.Service/Modes/LtsLlj.cs
index 0e7f4eb..2aecc8a 100644
--- a/StandardInterface/MES.Service/Modes/LtsLlj.cs
+++ b/StandardInterface/MES.Service/Modes/LtsLlj.cs
@@ -147,6 +147,18 @@
     public string? SuppName { get; set; }
 
     /// <summary>
+    ///     缁勭粐缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPARTMENTID")]
+    public string? DEPARTMENTID { get; set; }
+
+    /// <summary>
+    ///     缁勭粐鍚嶇О
+    /// </summary>
+    [SugarColumn(ColumnName = "DEPARTMENTNAME")]
+    public string? DEPARTMENTNAME { get; set; }
+
+    /// <summary>
     ///     鐗╂枡瑙勬牸
     /// </summary>
     [SugarColumn(ColumnName = "ITEM_MODEL")]
diff --git a/StandardInterface/MES.Service/Modes/MesItems.cs b/StandardInterface/MES.Service/Modes/MesItems.cs
index 265e4c0..bd6cf87 100644
--- a/StandardInterface/MES.Service/Modes/MesItems.cs
+++ b/StandardInterface/MES.Service/Modes/MesItems.cs
@@ -482,5 +482,26 @@
     /// </summary>
     [SugarColumn(ColumnName = "WLFZMC")]
     public string? WLFZMC { get; set; }
+    /// <summary>
+    ///     妯″叿缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "MJBM")]
+    public string? MJBM { get; set; }
+
+    /// <summary>
+    ///     瀹㈡埛鐗╂枡缂栫爜
+    /// </summary>
+    [SugarColumn(ColumnName = "KHWLBM")]
+    public string? KHWLBM { get; set; }
+    /// <summary>
+    ///     棰滆壊
+    /// </summary>
+    [SugarColumn(ColumnName = "YS")]
+    public string? YS { get; set; }
+    /// <summary>
+    ///     涓嬮亾宸ュ簭
+    /// </summary>
+    [SugarColumn(ColumnName = "NEXT_GX")]
+    public string? Next_Gx { get; set; }
 
 }
\ No newline at end of file
diff --git a/StandardInterface/MES.Service/Modes/QcIssueResult/DingNameCode.cs b/StandardInterface/MES.Service/Modes/QcIssueResult/DingNameCode.cs
new file mode 100644
index 0000000..659ff2f
--- /dev/null
+++ b/StandardInterface/MES.Service/Modes/QcIssueResult/DingNameCode.cs
@@ -0,0 +1,25 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.Modes.QcIssueResult;
+
+//閽夐拤鐢ㄦ埛鍐呯爜瀵瑰簲琛�
+[SugarTable("MES_STAFF")]
+internal class DingNameCode
+{
+
+    [SugarColumn(ColumnName = "STAFF_NO")]
+    public string? STAFF_NO { get; set; }
+
+    //閽夐拤鐢ㄦ埛鍐呯爜
+    [SugarColumn(ColumnName = "STAFF_NAME")]
+    public string? STAFF_NAME { get; set; }
+
+    //閽夐拤鐢ㄦ埛鍚嶇О
+    [SugarColumn(ColumnName = "PHONE_NUMBER")]
+    public string? PHONE_NUMBER { get; set; }
+}
diff --git a/StandardInterface/MES.Service/Modes/QcIssueResult/GetQcIssueResultDetail.cs b/StandardInterface/MES.Service/Modes/QcIssueResult/GetQcIssueResultDetail.cs
new file mode 100644
index 0000000..ef667f2
--- /dev/null
+++ b/StandardInterface/MES.Service/Modes/QcIssueResult/GetQcIssueResultDetail.cs
@@ -0,0 +1,51 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.Modes.QcIssueResult;
+
+public class GetQcIssueResultDetail
+{
+    //鐢宠鏁伴噺
+
+    public string? FbatchQty { get; set; }
+
+    //浜у搧鍚嶇О
+  
+    public string? ItemName { get; set; }
+
+    //瑙勬牸缂栫爜
+
+    public string? ItemNo { get; set; }
+
+    //渚涘簲鍟嗗悕绉�
+    public string? SuppName { get; set; }
+
+    //娴嬭瘯浜у搧璐ㄩ噺鐘跺喌鍙婄敵璇峰師鍥�
+    public string? AppicationReason { get; set; }
+
+    //璁㈠崟鍙�(閲囪喘鍗曞彿)
+    public string? BadReason { get; set; }
+
+    //澶囨敞
+    public string? remark { get; set; }
+
+    //妫�楠屽崟鍙�
+    public string? ReleaseNo { get; set; }
+
+    //鐢ㄦ埛鍐呯爜
+    public string? StaffNo { get; set; }
+
+    //璇勫鐘舵��
+    public string? IqcStatus { get; set; }
+
+    //鐢宠閮ㄩ棬
+    public string? Department { get; set; }
+
+    //鐢宠閮ㄩ棬
+    public string? WorkShop { get; set; }
+
+}
diff --git a/StandardInterface/MES.Service/Modes/QcIssueResult/IqcApplicant.cs b/StandardInterface/MES.Service/Modes/QcIssueResult/IqcApplicant.cs
new file mode 100644
index 0000000..28381fa
--- /dev/null
+++ b/StandardInterface/MES.Service/Modes/QcIssueResult/IqcApplicant.cs
@@ -0,0 +1,29 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.Modes.QcIssueResult;
+
+//寮傚父澶勭疆鍗曠粨鏋滆〃
+[SugarTable("MES_QCISSUE_RESULT_APPLICANT")]
+public class IqcApplicant
+{
+    //SEQ_QCISSUE_RESULT_APPLICANT
+    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true, OracleSequenceName = "SEQ_QCISSUE_RESULT_APPLICANT")]
+    public decimal Id { get; set; }
+
+    //鐢宠浜篒D
+    [SugarColumn(ColumnName = "APPLICANTID")]
+    public string? APPLICANTID { get; set; }
+
+    //娴佺▼鍙�
+    [SugarColumn(ColumnName = "INSTANCEID")]
+    public string? INSTANCEID { get; set; }
+
+    //鐢宠浜哄悕瀛�
+    [SugarColumn(ColumnName = "APPLICANTNAME")]
+    public string? APPLICANTNAME { get; set; }
+}
diff --git a/StandardInterface/MES.Service/Modes/QcIssueResult/IqcDepartment.cs b/StandardInterface/MES.Service/Modes/QcIssueResult/IqcDepartment.cs
new file mode 100644
index 0000000..21531f7
--- /dev/null
+++ b/StandardInterface/MES.Service/Modes/QcIssueResult/IqcDepartment.cs
@@ -0,0 +1,25 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.Modes.QcIssueResult;
+
+//寮傚父澶勭疆鍗曠粨鏋滆〃
+[SugarTable("MES_QCISSUE_RESULT_DEPARTMENT")]
+public class IqcDepartment
+{
+    //SEQ_QCISSUE_RESULT_DEPARTMENT
+    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true, OracleSequenceName = "SEQ_QCISSUE_RESULT_DEPARTMENT")]
+    public decimal Id { get; set; }
+
+    //鐢宠閮ㄩ棬鍚嶇О
+    [SugarColumn(ColumnName = "DEPARTMENTNAME")]
+    public string? DEPARTMENTNAME { get; set; }
+
+    //娴佺▼鍙�
+    [SugarColumn(ColumnName = "INSTANCEID")]
+    public string? INSTANCEID { get; set; }
+}
diff --git a/StandardInterface/MES.Service/Modes/QcIssueResult/QcIssueResults.cs b/StandardInterface/MES.Service/Modes/QcIssueResult/QcIssueResults.cs
new file mode 100644
index 0000000..482615d
--- /dev/null
+++ b/StandardInterface/MES.Service/Modes/QcIssueResult/QcIssueResults.cs
@@ -0,0 +1,70 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.Modes.QcIssueResult;
+
+//寮傚父澶勭疆鍗曠粨鏋滆〃
+[SugarTable("MES_QCISSUE_RESULT")]
+public class QcIssueResults
+{
+    //SEQ_MES_SCZZD
+    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true, OracleSequenceName = "SEQ_QCISSUE_RESULT")]
+    public decimal Id { get; set; }
+
+    //鏉ユ枡妫�楠屽崟鍙�
+    [SugarColumn(ColumnName = "RELEASE_NO")]
+    public string? ReleaseNo { get; set; }
+
+    //娴佺▼鍙�
+    [SugarColumn(ColumnName = "INSTANCEID")]
+    public string? INSTANCEID { get; set; }
+
+    //澶勭悊缁撴灉
+    [SugarColumn(ColumnName = "FREVIEW")]
+    public string? FReview { get; set; }
+
+    //寮傚父澶勭疆鍗曟槸鍚﹁鎷掔粷
+    [SugarColumn(ColumnName = "QCSTATU")]
+    public string? QcStatu { get; set; }
+
+    //鐢宠鏁伴噺
+    [SugarColumn(ColumnName = "APPLICATIONNUM")]
+    public string? APPLICATIONNUM { get; set; }
+
+    //涓嶈壇鍘熷洜
+    [SugarColumn(ColumnName = "BADCAUSES")]
+    public string? BADCAUSES { get; set; }
+
+    //鎵�灞炶溅闂�
+    [SugarColumn(ColumnName = "BELONGINGWORKSHOP")]
+    public string? BELONGINGWORKSHOP { get; set; }
+
+    //璇勫鐘舵��
+    [SugarColumn(ColumnName = "REVIEWSTATUS")]
+    public string? REVIEWSTATUS { get; set; }
+
+    //鐗╂枡鍚嶇О
+    [SugarColumn(ColumnName = "ITEMNAME")]
+    public string? ITEMNAME { get; set; }
+
+    //鐗╂枡缂栫爜
+    [SugarColumn(ColumnName = "ITEMNO")]
+    public string? ITEMNO { get; set; }
+
+    //渚涘簲鍟嗗悕绉�
+    [SugarColumn(ColumnName = "SUPPLIERNAME")]
+    public string? SUPPLIERNAME { get; set; }
+
+    //澶囨敞
+    [SugarColumn(ColumnName = "REMARK")]
+    public string? REMARK { get; set; }
+
+    //浜у搧璐ㄩ噺鐘跺喌鍙婄敵璇峰師鍥�
+    [SugarColumn(ColumnName = "APPLICATIONRESON")]
+    public string? APPLICATIONRESON { get; set; }
+
+}
diff --git a/StandardInterface/MES.Service/Modes/QcIssueResult/UpdateMesQaItems .cs b/StandardInterface/MES.Service/Modes/QcIssueResult/UpdateMesQaItems .cs
new file mode 100644
index 0000000..d9880f6
--- /dev/null
+++ b/StandardInterface/MES.Service/Modes/QcIssueResult/UpdateMesQaItems .cs
@@ -0,0 +1,36 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MES.Service.Modes.QcIssueResult;
+
+[SugarTable("MES_QA_ITEMS_DETECT_01")]
+public class UpdateMesQaItems
+{
+    [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_QM_ID",
+        IsPrimaryKey = true)]
+    public decimal Id { get; set; }
+    //閫佽揣鍗曞彿
+    [SugarColumn(ColumnName = "RELEASE_NO")]
+    public string? ReleaseNo { get; set; }
+
+    //閫佽揣鍗曞彿
+    [SugarColumn(ColumnName = "FNG_HANDLE")]
+    public string? FngHandle { get; set; }
+
+    //閫佽揣鍗曞彿
+    [SugarColumn(ColumnName = "FMRMODE")]
+    public string? FMRMODE { get; set; }
+
+    //閫佽揣鍗曞彿
+    [SugarColumn(ColumnName = "IS_SJ")]
+    public decimal? ISSJ { get; set; }
+
+    //閫佽揣鍗曞彿
+    [SugarColumn(ColumnName = "SJ_NO")]
+    public string? SJ_NO { get; set; }
+
+}
diff --git a/StandardInterface/MES.Service/resources/TopSdk.dll b/StandardInterface/MES.Service/resources/TopSdk.dll
new file mode 100644
index 0000000..43cbaea
--- /dev/null
+++ b/StandardInterface/MES.Service/resources/TopSdk.dll
Binary files differ
diff --git a/StandardInterface/MES.Service/service/BasicData/Material/MesItemsManager.cs b/StandardInterface/MES.Service/service/BasicData/Material/MesItemsManager.cs
index 83eefff..4b8dbc9 100644
--- a/StandardInterface/MES.Service/service/BasicData/Material/MesItemsManager.cs
+++ b/StandardInterface/MES.Service/service/BasicData/Material/MesItemsManager.cs
@@ -218,6 +218,10 @@
              F_DCSL     =item.F_DCSL,
             F_BZGS     =item.F_BZGS,
             WLFZMC=item.F_FZMC,
+            MJBM =item.MJBM,
+            KHWLBM =item.KHWLBM,
+            YS=item.YS,
+            Next_Gx = item.NEXT_GX,
         };
     }
 
diff --git a/StandardInterface/MES.Service/service/BasicData/RawMaterial/MesRohInManager.cs b/StandardInterface/MES.Service/service/BasicData/RawMaterial/MesRohInManager.cs
index 49bb250..8f3b66b 100644
--- a/StandardInterface/MES.Service/service/BasicData/RawMaterial/MesRohInManager.cs
+++ b/StandardInterface/MES.Service/service/BasicData/RawMaterial/MesRohInManager.cs
@@ -94,9 +94,9 @@
             .Deleteable<MesRohInData>()
             .Where(s => decimals.Contains(s.Id))
             .ExecuteCommand() > 0;
-
-        if (update && insertOrUpdate) return true;
-        throw new NotImplementedException("鏇存柊澶辫触");
+        return true;
+     /*   if (update && insertOrUpdate) return true;
+        throw new NotImplementedException("鏇存柊澶辫触");*/
     }
 
     // 鎻掑叆鎴栨洿鏂版暟鎹殑鏂规硶
diff --git a/StandardInterface/MES.Service/service/PLM/PLMManager.cs b/StandardInterface/MES.Service/service/PLM/PLMManager.cs
new file mode 100644
index 0000000..9a0bc58
--- /dev/null
+++ b/StandardInterface/MES.Service/service/PLM/PLMManager.cs
@@ -0,0 +1,189 @@
+锘縰sing Kingdee.CDP.WebApi.SDK;
+using MES.Service.Dto.webApi.PLM;
+using System.Diagnostics;
+using System.Text;
+
+namespace MES.Service.service.PLM;
+
+public class PLMManager
+{
+    public List<StdDocument> RetrieveDrawings(string ItemNo)
+    {
+        List<BaseObject> baseObjects = GetPlmCfgBase(ItemNo);
+        Debug.WriteLine($"绗竴瀹屾暣鍐呭锛圝SON锛�: {Newtonsoft.Json.JsonConvert.SerializeObject(baseObjects, Newtonsoft.Json.Formatting.Indented)}");
+
+        // 妫�鏌ヨ繑鍥炵粨鏋滄槸鍚︿负绌�
+        if (baseObjects == null || !baseObjects.Any())
+        {
+            throw new NotImplementedException("杩斿洖缁撴灉涓虹┖");
+        }
+        else
+        {
+            List<RelatedObject> relatedObjects = GetPlmCfgRelatedObject(baseObjects[0].FID);
+            Debug.WriteLine($"绗簩瀹屾暣鍐呭锛圝SON锛�: {Newtonsoft.Json.JsonConvert.SerializeObject(relatedObjects, Newtonsoft.Json.Formatting.Indented)}");
+
+            // 妫�鏌ヨ繑鍥炵粨鏋滄槸鍚︿负绌�
+            if (relatedObjects == null || !relatedObjects.Any())
+            {
+                throw new NotImplementedException("杩斿洖缁撴灉涓虹┖");
+            }
+            List<StdDocument> stdDocuments = GetPlmStdDocument(relatedObjects);
+            return stdDocuments;
+        }
+       
+    }
+
+    #region 1.閫氳繃鐗╂枡缂栫爜锛堥渶瑕佸敮涓�锛夎幏鍙栫墿鏂檌d
+    public List<BaseObject> GetPlmCfgBase(string ItemNo)
+    {
+        //娉ㄦ剰 1锛氭澶勪笉鍐嶄娇鐢ㄥ弬鏁板舰寮忎紶鍏ョ敤鎴峰悕鍙婂瘑鐮佺瓑鏁忔劅淇℃伅锛屾敼涓哄湪鐧诲綍閰嶇疆鏂囦欢涓缃��
+        //娉ㄦ剰 2锛氬繀椤诲厛閰嶇疆绗笁鏂圭郴缁熺櫥褰曟巿鏉冧俊鎭悗锛屽啀杩涜涓氬姟鎿嶄綔锛岃鎯呭弬鑰冨悇璇█鐗堟湰SDK浠嬬粛涓殑鐧诲綍閰嶇疆鏂囦欢璇存槑銆�
+        //璇诲彇閰嶇疆锛屽垵濮嬪寲SDK
+        K3CloudApi client = new K3CloudApi();
+        //鐢ㄤ簬璁板綍缁撴灉
+        StringBuilder Info = new StringBuilder();
+        //涓氬姟瀵硅薄鏍囪瘑
+        //string formId = "PLM_STD_DOCUMENT";
+        string formId = "PLM_CFG_BASE";
+        DateTime dt = DateTime.Now;
+        //鏌ヨ瀛楁闆嗗悎锛屽嵆杩斿洖鍝簺鏁版嵁锛屼笉鑳戒负绌猴紝鏍规嵁涓嶅悓涓氬姟鍗曟嵁濉啓涓嶅悓鐨勫瓧娈靛悕锛屼互涓嬩粎涓虹ず渚�
+        //string fieldKeys = "FCode,FFileId,FRelevantObject";
+        //string FilterString = "FID='-2146304'";
+        string fieldKeys = "FID,FCode,FName";
+        string FilterString = string.Format(@"FCode='{0}'", ItemNo);
+        string OrderString = "";
+        int TopRowCount = 0;
+        int StartRow = 0;
+        int Limit = 0;
+
+        var param = new QueryParam()
+        {
+            FormId = formId,
+            FieldKeys = fieldKeys,
+            FilterString = FilterString,
+            OrderString = OrderString,
+            TopRowCount = TopRowCount,
+            StartRow = StartRow,
+            Limit = Limit
+        };
+        //璋冪敤鎺ュ彛
+        var result = client.ExecuteBillQuery(param.ToJson());
+        Debug.WriteLine($"绗竴涓厓绱犲唴瀹�: {result}");
+
+        return result.Select(s =>
+        {
+            var entity = new BaseObject
+            {
+                FID = (long)s[0],
+                FCode = (string)s[1],
+                FName = (string)s[2],
+            };
+            return entity;
+        }).ToList();
+    }
+    #endregion
+
+    #region 2.閫氳繃鐗╂枡id鑾峰彇鐩稿叧瀵硅薄銆愪笅杞介渶瑕佺殑鏂囨。銆戠殑id
+    public List<RelatedObject> GetPlmCfgRelatedObject(long? FRelatedObject)
+    {
+        //娉ㄦ剰 1锛氭澶勪笉鍐嶄娇鐢ㄥ弬鏁板舰寮忎紶鍏ョ敤鎴峰悕鍙婂瘑鐮佺瓑鏁忔劅淇℃伅锛屾敼涓哄湪鐧诲綍閰嶇疆鏂囦欢涓缃��
+        //娉ㄦ剰 2锛氬繀椤诲厛閰嶇疆绗笁鏂圭郴缁熺櫥褰曟巿鏉冧俊鎭悗锛屽啀杩涜涓氬姟鎿嶄綔锛岃鎯呭弬鑰冨悇璇█鐗堟湰SDK浠嬬粛涓殑鐧诲綍閰嶇疆鏂囦欢璇存槑銆�
+        //璇诲彇閰嶇疆锛屽垵濮嬪寲SDK
+        K3CloudApi client = new K3CloudApi();
+        //鐢ㄤ簬璁板綍缁撴灉
+        StringBuilder Info = new StringBuilder();
+        //涓氬姟瀵硅薄鏍囪瘑
+        //string formId = "PLM_STD_DOCUMENT";
+        string formId = "PLM_CFG_RELATEDOBJECT";
+        DateTime dt = DateTime.Now;
+        //鏌ヨ瀛楁闆嗗悎锛屽嵆杩斿洖鍝簺鏁版嵁锛屼笉鑳戒负绌猴紝鏍规嵁涓嶅悓涓氬姟鍗曟嵁濉啓涓嶅悓鐨勫瓧娈靛悕锛屼互涓嬩粎涓虹ず渚�
+        //string fieldKeys = "FCode,FFileId,FRelevantObject";
+        //string FilterString = "FID='-2146304'";
+        string fieldKeys = "FID,FRE_FCode,FRelatedObject";
+        string FilterString = string.Format(@"FRelatedObject='{0}'", FRelatedObject);
+        string OrderString = "";
+        int TopRowCount = 0;
+        int StartRow = 0;
+        int Limit = 0;
+
+        var param = new QueryParam()
+        {
+            FormId = formId,
+            FieldKeys = fieldKeys,
+            FilterString = FilterString,
+            OrderString = OrderString,
+            TopRowCount = TopRowCount,
+            StartRow = StartRow,
+            Limit = Limit
+        };
+        //璋冪敤鎺ュ彛
+        var result = client.ExecuteBillQuery(param.ToJson());
+        Debug.WriteLine(result);
+
+        return result.Select(s =>
+        {
+            var entity = new RelatedObject
+            {
+                FID = (long)s[0],
+                FRE_FCode = (string)s[1],
+                FRelatedObject = (long)s[2],
+            };
+            return entity;
+        }).ToList();
+    }
+    #endregion
+
+    #region 3.鏍规嵁鏂囨。id鑾峰彇鏂囨。鐗╃悊鏂囦欢id
+    public List<StdDocument> GetPlmStdDocument(List<RelatedObject> relatedObjects)
+    {
+        //娉ㄦ剰 1锛氭澶勪笉鍐嶄娇鐢ㄥ弬鏁板舰寮忎紶鍏ョ敤鎴峰悕鍙婂瘑鐮佺瓑鏁忔劅淇℃伅锛屾敼涓哄湪鐧诲綍閰嶇疆鏂囦欢涓缃��
+        //娉ㄦ剰 2锛氬繀椤诲厛閰嶇疆绗笁鏂圭郴缁熺櫥褰曟巿鏉冧俊鎭悗锛屽啀杩涜涓氬姟鎿嶄綔锛岃鎯呭弬鑰冨悇璇█鐗堟湰SDK浠嬬粛涓殑鐧诲綍閰嶇疆鏂囦欢璇存槑銆�
+        //璇诲彇閰嶇疆锛屽垵濮嬪寲SDK
+        K3CloudApi client = new K3CloudApi();
+        //鐢ㄤ簬璁板綍缁撴灉
+        StringBuilder Info = new StringBuilder();
+        //涓氬姟瀵硅薄鏍囪瘑
+        string formId = "PLM_STD_DOCUMENT";
+        DateTime dt = DateTime.Now;
+        //鏌ヨ瀛楁闆嗗悎锛屽嵆杩斿洖鍝簺鏁版嵁锛屼笉鑳戒负绌猴紝鏍规嵁涓嶅悓涓氬姟鍗曟嵁濉啓涓嶅悓鐨勫瓧娈靛悕锛屼互涓嬩粎涓虹ず渚�
+        string fieldKeys = "FID,FCode,FName,FPhysicalFileName,FFileId,FRelevantObject";
+        // 鎻愬彇 FID 鍊�
+        var fidList = relatedObjects.Select(obj => obj.FID.ToString()).ToList();
+        // 灏� FID 鍊肩敤閫楀彿鍒嗛殧锛屽苟鍖呰9鍦ㄥ崟寮曞彿涓�
+        string fids = string.Join(",", fidList.Select(fid => $"'{fid}'"));
+        // 鏋勫缓 FilterString
+        string FilterString = $"FID in ({fids})";
+        string OrderString = "";
+        int TopRowCount = 0;
+        int StartRow = 0;
+        int Limit = 0;
+
+        var param = new QueryParam()
+        {
+            FormId = formId,
+            FieldKeys = fieldKeys,
+            FilterString = FilterString,
+            OrderString = OrderString,
+            TopRowCount = TopRowCount,
+            StartRow = StartRow,
+            Limit = Limit
+        };
+        //璋冪敤鎺ュ彛
+        var result = client.ExecuteBillQuery(param.ToJson());
+
+        return result.Select(s =>
+        {
+            var entity = new StdDocument
+            {
+                FID = (long)s[0],
+                FCode = (string)s[1],
+                FName = (string)s[2],
+                FPhysicalFileName = (string)s[3],
+                FFileId = (string)s[4],
+                FRelevantObject = (string)s[5],
+            };
+            return entity;
+        }).ToList();
+    }
+    #endregion
+}
diff --git a/StandardInterface/MES.Service/service/PLM/WarehouseDownloadDoc.cs b/StandardInterface/MES.Service/service/PLM/WarehouseDownloadDoc.cs
new file mode 100644
index 0000000..5527dae
--- /dev/null
+++ b/StandardInterface/MES.Service/service/PLM/WarehouseDownloadDoc.cs
@@ -0,0 +1,145 @@
+锘縰sing Newtonsoft.Json.Linq;
+using System.Net;
+using System.Text;
+
+namespace ConsoleApp1
+{
+    #region 1.鏍规嵁鏂囨。鐗╃悊鏂囦欢id鑾峰彇鏂囨。娴佹暟鎹�
+    public class WarehouseDownloadDoc()
+    {
+        private string _cloudUrl = "http://47.96.178.105/k3cloud";
+        private string _warehouse = "http://183.129.128.254:8081/CloudPLMWarehouse";
+
+        #region 鏂囨。鏈嶅姟鍣ㄤ笂涓嬫枃
+        private string WarehouseCTX
+        {
+            get
+            {
+                string json = "{\"ap1\":{ \"AcctID\":\"" + "68044981e73323" + "\",\"Username\":\"骞挎繁\",\"Password\":\"gs@123456\",\"Lcid\":2052,\"AuthenticateType\":1,\"PasswordIsEncrypted\":\"false\",\"ClientInfo\":{\"ClientType\":8}}";
+                var resp = GetResponse("http://47.96.178.105/k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.User.UserService.ValidateLoginInfo.common.kdsvc", json, new Dictionary<string, string>());
+                string ret = (new StreamReader(resp.GetResponseStream(), Encoding.UTF8)).ReadToEnd();
+                var result = JObject.Parse(ret)["Context"];
+                string token = result["UserToken"].ToString();
+                var warehouseCtx = string.Format("LoginUrl={0}&KDServiceSessionId={1}", _cloudUrl, JObject.Parse(ret)["KDSVCSessionId"].ToString());//瀹夊叏鏂版柟寮�
+                return Convert.ToBase64String(Encoding.UTF8.GetBytes(warehouseCtx));
+            }
+        }
+        #endregion
+
+        #region 鐗╃悊鏂囦欢id
+        private string GetFileId(string fileId)
+        {
+            return Convert.ToBase64String(Encoding.UTF8.GetBytes(fileId));
+        }
+        #endregion
+
+        #region 鐢靛瓙浠撹闂嚟璇�
+        private string Token
+        {
+            get
+            {
+                var token = Guid.NewGuid().ToString();
+                return token;
+            }
+        }
+        #endregion
+
+        #region 鍙戦�佽姹�
+        public Stream SendRequest(string op, string fileId)
+        {
+            var header = new Dictionary<string, string>()
+            {
+                {"FileID" ,GetFileId(fileId) },
+                { "CTX",WarehouseCTX},
+                { "token", Token },
+                { "PLM_ACCESS_TYPE","pure" }
+            };
+            return PostDataViaHttpWebRequest(RequestUrl(op), string.Empty, header, !op.Equals("Download"));
+        }
+        #endregion
+
+        #region 璇锋眰鐨刄RL
+        private string RequestUrl(string op)
+        {
+            return _warehouse + "/" + op;
+        }
+        #endregion
+
+        #region 鑾峰彇鍝嶅簲
+        private HttpWebResponse GetResponse(string url, string bodyJson, Dictionary<string, string> header)
+        {
+            byte[] data = Encoding.UTF8.GetBytes(bodyJson);
+
+            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
+            request.Method = WebRequestMethods.Http.Post;
+            request.ContentType = "application/json";
+            request.ContentLength = data.Length;
+            if (header != null)
+            {
+                foreach (var p in header)
+                {
+                    request.Headers.Add(p.Key, p.Value);
+                }
+            }
+
+            using (Stream reqStream = request.GetRequestStream())
+            {
+                reqStream.Write(data, 0, data.Length);
+                reqStream.Close();
+            }
+
+            HttpWebResponse resp = null;
+            try
+            {
+                resp = (HttpWebResponse)request.GetResponse();
+            }
+            catch (WebException ex)
+            {
+                var res = ex.Response;
+                if (res != null)
+                {
+                    string statusBase64 = ((HttpWebResponse)ex.Response).StatusDescription;//base64缂栫爜鍚庣殑鎶ラ敊淇℃伅
+                }
+            }
+            return resp;
+        }
+        #endregion
+
+        #region 淇濆瓨鏂囦欢鍒版湰鍦�
+        /*private void PostDataViaHttpWebRequest(string url, string bodyJson, Dictionary<string, string> header, bool isGetContent)
+        {
+
+            var resp = GetResponse(url, bodyJson, header);
+            var resultJson = string.Empty;
+            Stream stream = File.Open("D://DownloadDocDemo.pdf", FileMode.OpenOrCreate);
+            int packageSize = 1024 * 1024;
+            byte[] buffer = new byte[packageSize];
+            using (stream)
+            {
+                using (Stream outputStream = resp.GetResponseStream())
+                {
+                    int readLength = 0;
+                    while ((readLength = outputStream.Read(buffer, 0, packageSize)) > 0)
+                    {
+                        stream.Write(buffer, 0, readLength);
+                        stream.Flush();
+                    }
+                    outputStream.Close();
+                }
+                stream.Close();
+            }
+        }*/
+        #endregion
+
+        #region 杩斿洖鏂囦欢娴佺粰鍓嶇
+        private Stream PostDataViaHttpWebRequest(string url, string bodyJson, Dictionary<string, string> header, bool isGetContent)
+        {
+
+            var resp = GetResponse(url, bodyJson, header);
+
+            return resp.GetResponseStream(); // 鐩存帴杩斿洖鍝嶅簲娴�
+        }
+        #endregion
+    }
+    #endregion
+}
diff --git a/StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs b/StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs
new file mode 100644
index 0000000..beec420
--- /dev/null
+++ b/StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs
@@ -0,0 +1,764 @@
+锘縰sing System;
+using System.Collections.Generic;
+using AlibabaCloud.OpenApiClient.Models;
+using AlibabaCloud.SDK.Dingtalkworkflow_1_0;
+using AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models;
+using AlibabaCloud.SDK.Dingtalkoauth2_1_0;
+using AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models;
+using AlibabaCloud.TeaUtil.Models;
+using Tea;
+using System.Diagnostics;
+using MES.Service.Dto.webApi;
+using MES.Service.Modes;
+using SqlSugar;
+using MES.Service.DB;
+using MES.Service.Modes.QcIssueResult;
+using MES.Service.Dto.webApi.QcIssueResult;
+//using MES.Service.Dto.webApi.DeliveryNote;
+//using MES.Service.Modes.DeliveryNote;
+using Newtonsoft.Json;
+using Oracle.ManagedDataAccess.Client;
+using System.Data;
+using System.Reflection;
+using System.Text;
+using DingTalk.Api;
+using System.Net.Http;
+
+namespace MES.Service.service.QcIssueResult;
+
+//寮傚父澶勭疆鍗曠粨鏋滆〃
+[SugarTable("MES_QA_ITEMS_DETECT_01")]
+public class QcIssueResultManager : Repository<QcIssueResults>
+{
+    /**
+     * 浣跨敤 Token 鍒濆鍖栬处鍙稢lient
+     * @return Client
+     * @throws Exception
+     */
+    public static AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client CreateClient()
+    {
+        AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
+        config.Protocol = "https";
+        config.RegionId = "central";
+        return new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client(config);
+    }
+
+    public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient1()
+    {
+        AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
+        config.Protocol = "https";
+        config.RegionId = "central";
+        return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config);
+    }
+
+    /**
+     * 鑾峰彇閽夐拤鐨� Access Token
+     * @return string 杩斿洖鑾峰彇鍒扮殑 Access Token
+     */
+    public string GetToken()
+    {
+        AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient1();
+        AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest
+        {
+            AppKey = "ding8nmegrbi29a78ze0",
+            AppSecret = "CwWeKXzItBJktsVhGoZi73Ts79bP8qp3FuLmS5PtJgNmMxrWFaqdQQTY0RqCRQSC",
+        };
+
+        try
+        {
+            var response = client.GetAccessToken(getAccessTokenRequest);
+            return response.Body.AccessToken; // 杩斿洖鑾峰彇鍒扮殑 Access Token
+        }
+        catch (TeaException err)
+        {
+            Console.WriteLine($"TeaException: Code={err.Code}, Message={err.Message}");
+            return null;
+        }
+        catch (Exception _err)
+        {
+            Console.WriteLine($"Exception: {_err.Message}");
+            return null;
+        }
+    }
+
+    /**
+     * 鏌ョ湅鏈夋棤鑷�夊鎵硅妭鐐�
+     * @return string 杩斿洖鍚姩缁撴灉
+     */
+    public string GetForecast()
+    {
+        // 鑾峰彇 Access Token
+        string accessToken = GetToken();
+        if (string.IsNullOrEmpty(accessToken))
+        {
+            return "鑾峰彇 Access Token 澶辫触";
+        }
+        AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();
+        AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastHeaders processForecastHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastHeaders();
+        processForecastHeaders.XAcsDingtalkAccessToken = accessToken;
+        AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest.ProcessForecastRequestFormComponentValues formComponentValues0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest.ProcessForecastRequestFormComponentValues
+        {
+            Name = "PhoneField",
+            Value = "123xxxxxxxx",
+        };
+        AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest processForecastRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest
+        {
+            ProcessCode = "PROC-4F4B3976-BA15-47EF-9A3C-3A07AC07DFEA",
+            DeptId = 1,
+            UserId = "923188102",
+            FormComponentValues = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest.ProcessForecastRequestFormComponentValues>
+            {
+                formComponentValues0
+            },
+        };
+        try
+        {
+            var response = client.ProcessForecastWithOptions(processForecastRequest, processForecastHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
+            return $"閽夐拤宸ヤ綔娴佸疄渚嬪惎鍔ㄦ垚鍔�: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Body)}";
+        }
+        catch (TeaException err)
+        {
+
+            return $"TeaException: Code={err.Code}, Message={err.Message}";
+
+        }
+        catch (Exception _err)
+        {
+            return $"Exception: {_err.Message}";
+        }
+    }
+
+    /**
+    * 鑾峰彇userid
+    * @return string 杩斿洖鍚姩缁撴灉
+    */
+    public HttpClient _httpClient;
+    public string DingTalkService()
+    {
+        _httpClient = new HttpClient();
+        _httpClient.Timeout = TimeSpan.FromSeconds(30);
+        return "1";
+    }
+
+    public async Task<string> GetUserId(string phone)
+    {
+        // 鍙傛暟楠岃瘉
+        if (string.IsNullOrWhiteSpace(phone))
+            throw new ArgumentException("鎵嬫満鍙蜂笉鑳戒负绌�", nameof(phone));
+
+        // 鑾峰彇璁块棶浠ょ墝
+        string accessToken = GetToken();
+
+        // 璋冪敤鐜版湁鏂规硶
+        return await GetUserIdByMobile(accessToken, phone);
+    }
+
+
+
+    public async Task<string> GetUserIdByMobile(string accessToken, string mobile)
+    {
+        // 鍙傛暟楠岃瘉
+        if (string.IsNullOrWhiteSpace(accessToken))
+            throw new ArgumentException("Access token cannot be empty", nameof(accessToken));
+
+        if (string.IsNullOrWhiteSpace(mobile) || !IsValidMobile(mobile))
+            throw new ArgumentException("Invalid mobile number", nameof(mobile));
+
+        try
+        {
+            // 鏋勯�犺姹俇RL
+            var url = $"https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token={accessToken}";
+
+            string m = DingTalkService();
+
+            // 鏋勯�犺姹備綋
+            var requestBody = new { mobile };
+            var jsonContent = JsonConvert.SerializeObject(requestBody);
+            var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
+
+            // 鍙戦�佽姹�
+            var response = await _httpClient.PostAsync(url, content);
+
+            // 澶勭悊鍝嶅簲
+            response.EnsureSuccessStatusCode();
+
+            var responseBody = await response.Content.ReadAsStringAsync();
+            var result = JsonConvert.DeserializeObject<DingTalkResponse>(responseBody);
+
+            // 澶勭悊涓氬姟閫昏緫閿欒
+            if (result?.Errcode != 0)
+                throw new DingTalkApiException(result?.Errcode ?? -1, result?.Errmsg ?? "Unknown error");
+
+            return result?.Result?.UserId ?? throw new InvalidOperationException("User ID not found in response");
+        }
+        catch (HttpRequestException ex)
+        {
+            throw new DingTalkApiException(500, $"HTTP request failed: {ex.Message}", ex);
+        }
+        catch (JsonException ex)
+        {
+            throw new DingTalkApiException(500, $"JSON parsing failed: {ex.Message}", ex);
+        }
+    }
+
+    private bool IsValidMobile(string mobile)
+    {
+        // 绠�鍗曠殑鎵嬫満鍙锋牸寮忛獙璇�
+        return !string.IsNullOrEmpty(mobile) && mobile.Length == 11 && mobile.StartsWith("1");
+    }
+
+
+    /**
+     * 鍚姩閽夐拤宸ヤ綔娴佸疄渚�
+     * @return string 杩斿洖鍚姩缁撴灉
+     */
+
+    public string GetProcessNo(GetQcIssueResultDetail getQcIssueResultDetail)
+    {
+        var db = SqlSugarHelper.GetInstance();
+
+        var stafflist = db.Queryable<DingNameCode>()
+            .Where(t => t.STAFF_NO == getQcIssueResultDetail.StaffNo)
+            .Select(t => new DingNameCode
+            {
+                STAFF_NAME = t.STAFF_NAME,
+                PHONE_NUMBER = t.PHONE_NUMBER
+            })
+            .ToList();
+
+        if (stafflist.Any())
+        {
+            Task<string> task = GetUserId(stafflist[0].PHONE_NUMBER);
+            string UserId = task.Result;
+            string applicationUser = $"[\"{UserId}\"]";
+
+            // 浣跨敤 JSON 搴忓垪鍖栬緭鍑哄璞$殑璇︾粏鍐呭
+            string getQcIssueResultDetailJson = JsonConvert.SerializeObject(getQcIssueResultDetail, Formatting.Indented);
+            Debug.WriteLine("GetQcIssueResultDetail: " + getQcIssueResultDetailJson);
+
+            // 鑾峰彇 Access Token
+            string accessToken = GetToken();
+            if (string.IsNullOrEmpty(accessToken))
+            {
+                return "鑾峰彇 Access Token 澶辫触";
+            }
+
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient();
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders startProcessInstanceHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders();
+            Debug.WriteLine(accessToken);
+            startProcessInstanceHeaders.XAcsDingtalkAccessToken = accessToken; // 浣跨敤鑾峰彇鍒扮殑 Access Token  
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues1 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "TextField_K5AVR59BD28",
+                Value = getQcIssueResultDetail.ItemNo,
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues2 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "TextField_1LW382XRH1DS0",
+                Value = getQcIssueResultDetail.ItemName,
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues3 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "NumberField_UKE91Z101BK0",
+                Value = getQcIssueResultDetail.FbatchQty,
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues4 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "TextField_1QM2NWE9T3Y80",
+                Value = getQcIssueResultDetail.SuppName,
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues5 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "TextField_1DAQ9890FDWG0",
+                Value = getQcIssueResultDetail.AppicationReason,
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues6 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "DDSelectField_76Z6HC5W1F0",
+                Value = getQcIssueResultDetail.BadReason,
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues7 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "TextField_3B85TFIK9Z60",
+                Value = getQcIssueResultDetail.remark,
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues8 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "InnerContactField_WVZLUIPZ9J40",
+                Value = applicationUser,
+
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues9 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "DDSelectField_1AL6MWUUUOHS0",
+                Value = getQcIssueResultDetail.IqcStatus,
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues10 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "DepartmentField_10ZVNJNJCRJK0",
+                Value = getQcIssueResultDetail.Department,
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues11 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "DDSelectField_HG2SQUPO2NK0",
+                Value = getQcIssueResultDetail.WorkShop,
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues12 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "DDPhotoField_QD15KYR764G0",
+                Value = "娴嬭瘯涓嶈壇鍥剧墖",
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues13 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "DDAttachment_GLZLFSIWK9S0",
+                Value = "闄勪欢",
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues14 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "DDSelectField_1RN2L4RWQ0AO0",
+                Value = "鍚�",
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues15 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "InnerContactField_WNG7AU9R2AO0",
+                Value = "鍔犵",
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues16 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues
+            {
+                Name = "DDAttachment_23VB5MMC1R1C0",
+                Value = "闄勪欢",
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners targetSelectActioners0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners
+            {
+                ActionerKey = "null",
+                ActionerUserIds = new List<string>
+                {
+                   UserId
+                },
+            };
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers approvers0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers
+            {
+                ActionType = "OR",
+                UserIds = new List<string>
+                {
+                    UserId
+                },
+            };
+
+
+            AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest startProcessInstanceRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest
+            {
+                OriginatorUserId = UserId,
+                ProcessCode = "PROC-4F4B3976-BA15-47EF-9A3C-3A07AC07DFEA",
+                DeptId = 1,
+                FormComponentValues = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues>
+                {
+                     formComponentValues1,formComponentValues2,formComponentValues3, formComponentValues4, formComponentValues5, formComponentValues6, formComponentValues7, formComponentValues8,
+                     formComponentValues9, formComponentValues11
+                },
+                TargetSelectActioners = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners>
+                {
+                    targetSelectActioners0
+                },
+                Approvers = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers>
+                {
+                    approvers0
+                },
+                CcList = new List<string>
+                {
+                   UserId
+                },
+                CcPosition = "START",
+
+            };
+            // 搴忓垪鍖� FormComponentValues 鍒楄〃涓� JSON 鏍煎紡
+            string formComponentValuesJson = JsonConvert.SerializeObject(startProcessInstanceRequest.FormComponentValues, Formatting.Indented);
+            Debug.WriteLine("FormComponentValues: " + formComponentValuesJson);
+            try
+            {
+                string requestContent = Newtonsoft.Json.JsonConvert.SerializeObject(startProcessInstanceRequest);
+                Debug.WriteLine("startProcessInstanceRequest鍐呭锛�");
+                Debug.WriteLine(requestContent);
+                var response = client.StartProcessInstanceWithOptions(startProcessInstanceRequest, startProcessInstanceHeaders, new RuntimeOptions());
+                return $"閽夐拤宸ヤ綔娴佸疄渚嬪惎鍔ㄦ垚鍔�: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Body)}";
+            }
+            catch (TeaException err)
+            {
+                string requestContent = Newtonsoft.Json.JsonConvert.SerializeObject(startProcessInstanceRequest);
+                Debug.WriteLine("startProcessInstanceRequest鍐呭锛�");
+                Debug.WriteLine(startProcessInstanceRequest);
+                return $"TeaException: Code={err.Code}, Message={err.Message}";
+            }
+            catch (Exception _err)
+            {
+                return $"Exception: {_err.Message}";
+            }
+        }
+        else
+        {
+            return "鏌ヤ笉鍒版偍鐨勬墜鏈哄彿";
+        }
+    }
+
+
+    /**
+     * 灏嗗甫鏈夋祦绋嬪彿鍜屾楠屽崟鍙风殑鏂拌褰曟彃鍏ヨ〃涓�
+     */
+    public dynamic SaveProcessNo(string ReleaseNo, string ProcessNo, string StaffNo, string Department)
+    {
+        var QcIssueResults = GetQcIssueResults(ReleaseNo, ProcessNo);
+
+        var ApplicantResults = GetApplicantResults(ProcessNo, StaffNo);
+
+        var DepartmentResults = GetDepartmentResults(ProcessNo, Department);
+
+        var db = SqlSugarHelper.GetInstance();
+
+        db.Insertable(ApplicantResults).ExecuteCommand(); // 鎻掑叆鐢宠浜烘暟鎹�
+        db.Insertable(DepartmentResults).ExecuteCommand(); // 鎻掑叆閮ㄩ棬鏁版嵁
+
+        return UseTransaction(db =>
+        {
+            try
+            {
+
+
+                // 缁熶竴浣跨敤浜嬪姟db
+                //SaveOrUpdateApplicantData(db, ApplicantResults);
+                //SaveOrUpdateDepartmentData(db, DepartmentResults);
+                SaveOrUpdateData(db, QcIssueResults);
+
+                return 1;
+            }
+            catch
+            {
+                db.RollbackTran();
+                throw;
+            }
+        });
+    }
+
+    public QcIssueResults GetQcIssueResults(string ReleaseNo, string ProcessNo)
+    {
+        var QcIssueResults = new QcIssueResults
+        {
+            INSTANCEID = ProcessNo,
+            ReleaseNo = ReleaseNo,
+            QcStatu = ""
+        };
+
+        return QcIssueResults;
+    }
+
+    public IqcApplicant GetApplicantResults(string ProcessNo, string StaffNo)
+    {
+        var db = SqlSugarHelper.GetInstance();
+
+        var stafflist = db.Queryable<DingNameCode>()
+           .Where(t => t.STAFF_NO == StaffNo)
+           .Select(t => new DingNameCode
+           {
+               STAFF_NAME = t.STAFF_NAME,
+               PHONE_NUMBER = t.PHONE_NUMBER
+           })
+           .ToList();
+
+        var ApplicantResults = new IqcApplicant
+        {
+            INSTANCEID = ProcessNo,
+            APPLICANTID = StaffNo,
+            APPLICANTNAME = stafflist[0].STAFF_NAME
+        };
+
+        return ApplicantResults;
+    }
+
+    public IqcDepartment GetDepartmentResults(string ProcessNo, string Department)
+    {
+
+        var DepartmentResults = new IqcDepartment
+        {
+            INSTANCEID = ProcessNo,
+            DEPARTMENTNAME = Department
+        };
+
+        return DepartmentResults;
+    }
+
+    /**
+    * 鏍规嵁娴佺▼鍙锋洿鏂拌〃鐨勮褰�
+    */
+    public dynamic Save(ErpQcIssueResult erpQcIssueResult)
+    {
+        //var json = JsonConvert.SerializeObject(erpQcIssueResult);
+
+        ////var saveSuccess = UseTransaction(db =>
+        ////{
+        ////    var data = GetMesQcIssueResults(erpQcIssueResult);
+        ////    return SaveOrUpdateData(db, data);
+        ////});
+
+        //return new
+        //{
+        //    SerializedPayload = json,
+        //    ServerTime = DateTime.UtcNow.ToString("O")
+        //};
+
+        var mesQcIssueResults = GetMesQcIssueResults(erpQcIssueResult);
+
+        return UseTransaction(db =>
+        {
+            return SaveOrUpdateData(db, mesQcIssueResults) ? 1 : 0;
+        }) > 0;
+
+    }
+
+    public QcIssueResults GetMesQcIssueResults(ErpQcIssueResult erpQcIssueResult)
+    {
+        var mesQcIssueResults = new QcIssueResults
+        {
+            INSTANCEID = erpQcIssueResult.ProcessNo,
+            FReview = erpQcIssueResult.FReview,
+            APPLICATIONNUM = erpQcIssueResult.ApplicationQuantity.ToString(),
+            BADCAUSES = erpQcIssueResult.BadCauses,
+            BELONGINGWORKSHOP = erpQcIssueResult.AffiliatedWorkshop,
+            REVIEWSTATUS = erpQcIssueResult.FReview,
+            QcStatu = erpQcIssueResult.QcStatus,
+            ITEMNAME = erpQcIssueResult.ItemName,
+            ITEMNO = erpQcIssueResult.ItemNo,
+            SUPPLIERNAME = erpQcIssueResult.SupplierName,
+            REMARK = erpQcIssueResult.Remark,
+            APPLICATIONRESON=erpQcIssueResult.Reason
+        };
+
+        return mesQcIssueResults;
+    }
+
+    /**
+    * 鎻掑叆鍜屾洿鏂版暟鎹簱琛�
+    */
+    private bool SaveOrUpdateData(SqlSugarScope db, QcIssueResults qcIssueResults)
+    {
+
+        // 鏌ヨ QcIssueResults 琛ㄤ腑鏄惁瀛樺湪鍖归厤鐨勮褰�
+        var mapping = db.Queryable<QcIssueResults>()
+            .Where(t => t.INSTANCEID == qcIssueResults.INSTANCEID)
+            .Select(t => new QcIssueResults
+            {
+                ReleaseNo = t.ReleaseNo,
+            })
+            .ToList();
+
+        if (mapping.Any())
+        {
+            if (qcIssueResults.QcStatu == "鎷掔粷")
+            {
+                string ReleaseNo = mapping.FirstOrDefault().ReleaseNo;
+
+                // 鍙洿鏂� ReleaseNo 鍜� FReview 涓や釜瀛楁
+                var updateResult = db.Updateable<QcIssueResults>()
+                    .SetColumns(t => new QcIssueResults
+                    {
+                        ReleaseNo = ReleaseNo,
+                        INSTANCEID = qcIssueResults.INSTANCEID,
+                        FReview = qcIssueResults.FReview,
+                        APPLICATIONNUM = qcIssueResults.APPLICATIONNUM,
+                        BADCAUSES = qcIssueResults.BADCAUSES,
+                        BELONGINGWORKSHOP = qcIssueResults.BELONGINGWORKSHOP,
+                        REVIEWSTATUS = qcIssueResults.REVIEWSTATUS,
+                        QcStatu = qcIssueResults.QcStatu,
+                        ITEMNAME = qcIssueResults.ITEMNAME,
+                        ITEMNO = qcIssueResults.ITEMNO,
+                        SUPPLIERNAME = qcIssueResults.SUPPLIERNAME,
+                        REMARK = qcIssueResults.REMARK,
+                        APPLICATIONRESON=qcIssueResults.APPLICATIONRESON
+
+                    })
+                    .Where(t => t.INSTANCEID == qcIssueResults.INSTANCEID) // 鏄惧紡鎸囧畾鏇存柊鏉′欢
+                    .ExecuteCommand();
+
+                // 鏌ヨ UpdateMesQaItems 琛ㄤ腑鏄惁瀛樺湪鍖归厤鐨勮褰�
+                var existingRecord = db.Queryable<UpdateMesQaItems>()
+                    .Where(it => it.ReleaseNo == ReleaseNo)
+                    .First(); // 浣跨敤 First 鑾峰彇绗竴鏉¤褰�
+
+                Debug.WriteLine($"鏌ヨ鍒扮殑 mapping: {JsonConvert.SerializeObject(existingRecord)}");
+
+                if (existingRecord != null)
+                {
+                    try
+                    {
+                        //瀹氫箟杈撳叆鍙傛暟
+                        var inputParam1 = new SugarParameter("pi_no", existingRecord.ReleaseNo);
+                        var inputParam2 = new SugarParameter("pi_user", "PL017");
+                        // 瀹氫箟杈撳嚭鍙傛暟
+                        var outParam1 = new SugarParameter("po_result", null, true);
+                        var outParam2 = new SugarParameter("po_msg", null, true);
+                        // 浣跨敤 SqlSugar 鎵ц瀛樺偍杩囩▼
+                        Db.Ado.ExecuteCommand("BEGIN PRC_MES_IQC_CG_REVOCK(:pi_no,:pi_user,:po_result,:po_msg ); END;", inputParam1, inputParam2, outParam1, outParam2);
+                        // 鑾峰彇杈撳嚭鍙傛暟鐨勫��
+                        int result = int.Parse((string)outParam1.Value);
+                        string message = outParam2.Value == DBNull.Value ? string.Empty : (string)outParam2.Value;
+                        if (result == 1)
+                        {
+                            //瀛樺偍杩囩▼澶辫触鍒欎簨鍔¤繘琛屽洖婊�
+                            db.Ado.RollbackTran();
+                            throw new Exception(message);
+                        }
+                        // 鎻愪氦浜嬪姟
+                        db.Ado.CommitTran();
+                        return true;
+                    }
+                    catch (Exception ex)
+                    {
+                        Console.WriteLine("Exception: " + ex.Message);
+                        return false;
+                    }
+                }
+                else
+                {
+                    throw new Exception("鏈壘鍒伴渶瑕佹洿鏂扮殑璁板綍");
+                }
+            }
+            else
+            {
+                string ReleaseNo = mapping.FirstOrDefault().ReleaseNo;
+
+                // 鍙洿鏂� ReleaseNo 鍜� FReview 涓や釜瀛楁
+                var updateResult = db.Updateable<QcIssueResults>()
+                    .SetColumns(t => new QcIssueResults
+                    {
+                        ReleaseNo = ReleaseNo,
+                        INSTANCEID = qcIssueResults.INSTANCEID,
+                        FReview = qcIssueResults.FReview,
+                        APPLICATIONNUM = qcIssueResults.APPLICATIONNUM,
+                        BADCAUSES = qcIssueResults.BADCAUSES,
+                        BELONGINGWORKSHOP = qcIssueResults.BELONGINGWORKSHOP,
+                        REVIEWSTATUS = qcIssueResults.REVIEWSTATUS,
+                        QcStatu = qcIssueResults.QcStatu,
+                        ITEMNAME = qcIssueResults.ITEMNAME,
+                        ITEMNO = qcIssueResults.ITEMNO,
+                        SUPPLIERNAME = qcIssueResults.SUPPLIERNAME,
+                        REMARK = qcIssueResults.REMARK,
+                        APPLICATIONRESON = qcIssueResults.APPLICATIONRESON
+
+
+                    })
+                    .Where(t => t.INSTANCEID == qcIssueResults.INSTANCEID) // 鏄惧紡鎸囧畾鏇存柊鏉′欢
+                    .ExecuteCommand();
+
+                // 鏌ヨ UpdateMesQaItems 琛ㄤ腑鏄惁瀛樺湪鍖归厤鐨勮褰�
+                var existingRecord = db.Queryable<UpdateMesQaItems>()
+                    .Where(it => it.ReleaseNo == ReleaseNo)
+                    .First(); // 浣跨敤 First 鑾峰彇绗竴鏉¤褰�
+
+                Debug.WriteLine($"鏌ヨ鍒扮殑 mapping: {JsonConvert.SerializeObject(existingRecord)}");
+
+                if (existingRecord != null)
+                {
+                    // 鏇存柊 UpdateMesQaItems 琛ㄤ腑鐨勫瓧娈�
+                    existingRecord.FngHandle = qcIssueResults.REVIEWSTATUS;
+                    if (existingRecord.FngHandle == "閫�璐�")
+                    {
+                        existingRecord.FMRMODE = "閫�鏂欒ˉ鏂�";
+                    }
+                    else
+                    {
+                        existingRecord.FMRMODE = null;
+                    }
+
+                    // 鎵ц鏇存柊鎿嶄綔
+                    updateResult = db.Updateable(existingRecord).ExecuteCommand();
+
+                    if (updateResult > 0)
+                    {
+                        try
+                        {
+
+                            //瀹氫箟杈撳叆鍙傛暟
+                            var inputParam1 = new SugarParameter("PI_BILLNO", ReleaseNo);
+                            var inputParam2 = new SugarParameter("PI_USER", "PL017");
+                            var inputParam3 = new SugarParameter("PI_HANDLE", existingRecord.FngHandle);
+                            var inputParam4 = new SugarParameter("PI_TLFS", existingRecord.FMRMODE);
+                            var inputParam5 = new SugarParameter("PI_REMARK", "");
+
+                            // 瀹氫箟杈撳嚭鍙傛暟
+                            var outParam1 = new SugarParameter("PO_RESULT", null, true);
+                            var outParam2 = new SugarParameter("PO_MSG", null, true);
+                            // 浣跨敤 SqlSugar 鎵ц瀛樺偍杩囩▼
+                            Db.Ado.ExecuteCommand("BEGIN PRC_MES_IQC_CG_SUBMIT(:PI_BILLNO,:PI_BILLNO,:PI_HANDLE,:PI_TLFS,:PI_REMARK,:PO_RESULT,:PO_MSG); END;", inputParam1, inputParam2, inputParam3, inputParam4, inputParam5, outParam1, outParam2);
+                            // 鑾峰彇杈撳嚭鍙傛暟鐨勫��
+                            int result = int.Parse((string)outParam1.Value);
+                            string message = outParam2.Value == DBNull.Value ? string.Empty : (string)outParam2.Value;
+                            if (result == 1)
+                            {
+                                //瀛樺偍杩囩▼澶辫触鍒欎簨鍔¤繘琛屽洖婊�
+                                db.Ado.RollbackTran();
+                                throw new Exception(message);
+                            }
+                            // 鎻愪氦浜嬪姟
+                            db.Ado.CommitTran();
+                            return true;
+
+                        }
+                        catch (Exception ex)
+                        {
+                            Console.WriteLine("Exception: " + ex.Message);
+                            return false;
+                        }
+                    }
+
+                    return updateResult > 0; // 濡傛灉鏇存柊鎴愬姛锛岃繑鍥� true
+                }
+                else
+                {
+                    throw new Exception("鏈壘鍒伴渶瑕佹洿鏂扮殑璁板綍");
+                }
+            }
+        }
+        else
+        {
+            // 濡傛灉 mapping 涓虹┖锛屾彃鍏ユ柊璁板綍鍒� QcIssueResults 琛�
+            var orUpdate = base.Insert(qcIssueResults);
+            if (orUpdate) return true;
+            throw new NotImplementedException("鎻掑叆鎴栨洿鏂板け璐�");
+        }
+
+    }
+}
+
+// 鍝嶅簲妯″瀷
+public class DingTalkResponse
+{
+    [JsonProperty("errcode")]
+    public int Errcode { get; set; }
+
+    [JsonProperty("errmsg")]
+    public string Errmsg { get; set; }
+
+    [JsonProperty("result")]
+    public UserResult Result { get; set; }
+}
+
+public class UserResult
+{
+    [JsonProperty("userid")]
+    public string UserId { get; set; }
+}
+
+// 鑷畾涔夊紓甯�
+public class DingTalkApiException : Exception
+{
+    public int ErrorCode { get; }
+
+    public DingTalkApiException(int errorCode, string message) : base(message)
+    {
+        ErrorCode = errorCode;
+    }
+
+    public DingTalkApiException(int errorCode, string message, Exception innerException)
+        : base(message, innerException)
+    {
+        ErrorCode = errorCode;
+    }
+}
\ No newline at end of file
diff --git a/StandardInterface/MESApplication/Config/appsettings.json b/StandardInterface/MESApplication/Config/appsettings.json
index cf432d9..3f6e8e8 100644
--- a/StandardInterface/MESApplication/Config/appsettings.json
+++ b/StandardInterface/MESApplication/Config/appsettings.json
@@ -8,10 +8,10 @@
   },
   "AllowedHosts": "*",
   "Version": "1.0.0",
-  "X-KDApi-AcctID": "61ce591aee4c5a",
-  "X-KDApi-UserName": "mes",
-  "X-KDApi-AppID": "310228_4f7q68lG0OG9w9XL5e3q0bXqzgQV4toK",
-  "X-KDApi-AppSec": "db05ae60d70e4bd0a8bdb974f8030f6f",
+  "X-KDApi-AcctID": "68044981e73323",
+  "X-KDApi-UserName": "骞挎繁",
+  "X-KDApi-AppID": "310990_x3cJ16Do6vC539TFW+6pRy1E6MQ+xooO",
+  "X-KDApi-AppSec": "817a815631c24517b931ecebe8f8eae1",
   "X-KDApi-LCID": "2052",
-  "X-KDApi-ServerUrl": "http://121.36.245.199/K3cloud/"
+  "X-KDApi-ServerUrl": "http://47.96.178.105/k3cloud"
 }
\ No newline at end of file
diff --git a/StandardInterface/MESApplication/Controllers/Base/LoginController.cs b/StandardInterface/MESApplication/Controllers/Base/LoginController.cs
index aede14c..0861d0e 100644
--- a/StandardInterface/MESApplication/Controllers/Base/LoginController.cs
+++ b/StandardInterface/MESApplication/Controllers/Base/LoginController.cs
@@ -1,9 +1,10 @@
-锘縰sing System.Dynamic;
-using MES.Service.Dto.@base;
+锘縰sing MES.Service.Dto.@base;
 using MES.Service.service;
 using MES.Service.util;
 using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
+using System.Dynamic;
 
 namespace MESApplication.Controllers.Base;
 
@@ -105,4 +106,43 @@
             return ResponseResult.ResponseError(ex);
         }
     }
+
+    public class Root
+    {
+        public string version { get; set; }
+
+        public string apkUrl { get; set; }
+    }
+
+    /// <summary>
+    ///    鑾峰彇App鏈�鏂扮増鏈俊鎭�
+    /// </summary>
+    /// <param name="data"></param>
+    /// <returns></returns>
+    [HttpPost("getAppUpgradeInfo")]
+    public async Task<ResponseResult> getAppUpgradeInfo()
+    {
+
+        try
+        {
+            HttpClient client = new();
+            var requestUrl = $"http://192.168.1.104:8081/UpgradeInformation.json";
+            var response = await client.GetAsync(requestUrl);
+            response.EnsureSuccessStatusCode(); // 妫�鏌TTP鐘舵�佺爜
+            var responseContent = await response.Content.ReadAsStringAsync();
+            var a = JsonConvert.DeserializeObject<Root>(responseContent);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = a
+            };
+
+        }
+        catch (Exception ex)
+        {
+            return null;
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/StandardInterface/MESApplication/Controllers/BasicData/MesRohInController.cs b/StandardInterface/MESApplication/Controllers/BasicData/MesRohInController.cs
index fbce082..a720f08 100644
--- a/StandardInterface/MESApplication/Controllers/BasicData/MesRohInController.cs
+++ b/StandardInterface/MESApplication/Controllers/BasicData/MesRohInController.cs
@@ -34,6 +34,7 @@
         entity.Data = JsonConvert.SerializeObject(rohIn);
         entity.Status = 1;
         entity.CreateBy = "PL017";
+        entity.Route= rohIn.ErpRohIn.FBillNo;
         try
         {
             dynamic resultInfos = new ExpandoObject();
diff --git a/StandardInterface/MESApplication/Controllers/PLM/PLMController.cs b/StandardInterface/MESApplication/Controllers/PLM/PLMController.cs
new file mode 100644
index 0000000..902e37a
--- /dev/null
+++ b/StandardInterface/MESApplication/Controllers/PLM/PLMController.cs
@@ -0,0 +1,125 @@
+锘縰sing ConsoleApp1;
+using MES.Service.service.PLM;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+using System.Dynamic;
+using System.IO;
+
+namespace MESApplication.Controllers.PLM;
+
+
+[ApiController]
+[Route("api/PLM")]
+public class PLMController : ControllerBase
+{
+    private readonly PLMManager m = new();
+    private readonly WarehouseDownloadDoc wdd = new();
+
+    //RetrieveDrawings  璋冨彇鍥剧焊
+    [HttpPost("RetrieveDrawings")]
+    public ResponseResult RetrieveDrawings(string ItemNo)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos = m.RetrieveDrawings(ItemNo);
+
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+            catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+    //RetrieveImageFile  璋冨彇涓婁紶鍒版湇鍔″櫒鐨勬媿鎽勬枃浠�
+    [HttpGet("GetImageNames")]
+    public IActionResult GetImageNames(string releaseNo)
+    {
+        // 鎷兼帴鏈湴鏂囦欢绯荤粺璺緞
+        string basePath = @"D:\MES_FTP\IQC\"; // 鏈嶅姟鍣―鐩樹笅鐨勫熀纭�璺緞
+        string folderPath = Path.Combine(basePath, releaseNo); // 鍔ㄦ�佹嫾鎺ュ崟鍙峰搴旂殑鏂囦欢澶硅矾寰�
+
+        // 妫�鏌ユ枃浠跺す鏄惁瀛樺湪
+        if (!Directory.Exists(folderPath))
+        {
+            return NotFound($"鏂囦欢澶� {folderPath} 涓嶅瓨鍦ㄣ�傝妫�鏌ヨ矾寰勬槸鍚︽纭��");
+        }
+
+        // 鑾峰彇鏂囦欢澶逛腑鐨勬墍鏈夊浘鐗囨枃浠跺悕绉�
+        string[] imageExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
+        // 鑾峰彇鏂囦欢鐨勫畬鏁磋矾寰勶紝骞惰繑鍥炰竴涓寘鍚枃浠跺悕鍜屽畬鏁磋矾寰勭殑瀵硅薄
+        var imageFiles = Directory.GetFiles(folderPath)
+            .Where(file => imageExtensions.Any(ext => file.ToLower().EndsWith(ext)))
+            .Select(file => new
+            {
+                FileName = Path.GetFileName(file), // 鏂囦欢鍚�
+                FilePath = file,
+                FileBasePath = ConvertFileToBase64(file) // 鏂囦欢鐨� Base64 鏁版嵁 // 鏂囦欢鐨勫畬鏁磋矾寰�
+            });
+
+        return Ok(new { success = true, data = imageFiles });
+    }
+    private string ConvertFileToBase64(string filePath)
+    {
+        byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
+        return Convert.ToBase64String(fileBytes);
+    }
+
+    [HttpPost("DeleteImageFile")]
+    public IActionResult DeleteImageFile([FromQuery] string filePath)
+    {
+        // 妫�鏌ユ枃浠惰矾寰勬槸鍚︿负绌�
+        if (string.IsNullOrWhiteSpace(filePath))
+        {
+            return BadRequest("鏂囦欢璺緞涓嶈兘涓虹┖");
+        }
+
+        // 纭繚璺緞鏄粷瀵硅矾寰勶紙鍙互鏍规嵁闇�瑕佽皟鏁达級
+        filePath = Path.GetFullPath(filePath);
+
+        // 妫�鏌ユ枃浠舵槸鍚﹀瓨鍦�
+        if (!System.IO.File.Exists(filePath))
+        {
+            return NotFound("鏂囦欢涓嶅瓨鍦�");
+        }
+
+        try
+        {
+            // 鍒犻櫎鏂囦欢
+            System.IO.File.Delete(filePath);
+            return Ok("鏂囦欢鍒犻櫎鎴愬姛");
+        }
+        catch (System.Exception ex)
+        {
+            // 鎹曡幏寮傚父骞惰繑鍥為敊璇俊鎭�
+            return StatusCode(500, $"鍒犻櫎鏂囦欢鏃跺彂鐢熼敊璇�: {ex.Message}");
+        }
+    }
+
+    //RetrieveDrawings  璋冨彇鍥剧焊
+    [HttpPost("OpenDrawings")]
+    public IActionResult OpenDrawings(string fileId,string fName)
+    {
+        try
+        {
+            var resultInfos = wdd.SendRequest("Download", fileId);
+
+            return File(resultInfos, "application/octet-stream", fName);
+        }
+        catch (Exception ex)
+        {
+            return StatusCode(500, new ResponseResult
+            {
+                status = 1,
+                message = ex.Message,
+                data = null
+            });
+        }
+    }
+}
diff --git a/StandardInterface/MESApplication/Controllers/QcIssueResult/QcIssueResultController.cs b/StandardInterface/MESApplication/Controllers/QcIssueResult/QcIssueResultController.cs
new file mode 100644
index 0000000..5863393
--- /dev/null
+++ b/StandardInterface/MESApplication/Controllers/QcIssueResult/QcIssueResultController.cs
@@ -0,0 +1,135 @@
+锘縰sing MES.Service.Dto.webApi;
+using MES.Service.Dto.webApi.QcIssueResult;
+using MES.Service.Modes;
+using MES.Service.Modes.QcIssueResult;
+//using MES.Service.Modes.SentLaboratory;
+using MES.Service.service;
+using MES.Service.service.QcIssueResult;
+using MES.Service.util;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System.Diagnostics;
+using System.Dynamic;
+using System.Net;
+using System.Text;
+using System.Text.Json.Nodes;
+using System.Web;
+
+namespace MESApplication.Controllers.QcIssueResult;
+
+[ApiController]
+[Route("api/[controller]")]
+public class QcIssueResultController : ControllerBase
+{
+    private readonly MessageCenterManager _manager = new();
+    private readonly QcIssueResultManager m = new();
+
+    private readonly string METHOD = "POST";
+
+    private readonly string TableName = "MES_QCISSUE_RESULT";
+
+    private readonly string URL = "http://localhost:10054/api/QcIssueResult/";
+
+
+    [HttpPost("GetProcessNo")]
+    public IActionResult StartDingtalkProcess([FromBody] GetQcIssueResultDetail getQcIssueResultDetail)
+    {
+   
+        try
+        {
+            // 鏂板URL瑙g爜澶勭悊閫昏緫
+            DecodeUrlEncodedProperties(getQcIssueResultDetail);
+
+            // 璋冪敤 QcIssueResultManager 涓殑 GetProcessNo 鏂规硶鏉ュ惎鍔ㄩ拤閽夊伐浣滄祦瀹炰緥
+            string result = m.GetProcessNo(getQcIssueResultDetail);
+
+            string getLaboratoryDetailsJson = JsonConvert.SerializeObject(getQcIssueResultDetail, Formatting.Indented);
+            Debug.WriteLine("getQcIssueResultDetail: " + getLaboratoryDetailsJson);
+
+            string jsonPart = result.Substring(result.IndexOf("{"));
+            JObject jsonObject = JObject.Parse(jsonPart);
+            // 鎻愬彇instanceId鐨勫��
+            string instanceId = jsonObject["InstanceId"].ToString();
+
+            dynamic resultInfos = new ExpandoObject();
+            string ProcessNo = instanceId;
+            var save = m.SaveProcessNo(getQcIssueResultDetail.ReleaseNo, instanceId,getQcIssueResultDetail.StaffNo,getQcIssueResultDetail.Department);
+            resultInfos.tbBillList = save;
+
+            return Ok(result);
+        }
+        catch (Exception ex)
+        {
+            // 鎹曡幏寮傚父骞惰繑鍥為敊璇俊鎭�
+            return StatusCode(500, $"鍚姩閽夐拤宸ヤ綔娴佸疄渚嬪け璐�: {ex.Message}");
+        }
+    }
+
+    // 鏂板瑙g爜鏂规硶
+    private void DecodeUrlEncodedProperties(object obj)
+    {
+        if (obj == null) return;
+
+        var properties = obj.GetType().GetProperties();
+        foreach (var prop in properties)
+        {
+            // 鍙鐞嗗瓧绗︿覆绫诲瀷鐨勫睘鎬�
+            if (prop.PropertyType == typeof(string) && prop.CanWrite)
+            {
+                var value = prop.GetValue(obj) as string;
+                if (!string.IsNullOrEmpty(value))
+                {
+                    // 浣跨敤UTF8缂栫爜杩涜瑙g爜
+                    var decodedValue = HttpUtility.UrlDecode(value, Encoding.UTF8);
+                    prop.SetValue(obj, decodedValue);
+                }
+            }
+        }
+    }
+
+    [HttpPost("Save")]
+    public ResponseResult Save(ErpQcIssueResult erpQcIssueResult)
+    {
+        var entity = new MessageCenter();
+        entity.TableName = TableName;
+        entity.Url = URL + "Save";
+        entity.Method = METHOD;
+        entity.Data = JsonConvert.SerializeObject(erpQcIssueResult);
+        entity.Status = 1;
+        entity.CreateBy = "PL017";
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            var save = m.Save(erpQcIssueResult);
+            //resultInfos.tbBillList = save;
+
+            //entity.Result = 0;
+            //if (save) entity.Result = 1;
+
+            //entity.DealWith = 1;
+            //_manager.save(entity);
+
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = save
+            };
+        }
+        catch (Exception ex)
+        {
+            entity.Result = 0;
+
+            entity.DealWith = 0;
+
+            entity.ResultData = ex.Message;
+
+            _manager.save(entity);
+
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+}
+

--
Gitblit v1.9.3