From 8b7abd97e7b69800789134ed8e809e19a5b5ba74 Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期三, 17 九月 2025 00:30:27 +0800
Subject: [PATCH] 111

---
 Controllers/AuthController.cs |  555 +++++++++++++++++++++++++++---------------------------
 1 files changed, 277 insertions(+), 278 deletions(-)

diff --git a/Controllers/AuthController.cs b/Controllers/AuthController.cs
index e9a308e..4e3c064 100644
--- a/Controllers/AuthController.cs
+++ b/Controllers/AuthController.cs
@@ -1,27 +1,24 @@
-using Microsoft.AspNetCore.Mvc;
-using System;
-using System.Collections.Generic;
-using System.Net.Http;
-using System.Security.Cryptography;
-using Newtonsoft.Json;
-using System.Text;
 using System.Net;
-using Microsoft.AspNetCore.DataProtection;
-using Microsoft.Extensions.Hosting;
+using System.Security.Cryptography;
+using System.Text;
+using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
 
-namespace NewPdaSqlServer.Controllers
+namespace NewPdaSqlServer.Controllers;
+
+[Route("api/[controller]")]
+[ApiController]
+public class AuthController : ControllerBase
 {
-    [Route("api/[controller]")]
-    [ApiController]
-    public class AuthController : ControllerBase
-    {
-        // 浠ヤ笅甯搁噺寤鸿鏀惧湪appsettings.json閰嶇疆鏂囦欢涓�
-        private const string APPID = "303233EF-AC39-40C1-8364-AC989C6258A5";
-        private const string SECRET = "30b41949-bcfb-48f8-9847-feb6e043fe72";
-        // 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";
+    // 浠ヤ笅甯搁噺寤鸿鏀惧湪appsettings.json閰嶇疆鏂囦欢涓�
+    private const string APPID = "303233EF-AC39-40C1-8364-AC989C6258A5";
 
-        private const string SPK = @"-----BEGIN PUBLIC KEY-----
+    private const string SECRET = "30b41949-bcfb-48f8-9847-feb6e043fe72";
+
+    // 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
@@ -31,135 +28,138 @@
 twIDAQAB
 -----END PUBLIC KEY-----";
 
-        [HttpGet("token")]
-        public ActionResult<string> GetToken()
+    [HttpGet("token")]
+    public ActionResult<string> GetToken()
+    {
+        var http = new HttpManager();
+        var headers = new Dictionary<string, string>
         {
-            var http = new HttpManager();
+            ["appid"] = APPID,
+            ["secret"] = RsaHelper.Encrypt(SECRET, SPK)
+        };
+
+        try
+        {
+            var response = http.PostDataSSL(
+                $"{HOST}/api/ec/dev/auth/applytoken",
+                new Dictionary<string, string>(), headers);
+
+            if (!string.IsNullOrEmpty(response))
+            {
+                var res = JsonConvert.DeserializeObject<dynamic>(response);
+                if (res.status == "true") return res.token.ToString();
+            }
+
+            return BadRequest("Failed to get token");
+        }
+        catch (Exception ex)
+        {
+            // 寤鸿浣跨敤ILogger璁板綍鏃ュ織
+            return StatusCode(500, ex.Message);
+        }
+    }
+
+
+    [HttpPost("getUserId")]
+    public ActionResult<string> GetUserId()
+    {
+        var http = new HttpManager();
+        var tokenResult = http.GetToken();
+        if (tokenResult is not null)
+        {
+            var url = new Uri($"{HOST}/api/T100/GetSecretUserId");
+            return http.GetOaKqInfo(url, tokenResult, "DQ000344");
+        }
+
+        return BadRequest("鏃犳硶鑾峰彇鏈夋晥Token");
+    }
+
+
+    [HttpPost("createWorkflow")]
+    public ActionResult<string> CreateWorkflowRequest(
+        [FromBody] WorkflowRequestDto request)
+    {
+        try
+        {
+            // 鍔犲瘑鐢ㄦ埛ID
+            var encryptedUserId = RsaHelper.Encrypt(request.UserId, SPK);
+            var token = GetToken().ToString();
+            // 璁剧疆璇锋眰澶�
             var headers = new Dictionary<string, string>
             {
+                ["token"] = token,
                 ["appid"] = APPID,
-                ["secret"] = RsaHelper.Encrypt(SECRET, SPK)
+                ["userid"] = encryptedUserId
             };
 
-            try
+            // 鏋勫缓璇锋眰鍙傛暟
+            var parameters = new Dictionary<string, string>
             {
-                var response = http.PostDataSSL($"{HOST}/api/ec/dev/auth/applytoken",
-                    new Dictionary<string, string>(), headers);
+                ["mainData"] = JsonConvert.SerializeObject(request.MainData),
+                ["workflowId"] = "",
+                ["requestName"] = request.RequestName
+            };
 
-                if (!string.IsNullOrEmpty(response))
-                {
-                    var res = JsonConvert.DeserializeObject<dynamic>(response);
-                    if (res.status == "true")
-                    {
-                        return res.token.ToString();
-                    }
-                }
-                return BadRequest("Failed to get token");
-            }
-            catch (Exception ex)
-            {
-                // 寤鸿浣跨敤ILogger璁板綍鏃ュ織
-                return StatusCode(500, ex.Message);
-            }
+            // 娣诲姞鍙�夊弬鏁�
+            if (request.DetailData != null)
+                parameters.Add("detailData",
+                    JsonConvert.SerializeObject(request.DetailData));
+
+            if (request.OtherParams != null)
+                parameters.Add("otherParams",
+                    JsonConvert.SerializeObject(request.OtherParams));
+
+            // 鍙戦�佽姹�
+            var response = new HttpManager().PostDataSSL(
+                $"{HOST}/api/workflow/paService/doCreateRequest",
+                parameters,
+                headers);
+
+            dynamic res = JsonConvert.DeserializeObject(response);
+            if (res.code == "SUCCESS")
+                return Ok(res.data.requestid.ToString());
+
+            return BadRequest($"鍒涘缓澶辫触锛歿res.errMsg}");
         }
-
-
-        [HttpPost("getUserId")]
-        public ActionResult<string> GetUserId()
+        catch (Exception ex)
         {
-            var http = new HttpManager();
-            var tokenResult = http.GetToken();
-            if (tokenResult is not null)
-            {
-                Uri url = new Uri($"{HOST}/api/T100/GetSecretUserId");
-                return http.GetOaKqInfo(url, tokenResult, "DQ000344");
-            }
-            return BadRequest("鏃犳硶鑾峰彇鏈夋晥Token");
-        }
-
-
-
-        [HttpPost("createWorkflow")]
-        public ActionResult<string> CreateWorkflowRequest([FromBody] WorkflowRequestDto request)
-        {
-            try
-            {
-                // 鍔犲瘑鐢ㄦ埛ID
-                var encryptedUserId = RsaHelper.Encrypt(request.UserId, SPK);
-                var token = GetToken().ToString();
-                // 璁剧疆璇锋眰澶�
-                var headers = new Dictionary<string, string>
-                {
-                    ["token"] = token,
-                    ["appid"] = APPID,
-                    ["userid"] = encryptedUserId
-                };
-
-                // 鏋勫缓璇锋眰鍙傛暟
-                var parameters = new Dictionary<string, string>
-                {
-                    ["mainData"] = JsonConvert.SerializeObject(request.MainData),
-                    ["workflowId"] = "",
-                    ["requestName"] = request.RequestName
-                };
-
-                // 娣诲姞鍙�夊弬鏁�
-                if (request.DetailData != null)
-                    parameters.Add("detailData", JsonConvert.SerializeObject(request.DetailData));
-
-                if (request.OtherParams != null)
-                    parameters.Add("otherParams", JsonConvert.SerializeObject(request.OtherParams));
-
-                // 鍙戦�佽姹�
-                var response = new HttpManager().PostDataSSL(
-                    $"{HOST}/api/workflow/paService/doCreateRequest",
-                    parameters,
-                    headers);
-
-                dynamic res = JsonConvert.DeserializeObject(response);
-                if (res.code == "SUCCESS")
-                    return Ok(res.data.requestid.ToString());
-
-                return BadRequest($"鍒涘缓澶辫触锛歿res.errMsg}");
-            }
-            catch (Exception ex)
-            {
-                return StatusCode(500, $"绯荤粺寮傚父锛歿ex.Message}");
-            }
+            return StatusCode(500, $"绯荤粺寮傚父锛歿ex.Message}");
         }
     }
+}
 
