From d80e42ce10d5ef5aefa9abe437e41a8dac9192f5 Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期一, 21 四月 2025 17:15:42 +0800
Subject: [PATCH] 1.MES->OA已通,报错“单点登录失败”

---
 service/QC/OAJyService.cs |  216 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 151 insertions(+), 65 deletions(-)

diff --git a/service/QC/OAJyService.cs b/service/QC/OAJyService.cs
index 7c75f09..d04132e 100644
--- a/service/QC/OAJyService.cs
+++ b/service/QC/OAJyService.cs
@@ -109,71 +109,7 @@
     }
 
 
-    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 SumbitIQCToOA(dynamic queryObj)
+    //public string GetOaKqInfo(Uri url, string token, string userId)
     //{
     //    try
     //    {
@@ -235,4 +171,154 @@
     //        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 = "FRadmin";
+            var encryptedUserId = RsaHelper.Encrypt(userId, SPK);
+            string strToken = GetToken();
+    
+            // 鏋勫缓鏈夋晥娴嬭瘯鏁版嵁
+             mainDataDict = new Dictionary<string, object>
+            {
+                ["KQSDATE"] = DateTime.Now.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:sszzz"),
+                ["KQEDATE"] = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz")
+            };
+    
+            // 璋冪敤鏂规硶澧炲姞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;
+            request.ContentType = "application/json; charset=utf-8";  // 淇敼涓篔SON鏍煎紡
+
+            // 鏋勫缓璇锋眰澶�
+            request.Headers.Add("appid", APPID);
+            request.Headers.Add("token", token);
+            request.Headers.Add("Content-Type", APPID);
+            request.Headers.Add("userId", encryptedUserId);
+            // 鍋囪闇�瑕佸姞瀵嗙殑userid浠庡叾浠栧湴鏂硅幏鍙栵紝杩欓噷闇�瑕佽ˉ鍏呰幏鍙栭�昏緫
+
+            // 鏋勫缓璇锋眰浣�
+            var requestBody = new Dictionary<string, object>
+            {
+                //["userId"] = "1268",
+                ["workflowId"] = workflowId,
+                ["mainData"] = mainData,
+                ["detailData"] = detailData ?? new Dictionary<string, object>(),
+                ["otherParams"] = otherParams ?? new Dictionary<string, object>(),
+                ["remark"] = remark,
+                ["requestLevel"] = requestLevel,
+                ["requestName"] = requestName
+            };
+
+            // 搴忓垪鍖栬姹備綋
+            var jsonBody = JsonConvert.SerializeObject(requestBody);
+            byte[] byteData = Encoding.UTF8.GetBytes(jsonBody);
+
+            // 鍙戦�佽姹�
+            using (var stream = request.GetRequestStream())
+            {
+                stream.Write(byteData, 0, byteData.Length);
+            }
+
+            // 澶勭悊鍝嶅簲
+            using (var response = request.GetResponse() as HttpWebResponse)
+            {
+                using (var stream = response.GetResponseStream())
+                using (var reader = new StreamReader(stream, Encoding.UTF8))
+                {
+                    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)
+        {
+            using (var stream = response.GetResponseStream())
+            using (var reader = new StreamReader(stream))
+            {
+                var errorDetails = reader.ReadToEnd();
+                throw new Exception($"璇锋眰澶辫触 [Status: {response.StatusCode}]: {errorDetails}");
+            }
+        }
+        catch (Exception ex)
+        {
+            throw new Exception($"娴佺▼鎻愪氦寮傚父: {ex.Message}");
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3