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/MES.Service/service/QcIssueResult/QcIssueResultManager.cs |  764 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 764 insertions(+), 0 deletions(-)

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

--
Gitblit v1.9.3