sjz
2025-05-09 597f8e08e6264b2143454e40a7be553d1e8b6df7
StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,764 @@
using 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 åˆå§‹åŒ–账号Client
     * @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
        {
            // æž„造请求URL
            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;
    }
}