From 02b26bfaca24386f7b4f4a5e9f336812370ed49b Mon Sep 17 00:00:00 2001
From: cdk <2441919651@qq.com>
Date: 星期一, 22 十二月 2025 09:45:46 +0800
Subject: [PATCH] 获取BOM参数调整
---
service/QC/OAJyService.cs | 341 +++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 238 insertions(+), 103 deletions(-)
diff --git a/service/QC/OAJyService.cs b/service/QC/OAJyService.cs
index 605ad1f..c7fb134 100644
--- a/service/QC/OAJyService.cs
+++ b/service/QC/OAJyService.cs
@@ -11,6 +11,13 @@
using System.Security.Cryptography;
using System.Text;
using static Azure.Core.HttpHeader;
+using System.Security.Cryptography;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Security;
+using System.Security.Cryptography.X509Certificates;
+using Org.BouncyCastle.Crypto.Parameters;
+using Org.BouncyCastle.Security;
namespace NewPdaSqlServer.service.QC;
@@ -23,34 +30,39 @@
// private const string SPK = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApobID/gwmD9OofMG1gEcE94NCMeTYUq1cam/7ADZmxHCVpF143GaHWhqDdY0TTVbcUElsQ71DzAG2j3itWlIJBK5fVGwCo3sPpAvUDdKMh+Uivcp7yxdy/IDRA/PS4JARuEyM4cVJLhIOU2KnSlbIkheeoDkDgfaxu9kKrWnozJLiYraVTVDz9PdRX7fQdP+Zu/xB9txAGw4kvOm9HwgrzaSRdZEhisTJ5yyoNW/dLXtWKXA0cKhKOOIFu12TOrv/It6hl1ShTUuy79Pa51M9Oc2dEfVs1tluNXPWo1uFXQbBaJxdqZEJJlK7iW2uQFIao2O4XFHYThwy2+6116LtwIDAQAB";
private const string HOST = "http://192.168.1.149:8099";
- private const string SPK = @"-----BEGIN PUBLIC KEY-----
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApobID/gwmD9OofMG1gEc
-E94NCMeTYUq1cam/7ADZmxHCVpF143GaHWhqDdY0TTVbcUElsQ71DzAG2j3itWlI
-JBK5fVGwCo3sPpAvUDdKMh+Uivcp7yxdy/IDRA/PS4JARuEyM4cVJLhIOU2KnSlb
-IkheeoDkDgfaxu9kKrWnozJLiYraVTVDz9PdRX7fQdP+Zu/xB9txAGw4kvOm9Hwg
-rzaSRdZEhisTJ5yyoNW/dLXtWKXA0cKhKOOIFu12TOrv/It6hl1ShTUuy79Pa51M
-9Oc2dEfVs1tluNXPWo1uFXQbBaJxdqZEJJlK7iW2uQFIao2O4XFHYThwy2+6116L
-twIDAQAB
------END PUBLIC KEY-----";
+ private const string SPK = @"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApobID/gwmD9OofMG1gEcE94NCMeTYUq1cam/7ADZmxHCVpF143GaHWhqDdY0TTVbcUElsQ71DzAG2j3itWlIJBK5fVGwCo3sPpAvUDdKMh+Uivcp7yxdy/IDRA/PS4JARuEyM4cVJLhIOU2KnSlbIkheeoDkDgfaxu9kKrWnozJLiYraVTVDz9PdRX7fQdP+Zu/xB9txAGw4kvOm9HwgrzaSRdZEhisTJ5yyoNW/dLXtWKXA0cKhKOOIFu12TOrv/It6hl1ShTUuy79Pa51M9Oc2dEfVs1tluNXPWo1uFXQbBaJxdqZEJJlK7iW2uQFIao2O4XFHYThwy2+6116LtwIDAQAB";
public static class RsaHelper
{
public static string Encrypt(string plainText, string publicKeyPem)
{
- // 灏哖EM鏍煎紡鐨勫叕閽ヨ浆鎹负XML鏍煎紡
- var rsa = RSA.Create();
- rsa.ImportFromPem(publicKeyPem); // 浣跨敤.NET 5+ 鍐呯疆PEM瑙f瀽鏂规硶
+ //// 灏哖EM鏍煎紡鐨勫叕閽ヨ浆鎹负XML鏍煎紡
+ //var rsa = RSA.Create();
+ //rsa.ImportFromPem(publicKeyPem); // 浣跨敤.NET 5+ 鍐呯疆PEM瑙f瀽鏂规硶
- var parameters = rsa.ExportParameters(false);
- string publicKeyXml = $"<RSAKeyValue><Modulus>{Convert.ToBase64String(parameters.Modulus)}</Modulus><Exponent>{Convert.ToBase64String(parameters.Exponent)}</Exponent></RSAKeyValue>";
+ //var parameters = rsa.ExportParameters(false);
+ //string publicKeyXml = $"<RSAKeyValue><Modulus>{Convert.ToBase64String(parameters.Modulus)}</Modulus><Exponent>{Convert.ToBase64String(parameters.Exponent)}</Exponent></RSAKeyValue>";
- using var rsaProvider = new RSACryptoServiceProvider();
- rsaProvider.FromXmlString(publicKeyXml); // 浣跨敤杞崲鍚庣殑XML鏍煎紡鍏挜
+ //using var rsaProvider = new RSACryptoServiceProvider();
+ //rsaProvider.FromXmlString(publicKeyXml); // 浣跨敤杞崲鍚庣殑XML鏍煎紡鍏挜
- var data = Encoding.UTF8.GetBytes(plainText);
- var encrypted = rsaProvider.Encrypt(data, false);
- return Convert.ToBase64String(encrypted);
+ //var data = Encoding.UTF8.GetBytes(plainText);
+ //var encrypted = rsaProvider.Encrypt(data, false);
+ //return Convert.ToBase64String(encrypted);
+
+ RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKeyPem));
+ 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);
+ byte[] encryptedData = rsa.Encrypt(Encoding.Default.GetBytes(plainText), false);
+ encryptedContent = Convert.ToBase64String(encryptedData);
+ }
+ return encryptedContent;
}
}
@@ -78,12 +90,14 @@
public string GetToken()
{
-
-;
+ var userId = "1268";
+ var encryptedUserId = RsaHelper.Encrypt(userId, SPK);
+ ;
var headers = new Dictionary<string, string>
{
["appid"] = APPID,
- ["secret"] = RsaHelper.Encrypt(SECRET, SPK)
+ ["secret"] = RsaHelper.Encrypt(SECRET, SPK),
+ ["userId"] = encryptedUserId
};
try
@@ -109,130 +123,251 @@
}
- public string GetOaKqInfo(Uri url, string token, string userId)
+ //public string GetOaKqInfo(Uri url, string token, string userId)
+ //{
+ // try
+ // {
+ // ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;
+ // ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
+
+ // var request = WebRequest.Create(url) as HttpWebRequest;
+ // request.Method = "POST";
+ // request.Timeout = 20000; // 20绉掕秴鏃�
+ // request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"; // 鏄庣‘鎸囧畾缂栫爜
+
+ // // 娣诲姞璋冭瘯澶翠俊鎭�
+ // request.Headers.Add("appid", APPID);
+ // request.Headers.Add("token", token);
+ // request.Headers.Add("userId", userId);
+
+ // // 鏋勫缓甯︽椂鍖虹殑鏃ユ湡鍙傛暟
+ // var postData = new StringBuilder();
+ // var dateParam = DateTime.Now.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:sszzz");
+ // postData.AppendFormat("KQSDATE={0}&KQEDATE={1}",
+ // Uri.EscapeDataString(dateParam),
+ // Uri.EscapeDataString(dateParam));
+
+ // byte[] byteData = Encoding.UTF8.GetBytes(postData.ToString()); // 鏀圭敤UTF8缂栫爜
+
+ // // 鏇村畬鍠勭殑璇锋眰鍐欏叆
+ // using (var stream = request.GetRequestStream())
+ // {
+ // stream.Write(byteData, 0, byteData.Length);
+ // }
+
+ // // 澶勭悊HTTP閿欒鐘舵�佺爜
+ // using (var response = request.GetResponse() as HttpWebResponse)
+ // {
+ // if (response.StatusCode != HttpStatusCode.OK)
+ // {
+ // throw new WebException($"鏈嶅姟鍣ㄨ繑鍥為敊璇姸鎬佺爜: {(int)response.StatusCode} {response.StatusDescription}");
+ // }
+
+ // using (var stream = response.GetResponseStream())
+ // using (var reader = new StreamReader(stream, Encoding.UTF8))
+ // {
+ // return reader.ReadToEnd();
+ // }
+ // }
+ // }
+ // catch (WebException ex) when (ex.Response is HttpWebResponse response)
+ // {
+ // // 璁板綍璇︾粏閿欒淇℃伅
+ // var errorStream = response.GetResponseStream();
+ // using (var reader = new StreamReader(errorStream))
+ // {
+ // string errorDetails = reader.ReadToEnd();
+ // throw new Exception($"璇锋眰澶辫触 [Status: {response.StatusCode}]: {errorDetails}", ex);
+ // }
+ // }
+ // catch (Exception ex)
+ // {
+ // throw new Exception($"璇锋眰寮傚父: {ex.Message}", ex);
+ // }
+ //}
+
+
+ public dynamic SubmitIQCToOA(dynamic query)
+ {
+ try
+ {
+ // 鍙傛暟鏍¢獙
+ if (query == null) throw new ArgumentNullException(nameof(query), "鍙傛暟瀵硅薄涓嶈兘涓簄ull");
+ //if (query.workflowId == null) throw new ArgumentException("workflowId涓嶈兘涓虹┖");
+ //if (query.mainData == null) throw new ArgumentException("mainData涓嶈兘涓虹┖");
+
+ // 杞崲鍔ㄦ�佸弬鏁�
+ //var mainDataDict = ((IEnumerable<KeyValuePair<string, object>>)query.mainData)
+ // .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
+
+ Dictionary<string, object> mainDataDict = null;
+
+ Dictionary<string, object> detailDataDict = null;
+ //if (query.detailData != null)
+ //{
+ // detailDataDict = ((IEnumerable<KeyValuePair<string, object>>)query.detailData)
+ // .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
+ //}
+
+ // 鍔犲瘑澶勭悊
+ var userId = "1268";
+ var encryptedUserId = RsaHelper.Encrypt(userId, SPK);
+ string strToken = GetToken();
+
+
+ // 鏇挎崲鍘熸湁鐨勬祴mainDataDict璇曟暟鎹瀯寤�
+ mainDataDict = BuildMainDataFromQuery(query);
+
+
+ // 璋冪敤鏂规硶澧炲姞userid璇锋眰澶�
+ var result = SubmitWorkflowRequest(
+ token: strToken,
+ workflowId: 379,
+ mainData: mainDataDict,
+ requestName: "MES->OA娴嬭瘯娴佺▼鏍囬",
+ otherParams:null,
+ remark:"Test",
+ requestLevel:"",
+ encryptedUserId: encryptedUserId // 鏂板鍙傛暟
+ );
+ return result;
+ }
+ catch (Exception ex)
+ {
+ // 鏇磋缁嗙殑閿欒澶勭悊
+ return new {
+ status = -1,
+ message = $"瀹屾暣閿欒淇℃伅锛歿ex.ToString()}" // 鏄剧ず瀹屾暣鍫嗘爤
+ };
+ }
+ }
+
+ // 淇敼鏂规硶绛惧悕
+ public dynamic SubmitWorkflowRequest(
+ string token,
+ int workflowId,
+ Dictionary<string, object> mainData,
+ string encryptedUserId, // 鐢ㄦ埛id
+ Dictionary<string, object> detailData = null,
+ Dictionary<string, object> otherParams = null,
+ string remark = "",
+ string requestLevel = "",
+ string requestName = "榛樿娴佺▼鏍囬")
{
try
{
ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
+ var url = new Uri($"{HOST}/api/workflow/paService/doCreateRequest");
var request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
- request.Timeout = 20000; // 20绉掕秴鏃�
- request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"; // 鏄庣‘鎸囧畾缂栫爜
+ request.Timeout = 20000;
+ request.ContentType = "application/x-www-form-urlencoded"; // 淇敼涓篔SON鏍煎紡
- // 娣诲姞璋冭瘯澶翠俊鎭�
- request.Headers.Add("appid", APPID);
- request.Headers.Add("token", token);
- request.Headers.Add("userId", userId);
+ // 鏋勫缓璇锋眰澶�
+ request.Headers.Set("appid", APPID);
+ request.Headers.Set("token", token);
+ request.Headers.Set("Content-Type", "application/x-www-form-urlencoded");
+ request.Headers.Set("userId", encryptedUserId);
+ // 鍋囪闇�瑕佸姞瀵嗙殑userid浠庡叾浠栧湴鏂硅幏鍙栵紝杩欓噷闇�瑕佽ˉ鍏呰幏鍙栭�昏緫
- // 鏋勫缓甯︽椂鍖虹殑鏃ユ湡鍙傛暟
- var postData = new StringBuilder();
- var dateParam = DateTime.Now.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:sszzz");
- postData.AppendFormat("KQSDATE={0}&KQEDATE={1}",
- Uri.EscapeDataString(dateParam),
- Uri.EscapeDataString(dateParam));
+ // 鏋勫缓璇锋眰浣�
+ var requestBody = new Dictionary<string, object>
+ {
+ //["userId"] = "1268",
+ ["workflowId"] = workflowId,
+ ["mainData"] = new List<Dictionary<string, object>> { mainData }, // 鍖呰鎴愭暟缁�
+ ["detailData"] = null,
+ ["otherParams"] = otherParams ?? new Dictionary<string, object>(),
+ ["remark"] = remark,
+ ["requestLevel"] = requestLevel,
+ ["requestName"] = requestName
+ };
- byte[] byteData = Encoding.UTF8.GetBytes(postData.ToString()); // 鏀圭敤UTF8缂栫爜
+ // 搴忓垪鍖栬姹備綋
+ var jsonBody = JsonConvert.SerializeObject(requestBody);
+ byte[] byteData = Encoding.UTF8.GetBytes(jsonBody);
- // 鏇村畬鍠勭殑璇锋眰鍐欏叆
+ // 鍙戦�佽姹�
using (var stream = request.GetRequestStream())
{
stream.Write(byteData, 0, byteData.Length);
}
- // 澶勭悊HTTP閿欒鐘舵�佺爜
+ // 澶勭悊鍝嶅簲
using (var response = request.GetResponse() as HttpWebResponse)
{
- if (response.StatusCode != HttpStatusCode.OK)
- {
- throw new WebException($"鏈嶅姟鍣ㄨ繑鍥為敊璇姸鎬佺爜: {(int)response.StatusCode} {response.StatusDescription}");
- }
-
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
- return reader.ReadToEnd();
+ var responseJson = reader.ReadToEnd();
+ var result = JsonConvert.DeserializeObject<dynamic>(responseJson);
+
+ // 娣诲姞鐘舵�佺爜妫�鏌�
+ if (response.StatusCode != HttpStatusCode.OK || result.code != "SUCCESS")
+ {
+ throw new Exception($"娴佺▼鎻愪氦澶辫触锛歿result.errMsg}");
+ }
+
+ return new
+ {
+ code = result.code,
+ data = result.data,
+ errMsg = result.errMsg
+ };
}
}
}
catch (WebException ex) when (ex.Response is HttpWebResponse response)
{
- // 璁板綍璇︾粏閿欒淇℃伅
- var errorStream = response.GetResponseStream();
- using (var reader = new StreamReader(errorStream))
+ using (var stream = response.GetResponseStream())
+ using (var reader = new StreamReader(stream))
{
- string errorDetails = reader.ReadToEnd();
- throw new Exception($"璇锋眰澶辫触 [Status: {response.StatusCode}]: {errorDetails}", ex);
+ var errorDetails = reader.ReadToEnd();
+ throw new Exception($"璇锋眰澶辫触 [Status: {response.StatusCode}]: {errorDetails}");
}
}
catch (Exception ex)
{
- throw new Exception($"璇锋眰寮傚父: {ex.Message}", ex);
+ throw new Exception($"娴佺▼鎻愪氦寮傚父: {ex.Message}");
}
}
- public dynamic SumbitIQCToOA(dynamic queryObj)
+ // 鏂板鐨勬瀯寤烘柟娉�
+ private Dictionary<string, object> BuildMainDataFromQuery(dynamic query)
{
- try
+ var mainData = new Dictionary<string, object>
{
- ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;
- ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
-
- var request = WebRequest.Create(url) as HttpWebRequest;
- request.Method = "POST";
- request.Timeout = 20000; // 20绉掕秴鏃�
- request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"; // 鏄庣‘鎸囧畾缂栫爜
-
- // 娣诲姞璋冭瘯澶翠俊鎭�
- request.Headers.Add("appid", APPID);
- request.Headers.Add("token", token);
- request.Headers.Add("userId", userId);
-
- // 鏋勫缓甯︽椂鍖虹殑鏃ユ湡鍙傛暟
- var postData = new StringBuilder();
- var dateParam = DateTime.Now.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:sszzz");
- postData.AppendFormat("KQSDATE={0}&KQEDATE={1}",
- Uri.EscapeDataString(dateParam),
- Uri.EscapeDataString(dateParam));
-
- byte[] byteData = Encoding.UTF8.GetBytes(postData.ToString()); // 鏀圭敤UTF8缂栫爜
-
- // 鏇村畬鍠勭殑璇锋眰鍐欏叆
- using (var stream = request.GetRequestStream())
+ // 琛ㄧ粨鏋勫畾涔�
+ ["tableDBName"] = "formtable_main_33",
+ ["workflowRequestTableRecords"] = new List<Dictionary<string, object>>
{
- stream.Write(byteData, 0, byteData.Length);
- }
-
- // 澶勭悊HTTP閿欒鐘舵�佺爜
- using (var response = request.GetResponse() as HttpWebResponse)
- {
- if (response.StatusCode != HttpStatusCode.OK)
+ new Dictionary<string, object>
{
- throw new WebException($"鏈嶅姟鍣ㄨ繑鍥為敊璇姸鎬佺爜: {(int)response.StatusCode} {response.StatusDescription}");
- }
-
- using (var stream = response.GetResponseStream())
- using (var reader = new StreamReader(stream, Encoding.UTF8))
- {
- return reader.ReadToEnd();
+ ["recordOrder"] = 0,
+ ["workflowRequestTableFields"] = new List<Dictionary<string, object>>
+ {
+ new Dictionary<string, object> { ["fieldName"] = "wlbm", ["fieldValue"] = "1.01.01.001" },
+ new Dictionary<string, object> { ["fieldName"] = "khgys", ["fieldValue"] = "闄堥洩骞�" },
+ new Dictionary<string, object> { ["fieldName"] = "jzmcwlmc", ["fieldValue"] = "椤剁洊" },
+ new Dictionary<string, object> { ["fieldName"] = "bhgpqxms", ["fieldValue"] = "澶栬涓嶅悎鏍硷紝灏哄涓嶅悎鏍硷紝棰滆壊涓嶇鍚�" },
+ new Dictionary<string, object> { ["fieldName"] = "dhdhmes", ["fieldValue"] = "MES001" }
+ }
}
}
- }
- catch (WebException ex) when (ex.Response is HttpWebResponse response)
+ };
+
+ return mainData;
+ }
+
+ // 杈呭姪鏂规硶鐢ㄤ簬瀹夊叏娣诲姞灞炴��
+ private void TryAddProperty(Dictionary<string, object> dict, string key, object value)
+ {
+ if (value != null)
{
- // 璁板綍璇︾粏閿欒淇℃伅
- var errorStream = response.GetResponseStream();
- using (var reader = new StreamReader(errorStream))
- {
- string errorDetails = reader.ReadToEnd();
- throw new Exception($"璇锋眰澶辫触 [Status: {response.StatusCode}]: {errorDetails}", ex);
- }
- }
- catch (Exception ex)
- {
- throw new Exception($"璇锋眰寮傚父: {ex.Message}", ex);
+ dict[key] = value;
}
}
}
\ No newline at end of file
--
Gitblit v1.9.3