南骏 池
2025-04-28 955c117833da888852a2e0c239350c409cce93d5
1.OA调通
2.携客云更新appkey
已添加1个文件
已修改4个文件
263 ■■■■■ 文件已修改
Controllers/QC/OAJyController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/QC/OAJyService.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/QC/OaApi.cs 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/MesXkyService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
util/XkyApiHelper.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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)
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>
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
        {
            // è§£æžè¯·æ±‚参数
            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()
    {
        // ä»Žquery参数中获取实际业务数据
        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并正确设置Content-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();
    }
}
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";
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";
        }