-    public static class RsaHelper
+public static class RsaHelper
+{
+    public static string Encrypt(string plainText, string publicKeyPem)
     {
-        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);
+        var 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);
     }
+}
 
-    public class HttpManager
-    {
-        private readonly HttpClient _client = new HttpClient();
+public class HttpManager
+{
+    // 浠ヤ笅甯搁噺寤鸿鏀惧湪appsettings.json閰嶇疆鏂囦欢涓�
+    private const string APPID = "303233EF-AC39-40C1-8364-AC989C6258A5";
 
-        // 浠ヤ笅甯搁噺寤鸿鏀惧湪appsettings.json閰嶇疆鏂囦欢涓�
-        private const string APPID = "303233EF-AC39-40C1-8364-AC989C6258A5";
-        private const string SECRET = "30b41949-bcfb-48f8-9847-feb6e043fe72";
-        // 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 SECRET = "30b41949-bcfb-48f8-9847-feb6e043fe72";
 
-        private const string SPK = @"-----BEGIN PUBLIC KEY-----
+    // 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
@@ -169,160 +169,159 @@
 twIDAQAB
 -----END PUBLIC KEY-----";
 
-        public string PostDataSSL(string url,
-            Dictionary<string, string> parameters,
-            Dictionary<string, string> headers)
-        {
-            var request = new HttpRequestMessage(HttpMethod.Post, url);
+    private readonly HttpClient _client = new();
 
-            foreach (var header in headers)
-            {
-                request.Headers.Add(header.Key, header.Value);
-            }
-
-            // 濡傛灉闇�瑕佽〃鍗曞弬鏁�
-            if (parameters.Count > 0)
-            {
-                request.Content = new FormUrlEncodedContent(parameters);
-            }
-
-            var response = _client.SendAsync(request).Result;
-            return response.Content.ReadAsStringAsync().Result;
-        }
-
-        public string GetToken()
-        {
-
-
-            var http = new HttpManager();
-            var headers = new Dictionary<string, string>
-            {
-                ["appid"] = APPID,
-                ["secret"] = RsaHelper.Encrypt(SECRET, SPK)
-            };
-
-            try
-            {
-                var response = http.PostDataSSL($"{HOST}/api/ec/dev/auth/applytoken",
-                    new Dictionary<string, string>(), headers);
-
-                if (!string.IsNullOrEmpty(response))
-                {
-                    var res = JsonConvert.DeserializeObject<dynamic>(response);
-                    if (res.status == "true")
-                    {
-                        return res.token.ToString();
-                    }
-                }
-                return "token涓嶅瓨鍦紒";
-            }
-            catch (Exception ex)
-            {
-                // 寤鸿浣跨敤ILogger璁板綍鏃ュ織
-                return ex.Message;
-            }
-        }
-
-        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);
-            }
-        }
-    }
-
-    // 鏂板DTO绫�
-    public class WorkflowRequestDto
+    public string PostDataSSL(string url,
+        Dictionary<string, string> parameters,
+        Dictionary<string, string> headers)
     {
-        /// <summary>
-        /// 鐢ㄦ埛璁よ瘉浠ょ墝
-        /// </summary>
-        public string Token { get; set; }
+        var request = new HttpRequestMessage(HttpMethod.Post, url);
 
-        /// <summary>
-        /// 鍘熷鐢ㄦ埛ID锛堝姞瀵嗗墠锛�
-        /// </summary>
-        public string UserId { get; set; }
+        foreach (var header in headers)
+            request.Headers.Add(header.Key, header.Value);
 
-        /// <summary>
-        /// 娴佺▼ID锛堝繀濉級
-        /// </summary>
-        public int WorkflowId { get; set; }
+        // 濡傛灉闇�瑕佽〃鍗曞弬鏁�
+        if (parameters.Count > 0)
+            request.Content = new FormUrlEncodedContent(parameters);
 
-        /// <summary>
-        /// 娴佺▼鏍囬锛堝繀濉級
-        /// </summary>
-        public string RequestName { get; set; }
-
-        /// <summary>
-        /// 涓昏〃鏁版嵁锛堝繀濉級
-        /// </summary>
-        public Dictionary<string, object> MainData { get; set; }
-
-        /// <summary>
-        /// 鏄庣粏琛ㄦ暟鎹紙閫夊~锛�
-        /// </summary>
-        public Dictionary<string, object> DetailData { get; set; }
-
-        /// <summary>
-        /// 鍏朵粬鍙傛暟锛堥�夊~锛�
-        /// </summary>
-        public Dictionary<string, object> OtherParams { get; set; }
+        var response = _client.SendAsync(request).Result;
+        return response.Content.ReadAsStringAsync().Result;
     }
