From 955c117833da888852a2e0c239350c409cce93d5 Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期一, 28 四月 2025 08:50:58 +0800
Subject: [PATCH] 1.OA调通 2.携客云更新appkey
---
Controllers/QC/OAJyController.cs | 2
service/QC/OAJyService.cs | 12 +-
service/QC/OaApi.cs | 239 +++++++++++++++++++++++++++++++++++++++++++++++
util/XkyApiHelper.cs | 8
service/Warehouse/MesXkyService.cs | 2
5 files changed, 252 insertions(+), 11 deletions(-)
diff --git a/Controllers/QC/OAJyController.cs b/Controllers/QC/OAJyController.cs
index 64f03ca..44228f0 100644
--- a/Controllers/QC/OAJyController.cs
+++ b/Controllers/QC/OAJyController.cs
@@ -12,7 +12,7 @@
[ApiController]
public class OAJyController : ControllerBase
{
- OAJyService m = new OAJyService();
+ OaApiService m = new OaApiService();
[HttpPost("SumbitIQCToOA")]
public ResponseResult SumbitIQCToOA([FromBody] dynamic queryObj)
diff --git a/service/QC/OAJyService.cs b/service/QC/OAJyService.cs
index a5191af..c7fb134 100644
--- a/service/QC/OAJyService.cs
+++ b/service/QC/OAJyService.cs
@@ -90,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
@@ -213,7 +215,7 @@
string strToken = GetToken();
- // 鏇挎崲鍘熸湁鐨勬祴璇曟暟鎹瀯寤�
+ // 鏇挎崲鍘熸湁鐨勬祴mainDataDict璇曟暟鎹瀯寤�
mainDataDict = BuildMainDataFromQuery(query);
@@ -339,7 +341,7 @@
var mainData = new Dictionary<string, object>
{
// 琛ㄧ粨鏋勫畾涔�
- ["tableDBName"] = "formtable_main_1356_dt1",
+ ["tableDBName"] = "formtable_main_33",
["workflowRequestTableRecords"] = new List<Dictionary<string, object>>
{
new Dictionary<string, object>
diff --git a/service/QC/OaApi.cs b/service/QC/OaApi.cs
new file mode 100644
index 0000000..ef93298
--- /dev/null
+++ b/service/QC/OaApi.cs
@@ -0,0 +1,239 @@
+锘�// OaApiService.cs
+using System;
+using System.Collections.Generic;
+using System.Dynamic;
+using System.IO;
+using System.Net.Http;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Org.BouncyCastle.Crypto.Parameters;
+using Org.BouncyCastle.Security;
+
+public class OaApiService : IDisposable
+{
+ 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";
+
+ public OaApiService()
+ {
+ _httpClient = new HttpClient();
+ _httpClient.Timeout = TimeSpan.FromSeconds(30);
+ }
+
+ public async Task<dynamic> SubmitIQCToOA(dynamic queryObj)
+ {
+ try
+ {
+ // 瑙f瀽璇锋眰鍙傛暟
+ var query = queryObj;
+ //var query = JObject.FromObject(queryObj);
+
+ // 1. 娉ㄥ唽鑾峰彇鍑瘉
+ var registResult = await GetRegistAsync();
+ var secret = registResult["secrit"].ToString();
+ var spk = registResult["spk"].ToString();
+
+ // 2. 鑾峰彇璁块棶浠ょ墝
+ var tokenResult = await ApplyTokenAsync(secret, spk);
+ var token = tokenResult["token"].ToString();
+
+ // 3. 鍑嗗璇锋眰澶达紙绉婚櫎Content-Type璁剧疆锛�
+ _httpClient.DefaultRequestHeaders.Clear();
+ _httpClient.DefaultRequestHeaders.Add("token", token);
+ _httpClient.DefaultRequestHeaders.Add("appid", AppId);
+ _httpClient.DefaultRequestHeaders.Add("userid", RSAEncrypt("1268", spk));
+
+ // 4. 鏋勫缓璇锋眰浣�
+ var requestData = BuildRequestData();
+
+ // 5. 鍙戦�佽姹�
+ var response = await PostFormAsync(WorkflowUrl, requestData);
+ return JObject.Parse(response);
+ }
+ catch (Exception ex)
+ {
+ dynamic error = new ExpandoObject();
+ error.Error = true;
+ error.Message = ex.Message;
+ return error;
+ }
+ }
+
+ private Dictionary<string, object> BuildRequestData()
+ {
+ // 浠巕uery鍙傛暟涓幏鍙栧疄闄呬笟鍔℃暟鎹�
+ return new Dictionary<string, object>
+ {
+ {"mainData", BuildMainData()},
+ {"requestName", $"IQC娴佺▼-{DateTime.Now:yyyyMMddHHmmss}"},
+ {"workflowId", "379"},
+ //{"otherParams", BuildOtherParams()},
+ //{"detailData", BuildDetailData(query)}
+ };
+ }
+
+ private JArray BuildMainData()
+ {
+ // 绀轰緥瀛楁锛屾牴鎹疄闄呬笟鍔¢渶姹傝皟鏁�
+ return new JArray
+ {
+ new JObject
+ {
+ ["fieldName"] = "wlbm",
+ ["fieldValue"] = "1.01.01.001"
+ },
+ new JObject
+ {
+ ["fieldName"] = "khgys",
+ ["fieldValue"] = "闄堥洩骞�"
+ },
+ new JObject
+ {
+ ["fieldName"] = "bhgpqxms",
+ ["fieldValue"] = "澶栬涓嶅悎鏍硷紝灏哄涓嶅悎鏍硷紝棰滆壊涓嶇鍚�"
+ },
+ new JObject
+ {
+ ["fieldName"] = "dhdhmes",
+ ["fieldValue"] = "MES001"
+ }
+ };
+ }
+
+ private JArray BuildAttachments(JToken attachments)
+ {
+ 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(JObject query)
+ {
+ // 绀轰緥鏄庣粏鏁版嵁锛屾牴鎹疄闄呬笟鍔¤皟鏁�
+ return new JArray
+ {
+ new JObject
+ {
+ ["tableDBName"] = "formtable_main_24_dt1",
+ ["workflowRequestTableRecords"] = new JArray
+ {
+ new JObject
+ {
+ ["recordOrder"] = "0",
+ ["workflowRequestTableFields"] = new JArray
+ {
+ new JObject { ["fieldName"] = "xm", ["fieldValue"] = query["inspector"] ?? "榛樿妫�楠屽憳" },
+ new JObject { ["fieldName"] = "bh", ["fieldValue"] = query["batchNo"] ?? "榛樿鎵规鍙�" },
+ new JObject { ["fieldName"] = "dz", ["fieldValue"] = query["location"] ?? "榛樿鍦扮偣" }
+ }
+ }
+ }
+ }
+ };
+ }
+
+ private JObject BuildOtherParams()
+ {
+ return new JObject
+ {
+ ["isnextflow"] = "1",
+ ["delReqFlowFaild"] = "1"
+ };
+ }
+
+ private async Task<JObject> GetRegistAsync()
+ {
+ using var rsa = new RSACryptoServiceProvider(2048);
+ var cpk = Convert.ToBase64String(rsa.ExportRSAPublicKey());
+
+ _httpClient.DefaultRequestHeaders.Clear();
+ _httpClient.DefaultRequestHeaders.Add("appid", AppId);
+ _httpClient.DefaultRequestHeaders.Add("cpk", cpk);
+
+ var response = await _httpClient.PostAsync(BaseUrl + "regist", null);
+ return JObject.Parse(await response.Content.ReadAsStringAsync());
+ }
+
+ private async Task<JObject> ApplyTokenAsync(string secret, string spk)
+ {
+ _httpClient.DefaultRequestHeaders.Clear();
+ _httpClient.DefaultRequestHeaders.Add("appid", AppId);
+ _httpClient.DefaultRequestHeaders.Add("secret", RSAEncrypt(secret, spk));
+
+ var response = await _httpClient.PostAsync(BaseUrl + "applytoken", null);
+ return JObject.Parse(await response.Content.ReadAsStringAsync());
+ }
+
+ private string RSAEncrypt(string data, string publicKey)
+ {
+ //using var rsa = new RSACryptoServiceProvider();
+ //rsa.ImportRSAPublicKey(Convert.FromBase64String(publicKey), out _);
+
+ //var dataBytes = Encoding.UTF8.GetBytes(data);
+ //var encrypted = rsa.Encrypt(dataBytes, RSAEncryptionPadding.Pkcs1);
+ //return Convert.ToBase64String(encrypted);
+ 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);
+ byte[] encryptedData = rsa.Encrypt(Encoding.Default.GetBytes(data), false);
+ encryptedContent = Convert.ToBase64String(encryptedData);
+ }
+ return encryptedContent;
+ }
+
+ private async Task<string> PostFormAsync(string url, Dictionary<string, object> data)
+ {
+ // 鏀圭敤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()));
+ }
+
+ var content = new FormUrlEncodedContent(formData);
+ content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");
+
+ var response = await _httpClient.PostAsync(url, content);
+ var responseString = await response.Content.ReadAsStringAsync();
+
+ // 娣诲姞鍝嶅簲鍏冩暟鎹�
+ var responseInfo = new JObject
+ {
+ ["StatusCode"] = (int)response.StatusCode,
+ ["ReasonPhrase"] = response.ReasonPhrase,
+ ["Headers"] = JToken.FromObject(response.Headers),
+ ["Content"] = responseString
+ };
+
+ // 璋冭瘯杈撳嚭瀹屾暣鍝嶅簲淇℃伅
+ Console.WriteLine($"瀹屾暣鍝嶅簲锛歕n{responseInfo.ToString(Formatting.Indented)}");
+
+ return responseInfo.ToString();
+ }
+
+ public void Dispose()
+ {
+ _httpClient?.Dispose();
+ }
+}
\ No newline at end of file
diff --git a/service/Warehouse/MesXkyService.cs b/service/Warehouse/MesXkyService.cs
index 5e75066..92ad9ee 100644
--- a/service/Warehouse/MesXkyService.cs
+++ b/service/Warehouse/MesXkyService.cs
@@ -26,7 +26,7 @@
ApiCommonParam Apiparam = ApiCommonParam.NewApiCommon();
try
{
- string data_inserted = "";
+ string data_inserted = "{\r\n \"startDate\": 1745260800000,\r\n \"endDate\": 1745261100000,\r\n \"erpCode\": \"GXF001\"\r\n}";
ArrayList SQLStringList = new ArrayList();
// var client = new HttpClient();
var url = "https://openapi.xiekeyun.com/delivery/getNoList.json";
diff --git a/util/XkyApiHelper.cs b/util/XkyApiHelper.cs
index 5350fcd..1cfa324 100644
--- a/util/XkyApiHelper.cs
+++ b/util/XkyApiHelper.cs
@@ -16,10 +16,10 @@
//this.operateCompanyCode = "鍙橀噺_operateCompanyCode";
//this.ownerCompanyCode = "鍙橀噺_ownerCompanyCode";
//this.appSecret = "鍙橀噺_appSecret";
- this.appKey = "86d3ae868978beff0d39948c420ec4ff";
- this.operateCompanyCode = "52265397";
- this.ownerCompanyCode = "52265397";
- this.appSecret = "978f5b950aefc3c1e0d4a56a562b0f8c";
+ this.appKey = "5f0f8dadc4edc70197a73f7ef506aa9b";
+ this.operateCompanyCode = "85621331";
+ this.ownerCompanyCode = "85621331";
+ this.appSecret = "fa7c117c02fd4967849a612963c034ca";
this.version = "1.0";
}
--
Gitblit v1.9.3