From 00a72fff219241eb5b0405a066cc859d07cf7735 Mon Sep 17 00:00:00 2001 From: 啊鑫 <t2856754968@163.com> Date: 星期三, 17 九月 2025 10:23:44 +0800 Subject: [PATCH] 1111 --- service/QC/OaApi.cs | 285 ++++++++++++++++++++++---------------------------------- 1 files changed, 113 insertions(+), 172 deletions(-) diff --git a/service/QC/OaApi.cs b/service/QC/OaApi.cs index 1c063ce..632f099 100644 --- a/service/QC/OaApi.cs +++ b/service/QC/OaApi.cs @@ -1,33 +1,35 @@ // OaApiService.cs - -using System.Data; -using System.Data.SqlClient; +using System; +using System.Collections.Generic; using System.Dynamic; -using System.Net.Http.Headers; +using System.Data.SqlClient; +using System.Data; +using System.IO; +using System.Net.Http; using System.Security.Cryptography; using System.Text; -using NewPdaSqlServer.DB; -using NewPdaSqlServer.util; +using System.Threading.Tasks; +using NewPdaSqlServer.entity.Base; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; - -namespace NewPdaSqlServer.service.QC; +using NewPdaSqlServer.DB; +using SqlSugar; +using static Microsoft.EntityFrameworkCore.DbLoggerCategory; +using NewPdaSqlServer.entity; +using System.Linq; public class OaApiService : Repository<dynamic> { + private readonly HttpClient _httpClient; //private const string AppId = "303233EF-AC39-40C1-8364-AC989C6258A5"; //private const string BaseUrl = "http://192.168.1.149:8099/api/ec/dev/auth/"; //private const string WorkflowUrl = "http://192.168.1.149:8099/api/workflow/paService/doCreateRequest"; private const string AppId = "AB7F0461-89C3-4EAD-B5B5-B7D540617921"; private const string BaseUrl = "http://192.168.1.20:80/api/ec/dev/auth/"; - - private const string WorkflowUrl = - "http://192.168.1.20:80/api/workflow/paService/doCreateRequest"; - - private readonly HttpClient _httpClient; + private const string WorkflowUrl = "http://192.168.1.20:80/api/workflow/paService/doCreateRequest"; public OaApiService() { @@ -35,13 +37,11 @@ _httpClient.Timeout = TimeSpan.FromSeconds(30); } - public dynamic SubmitIQCToOA(dynamic queryObj) + public dynamic SubmitIQCToOA(dynamic queryObj) { // 淇敼鍙傛暟楠岃瘉瀛楁鍚� - if (string.IsNullOrEmpty(queryObj.userId.ToString())) - throw new Exception("鐢ㄦ埛id涓嶅厑璁镐负绌�"); - if (string.IsNullOrEmpty(queryObj.qcczdGuid.ToString())) - throw new Exception("寮傚父澶勭疆鍗昳d涓嶈兘涓虹┖"); + if (string.IsNullOrEmpty(queryObj.userId.ToString())) throw new Exception("鐢ㄦ埛id涓嶅厑璁镐负绌�"); + if (string.IsNullOrEmpty(queryObj.qcczdGuid.ToString())) throw new Exception("寮傚父澶勭疆鍗昳d涓嶈兘涓虹┖"); //if (queryObj.qcczdGuid.IsNullOrEmpty()) throw new Exception("寮傚父澶勭疆鍗昳d涓嶈兘涓虹┖"); // 鍘熷弬鏁板悕涓� qcczdGuid try @@ -51,30 +51,31 @@ //var query = JObject.FromObject(queryObj); // 1. 娉ㄥ唽鑾峰彇鍑瘉 - var registResult = GetRegistAsync(); + var registResult = GetRegistAsync(); var secret = registResult["secrit"].ToString(); var spk = registResult["spk"].ToString(); // 2. 鑾峰彇璁块棶浠ょ墝 - var tokenResult = ApplyTokenAsync(secret, spk); + var tokenResult = ApplyTokenAsync(secret, spk); var token = tokenResult["token"].ToString(); - var oaUserId = ""; + string oaUserId = ""; using (var conn = new SqlConnection(DbHelperSQL.strConn)) { using (var cmd = new SqlCommand("select_oa_userid", conn)) { + try { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; - cmd.Parameters.Add( - new SqlParameter("@guid", SqlDbType.VarChar, 100) - { Value = queryObj.qcczdGuid.ToString() }); + cmd.Parameters.Add(new SqlParameter("@guid", SqlDbType.VarChar, 100) { Value = queryObj.qcczdGuid.ToString() }); using (var reader = cmd.ExecuteReader()) { if (reader.Read()) + { oaUserId = reader["result"]?.ToString(); + } } } catch (Exception logEx) @@ -92,8 +93,7 @@ _httpClient.DefaultRequestHeaders.Clear(); _httpClient.DefaultRequestHeaders.Add("token", token); _httpClient.DefaultRequestHeaders.Add("appid", AppId); - _httpClient.DefaultRequestHeaders.Add("userid", - RSAEncrypt(oaUserId, spk)); + _httpClient.DefaultRequestHeaders.Add("userid", RSAEncrypt(oaUserId, spk)); // 4. 鏋勫缓璇锋眰浣� var requestData = BuildRequestData(queryObj); @@ -112,34 +112,20 @@ { conn.Open(); cmd.CommandType = CommandType.StoredProcedure; - SqlParameter[] logParams = + SqlParameter[] logParams = { - new("@edtUserGuid", SqlDbType.UniqueIdentifier) - { - Value = Guid.Parse(queryObj.userId.ToString()) - }, - new("@abtGuid", SqlDbType.UniqueIdentifier) - { - Value = Guid.Parse( - queryObj.qcczdGuid.ToString()) - }, - new("@abtTable", SqlDbType.NVarChar, 40) - { Value = "Mes_QC_Exceptional" }, - new("@detail", SqlDbType.NVarChar, 2500) - { Value = "鎻愪氦IQC鍒癘A绯荤粺" }, + new("@edtUserGuid", SqlDbType.UniqueIdentifier) { Value = Guid.Parse(queryObj.userId.ToString()) }, + new("@abtGuid", SqlDbType.UniqueIdentifier) { Value = Guid.Parse(queryObj.qcczdGuid.ToString()) }, + new("@abtTable", SqlDbType.NVarChar, 40) { Value = "Mes_QC_Exceptional" }, + new("@detail", SqlDbType.NVarChar, 2500) { Value = "鎻愪氦IQC鍒癘A绯荤粺" }, new("@hNo", SqlDbType.NVarChar, 100) { Value = "" }, - new("@SendJson", SqlDbType.NVarChar) - { - Value = JObject.FromObject(requestData) - .ToString() - }, - new("@RtnJson", SqlDbType.NVarChar) - { Value = response.Content.ToString() } + new("@SendJson", SqlDbType.NVarChar) { Value = JObject.FromObject(requestData).ToString() }, + new("@RtnJson", SqlDbType.NVarChar) { Value = response.Content.ToString() } }; - + foreach (var param in logParams) cmd.Parameters.Add(param); - + cmd.ExecuteNonQuery(); } catch (Exception logEx) @@ -164,7 +150,7 @@ checkDate = GETDATE(), checkBy = (select top 1 u.[ACCOUNT] from [dbo].[SYS_USER] u where u.guid = @edtUserCode) WHERE GUID = @inOrderGuid"; - + using (var conn = new SqlConnection(DbHelperSQL.strConn)) { using (var cmd = new SqlCommand(updateSql, conn)) @@ -173,10 +159,8 @@ { conn.Open(); //cmd.Parameters.AddWithValue("@dt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); - cmd.Parameters.AddWithValue("@edtUserCode", - queryObj.userId?.ToString()); - cmd.Parameters.AddWithValue("@inOrderGuid", - queryObj.qcczdGuid?.ToString()); + cmd.Parameters.AddWithValue("@edtUserCode", queryObj.userId?.ToString()); + cmd.Parameters.AddWithValue("@inOrderGuid", queryObj.qcczdGuid?.ToString()); cmd.ExecuteNonQuery(); } catch (Exception updateEx) @@ -191,13 +175,14 @@ } } - return result; // 鐩存帴瑙f瀽涓篔Object + return result; // 鐩存帴瑙f瀽涓篔Object + } catch (Exception ex) { dynamic error = new ExpandoObject(); - error.code = "SYSTEM_INNER_ERROR"; // 鏂板鏍囧噯閿欒鐮� - error.errMsg = ex.Message; // 淇瀛楁鍚嶅尮閰嶈鑼� + error.code = "SYSTEM_INNER_ERROR"; // 鏂板鏍囧噯閿欒鐮� + error.errMsg = ex.Message; // 淇瀛楁鍚嶅尮閰嶈鑼� error.data = new JObject(); error.reqFailMsg = new JObject(); return error; @@ -209,11 +194,11 @@ // 浠巕uery鍙傛暟涓幏鍙栧疄闄呬笟鍔℃暟鎹� return new Dictionary<string, object> { - { "mainData", BuildMainData(queryObj) }, - { "requestName", $"IQC寮傚父澶勭疆鍗曟祦绋�-{DateTime.Now:yyyyMMddHHmmss}" }, - { "workflowId", "602" }, //娴嬭瘯锛�379 姝e紡锛�600->602 + {"mainData", BuildMainData(queryObj)}, + {"requestName", $"IQC寮傚父澶勭疆鍗曟祦绋�-{DateTime.Now:yyyyMMddHHmmss}"}, + {"workflowId", "602"},//娴嬭瘯锛�379 姝e紡锛�600->602 //{"otherParams", BuildOtherParams()}, - { "detailData", BuildDetailData(queryObj) } + {"detailData", BuildDetailData(queryObj)} }; } @@ -222,45 +207,45 @@ var attachments = new JArray(); foreach (var file in files ?? Enumerable.Empty<dynamic>()) + { attachments.Add(new JObject { // 淇瀛楁鍚嶇О鍖归厤鏍囧噯鏍煎紡 ["filePath"] = file.url?.ToString() ?? string.Empty, ["fileName"] = file.FileName?.ToString() ?? "鏈懡鍚嶆枃浠�" }); + } return attachments; } - private JArray BuildMainData(dynamic queryObj) { // 浣跨敤鍙傛暟鍖栨煡璇㈤槻姝QL娉ㄥ叆 const string mainSql = @"EXEC select_oa_BuildMainData @guid"; - var mainData = - Db.Ado.SqlQuery<dynamic>(mainSql, - new { guid = queryObj.qcczdGuid }); + var mainData = Db.Ado.SqlQuery<dynamic>(mainSql, new { guid = queryObj.qcczdGuid }); // 鏇寸簿纭殑鏁版嵁瀛樺湪鎬ф鏌� if (mainData == null || !mainData.Any()) + { throw new Exception($"鏈壘鍒板紓甯稿缃崟[{queryObj.qcczdGuid}]鐩稿叧鏁版嵁"); + } var firstRecord = mainData.First(); // 瀛楁鏄犲皠閰嶇疆锛堝瓧娈靛悕 -> 鏁版嵁搴撳垪鍚嶏級 - var fieldMappings = - new Dictionary<string, (string Field, string Default)> - { - ["sqr"] = ("sqr", "0"), // 榛樿鍊兼敼涓烘暟瀛� - ["sqrq"] = ("sqrq", ""), // 绌哄瓧绗︿覆鐢ㄤ簬鏃ユ湡鏍煎紡鍖� - ["szbm"] = ("szbm", "0"), // 榛樿鍊兼敼涓烘暟瀛� - ["szdw"] = ("szdw", "0"), // 榛樿鍊兼敼涓烘暟瀛� - ["ycczdh"] = ("ycczdh", "N/A"), - ["lh"] = ("lh", "N/A"), - ["khgys"] = ("khgys", "N/A"), - ["jzmcwlmc"] = ("jzmcwlmc", "N/A"), - ["dhdhtxt"] = ("dhdhtxt", "N/A"), - ["bhgpqxms"] = ("bhgpqxms", "鏃犵己闄锋弿杩�") - }; + var fieldMappings = new Dictionary<string, (string Field, string Default)> + { + ["sqr"] = ("sqr", "0"), // 榛樿鍊兼敼涓烘暟瀛� + ["sqrq"] = ("sqrq", ""), // 绌哄瓧绗︿覆鐢ㄤ簬鏃ユ湡鏍煎紡鍖� + ["szbm"] = ("szbm", "0"), // 榛樿鍊兼敼涓烘暟瀛� + ["szdw"] = ("szdw", "0"), // 榛樿鍊兼敼涓烘暟瀛� + ["ycczdh"] = ("ycczdh", "N/A"), + ["lh"] = ("lh", "N/A"), + ["khgys"] = ("khgys", "N/A"), + ["jzmcwlmc"] = ("jzmcwlmc", "N/A"), + ["dhdhtxt"] = ("dhdhtxt", "N/A"), + ["bhgpqxms"] = ("bhgpqxms", "鏃犵己闄锋弿杩�") + }; // 鍔ㄦ�佺敓鎴愬瓧娈甸泦鍚� var result = new JArray(); @@ -268,19 +253,13 @@ { var value = mapping.Key switch { - "sqr" or "szbm" or "szdw" => - int.TryParse( - GetDynamicValue(firstRecord, mapping.Value.Field, - mapping.Value.Default), out int num) - ? num - : 0, - "sqrq" => DateTime.TryParse( - GetDynamicValue(firstRecord, mapping.Value.Field, ""), - out DateTime date) - ? date.ToString("yyyy-MM-dd") + "sqr" or "szbm" or "szdw" => + int.TryParse(GetDynamicValue(firstRecord, mapping.Value.Field, mapping.Value.Default), out int num) + ? num : 0, + "sqrq" => DateTime.TryParse(GetDynamicValue(firstRecord, mapping.Value.Field, ""), out DateTime date) + ? date.ToString("yyyy-MM-dd") : DateTime.Now.ToString("yyyy-MM-dd"), - _ => GetDynamicValue(firstRecord, mapping.Value.Field, - mapping.Value.Default) + _ => GetDynamicValue(firstRecord, mapping.Value.Field, mapping.Value.Default) }; result.Add(new JObject { @@ -299,9 +278,7 @@ RIGHT JOIN MES_FILE C ON C.parent_Guid = B.guid WHERE pGuid = @guid"; - var fileData = - Db.Ado.SqlQuery<dynamic>(fileSql, - new { guid = queryObj.qcczdGuid }); + var fileData = Db.Ado.SqlQuery<dynamic>(fileSql, new { guid = queryObj.qcczdGuid }); var files = fileData.Count > 0 ? CreateFileData(fileData) : null; // 鏂板 // 娣诲姞鏂囦欢瀛楁 @@ -315,13 +292,11 @@ } // 杈呭姪鏂规硶锛氬畨鍏ㄨ幏鍙杁ynamic瀵硅薄鍊� - private static string GetDynamicValue(dynamic record, string field, - string defaultValue) + private static string GetDynamicValue(dynamic record, string field, string defaultValue) { try { - return ((IDictionary<string, object>)record)[field]?.ToString() ?? - defaultValue; + return ((IDictionary<string, object>)record)[field]?.ToString() ?? defaultValue; } catch { @@ -418,33 +393,33 @@ var array = new JArray(); if (attachments != null) + { foreach (var att in attachments) + { array.Add(new JObject { ["filePath"] = att["url"]?.ToString(), ["fileName"] = att["fileName"]?.ToString() }); - + } + } return array; } private JArray BuildDetailData(dynamic queryObj) { // 浣跨敤鍙傛暟鍖栨煡璇㈣幏鍙栨槑缁嗘暟鎹� - const string mainSql = - @"select ROW_NUMBER() over (ORDER BY Jy_Date) AS xh,releaseNo AS jydh, Jy_Date AS jydrq, batchQty as sjsl, + const string mainSql = @"select ROW_NUMBER() over (ORDER BY Jy_Date) AS xh,releaseNo AS jydh, Jy_Date AS jydrq, batchQty as sjsl, chouQty AS cys, badQty AS bls, badProb AS bll,C.USER_NAME AS jyr from Mes_QC_Exceptional_Detail A LEFT JOIN MES_QA_ITEMS_DETECT_01 B ON A.releaseNo = B.release_no LEFT JOIN SYS_USER C ON C.ACCOUNT = B.fcheck_by WHERE pGuid = @guid"; - - var details = - Db.Ado.SqlQuery<dynamic>(mainSql, - new { guid = queryObj.qcczdGuid }); - + + var details = Db.Ado.SqlQuery<dynamic>(mainSql, new { guid = queryObj.qcczdGuid }); + var tableRecords = new JArray(); - + // 閬嶅巻姣忔潯鏄庣粏鏁版嵁 foreach (var record in details ?? Enumerable.Empty<dynamic>()) { @@ -452,58 +427,35 @@ var fields = new JArray { //new JObject { ["fieldName"] = "xh", ["fieldValue"] = record.xh?.ToString() ?? "" }, - new JObject - { - ["fieldName"] = "jydh", - ["fieldValue"] = record.jydh?.ToString() ?? "" - }, - new JObject - { - ["fieldName"] = "jyr", - ["fieldValue"] = record.jyr?.ToString() ?? "" - }, - new JObject - { - ["fieldName"] = "jydrq", + new JObject { ["fieldName"] = "jydh", ["fieldValue"] = record.jydh?.ToString() ?? "" }, + new JObject { ["fieldName"] = "jyr", ["fieldValue"] = record.jyr?.ToString() ?? "" }, + new JObject { + ["fieldName"] = "jydrq", // 鏍煎紡鍖栦负"yyyy-MM-dd"瀛楃涓� - ["fieldValue"] = record.jydrq != null - ? Convert.ToDateTime(record.jydrq) - .ToString("yyyy-MM-dd ") - : DateTime.Now.ToString("yyyy-MM-dd") + ["fieldValue"] = (record.jydrq != null + ? Convert.ToDateTime(record.jydrq).ToString("yyyy-MM-dd ") + : DateTime.Now.ToString("yyyy-MM-dd")) }, // 鏁板�煎瓧娈典繚鎸佹暟瀛楃被鍨嬭�岄潪瀛楃涓� // 淇鏁板�肩被鍨嬭浆鎹㈡柟寮� - new JObject - { - ["fieldName"] = "sjsl", - ["fieldValue"] = (float)(record.sjsl ?? 0m) - }, - new JObject - { - ["fieldName"] = "cys", - ["fieldValue"] = (float)(record.cys ?? 0) - }, - new JObject - { - ["fieldName"] = "bls", - ["fieldValue"] = (float)(record.bls ?? 0) - }, - new JObject { ["fieldName"] = "bll", ["fieldValue"] = 1 } + new JObject { ["fieldName"] = "sjsl", ["fieldValue"] = (float)(record.sjsl ?? 0m) }, + new JObject { ["fieldName"] = "cys", ["fieldValue"] = (float)(record.cys ?? 0) }, + new JObject { ["fieldName"] = "bls", ["fieldValue"] = (float)(record.bls ?? 0) }, + new JObject { ["fieldName"] = "bll", ["fieldValue"] = 1, } }; - + tableRecords.Add(new JObject { - ["recordOrder"] = 0, // 瀹為檯涓氬姟涓彲鑳介渶瑕佹牴鎹鍙疯缃� + ["recordOrder"] = 0, // 瀹為檯涓氬姟涓彲鑳介渶瑕佹牴鎹鍙疯缃� ["workflowRequestTableFields"] = fields }); } - + return new JArray { new JObject { - ["tableDBName"] = - "formtable_main_321_dt1", //娴嬭瘯锛歠ormtable_main_33_dt1 + ["tableDBName"] = "formtable_main_321_dt1",//娴嬭瘯锛歠ormtable_main_33_dt1 ["workflowRequestTableRecords"] = tableRecords } }; @@ -518,7 +470,7 @@ }; } - private JObject GetRegistAsync() + private JObject GetRegistAsync() { using var rsa = new RSACryptoServiceProvider(2048); var cpk = Convert.ToBase64String(rsa.ExportRSAPublicKey()); @@ -535,11 +487,9 @@ { _httpClient.DefaultRequestHeaders.Clear(); _httpClient.DefaultRequestHeaders.Add("appid", AppId); - _httpClient.DefaultRequestHeaders.Add("secret", - RSAEncrypt(secret, spk)); + _httpClient.DefaultRequestHeaders.Add("secret", RSAEncrypt(secret, spk)); - var response = - _httpClient.PostAsync(BaseUrl + "applytoken", null).Result; + var response = _httpClient.PostAsync(BaseUrl + "applytoken", null).Result; return JObject.Parse(response.Content.ReadAsStringAsync().Result); } @@ -551,24 +501,17 @@ //var dataBytes = Encoding.UTF8.GetBytes(data); //var encrypted = rsa.Encrypt(dataBytes, RSAEncryptionPadding.Pkcs1); //return Convert.ToBase64String(encrypted); - var publicKeyParam = - (RsaKeyParameters)PublicKeyFactory.CreateKey( - Convert.FromBase64String(publicKey)); - var XML = string.Format( - "<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>", - Convert.ToBase64String(publicKeyParam.Modulus - .ToByteArrayUnsigned()), - Convert.ToBase64String( - publicKeyParam.Exponent.ToByteArrayUnsigned())); - var encryptedContent = string.Empty; - using (var rsa = new RSACryptoServiceProvider()) + RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey)); + string XML = string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>", + Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()), + Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned())); + string encryptedContent = string.Empty; + using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) { rsa.FromXmlString(XML); - var encryptedData = - rsa.Encrypt(Encoding.Default.GetBytes(data), false); + byte[] encryptedData = rsa.Encrypt(Encoding.Default.GetBytes(data), false); encryptedContent = Convert.ToBase64String(encryptedData); } - return encryptedContent; } @@ -577,13 +520,12 @@ // 鏀圭敤FormUrlEncodedContent骞舵纭缃瓹ontent-Type var formData = new List<KeyValuePair<string, string>>(); foreach (var item in data) - formData.Add( - new KeyValuePair<string, string>(item.Key, - item.Value.ToString())); + { + formData.Add(new KeyValuePair<string, string>(item.Key, item.Value.ToString())); + } var content = new FormUrlEncodedContent(formData); - content.Headers.ContentType = - new MediaTypeHeaderValue("application/x-www-form-urlencoded"); + content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded"); var response = _httpClient.PostAsync(url, content).Result; var responseString = response.Content.ReadAsStringAsync().Result; @@ -598,8 +540,7 @@ }; // 璋冭瘯杈撳嚭瀹屾暣鍝嶅簲淇℃伅 - Console.WriteLine( - $"瀹屾暣鍝嶅簲锛歕n{responseInfo.ToString(Formatting.Indented)}"); + Console.WriteLine($"瀹屾暣鍝嶅簲锛歕n{responseInfo.ToString(Formatting.Indented)}"); return responseInfo; } @@ -608,4 +549,4 @@ { _httpClient?.Dispose(); } -} \ No newline at end of file +} -- Gitblit v1.9.3