+
+    public string GetToken()
+    {
+        var http = new HttpManager();
+        var headers = new Dictionary<string, string>
+        {
+            ["appid"] = APPID,
+            ["secret"] = RsaHelper.Encrypt(SECRET, SPK)
+        };
+
+        try
+        {
+            var response = http.PostDataSSL(
+                $"{HOST}/api/ec/dev/auth/applytoken",
+                new Dictionary<string, string>(), headers);
+
+            if (!string.IsNullOrEmpty(response))
+            {
+                var res = JsonConvert.DeserializeObject<dynamic>(response);
+                if (res.status == "true") return res.token.ToString();
+            }
+
+            return "token涓嶅瓨鍦紒";
+        }
+        catch (Exception ex)
+        {
+            // 寤鸿浣跨敤ILogger璁板綍鏃ュ織
+            return ex.Message;
+        }
+    }
+
+    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));
+
+            var 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))
+            {
+                var errorDetails = reader.ReadToEnd();
+                throw new Exception(
+                    $"璇锋眰澶辫触 [Status: {response.StatusCode}]: {errorDetails}",
+                    ex);
+            }
+        }
+        catch (Exception ex)
+        {
+            throw new Exception($"璇锋眰寮傚父: {ex.Message}", ex);
+        }
+    }
+}
+
+// 鏂板DTO绫�
+public class WorkflowRequestDto
+{
+    /// <summary>
+    ///     鐢ㄦ埛璁よ瘉浠ょ墝
+    /// </summary>
+    public string Token { get; set; }
+
+    /// <summary>
+    ///     鍘熷鐢ㄦ埛ID锛堝姞瀵嗗墠锛�
+    /// </summary>
+    public string UserId { get; set; }
+
+    /// <summary>
+    ///     娴佺▼ID锛堝繀濉級
+    /// </summary>
+    public int WorkflowId { get; set; }
+
+    /// <summary>
+    ///     娴佺▼鏍囬锛堝繀濉級
+    /// </summary>
+    public string RequestName { get; set; }
+
+    /// <summary>
+    ///     涓昏〃鏁版嵁锛堝繀濉級
+    /// </summary>
+    public Dictionary<string, object> MainData { get; set; }
+
+    /// <summary>
+    ///     鏄庣粏琛ㄦ暟鎹紙閫夊~锛�
+    /// </summary>
+    public Dictionary<string, object> DetailData { get; set; }
+
+    /// <summary>
+    ///     鍏朵粬鍙傛暟锛堥�夊~锛�
+    /// </summary>
+    public Dictionary<string, object> OtherParams { get; set; }
 }
\ No newline at end of file

--
Gitblit v1.9.3