From ef5240b3fdb861ce57367976ee62b1d0145ce1ac Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期二, 01 四月 2025 09:36:00 +0800
Subject: [PATCH] 1.委外调整 2.OA接口测试control

---
 service/Wom/WwGdManager.cs    |    2 
 Controllers/AuthController.cs |  328 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 329 insertions(+), 1 deletions(-)

diff --git a/Controllers/AuthController.cs b/Controllers/AuthController.cs
new file mode 100644
index 0000000..2795eda
--- /dev/null
+++ b/Controllers/AuthController.cs
@@ -0,0 +1,328 @@
+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;
+
+namespace NewPdaSqlServer.Controllers
+{
+    [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";
+
+        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-----";
+
+        [HttpGet("token")]
+        public ActionResult<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 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)
+            {
+                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"] = request.WorkflowId.ToString(),
+                    ["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}");
+            }
+        }
+    }
+
+    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瀽鏂规硶
+
+            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鏍煎紡鍏挜
+
+            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();
+
+        // 浠ヤ笅甯搁噺寤鸿鏀惧湪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 SPK = @"-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApobID/gwmD9OofMG1gEc
+E94NCMeTYUq1cam/7ADZmxHCVpF143GaHWhqDdY0TTVbcUElsQ71DzAG2j3itWlI
+JBK5fVGwCo3sPpAvUDdKMh+Uivcp7yxdy/IDRA/PS4JARuEyM4cVJLhIOU2KnSlb
+IkheeoDkDgfaxu9kKrWnozJLiYraVTVDz9PdRX7fQdP+Zu/xB9txAGw4kvOm9Hwg
+rzaSRdZEhisTJ5yyoNW/dLXtWKXA0cKhKOOIFu12TOrv/It6hl1ShTUuy79Pa51M
+9Oc2dEfVs1tluNXPWo1uFXQbBaJxdqZEJJlK7iW2uQFIao2O4XFHYThwy2+6116L
+twIDAQAB
+-----END PUBLIC KEY-----";
+
+        public string PostDataSSL(string url,
+            Dictionary<string, string> parameters,
+            Dictionary<string, string> headers)
+        {
+            var request = new HttpRequestMessage(HttpMethod.Post, url);
+
+            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
+    {
+        /// <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
diff --git a/service/Wom/WwGdManager.cs b/service/Wom/WwGdManager.cs
index 83ad617..95b7b4e 100644
--- a/service/Wom/WwGdManager.cs
+++ b/service/Wom/WwGdManager.cs
@@ -972,7 +972,7 @@
                 PbillNo = query.billNo,
                 ItemId = blDetail.Bld012,
                 Unit = blDetail.Bld009,
-                DepotId = (int)stockBarcode.DepotsId,
+                DepotId = (int)stockBarcode.DepotId,
                 EbelnK3id = womdab.Eid,
                 LineK3id = womdab.Erpid
             }).IgnoreColumns(true).ExecuteCommand();

--
Gitblit v1.9.3