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