From ddea1761f2f6040a3e0b5bb1f693684306f4c4d4 Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期一, 07 四月 2025 11:18:33 +0800
Subject: [PATCH] 1.产品绑定模块 2.来料检提交oa

---
 Controllers/QC/OAJyController.cs    |   39 +++++
 Dto/service/WorkflowRequestDto.cs   |   42 ++++++
 service/QC/OAJyService.cs           |  238 ++++++++++++++++++++++++++++++++++
 service/Wom/WomdaaManager.cs        |   50 +++++++
 Controllers/Wom/WomdaaController.cs |   31 ++++
 Controllers/AuthController.cs       |   10 
 6 files changed, 405 insertions(+), 5 deletions(-)

diff --git a/Controllers/AuthController.cs b/Controllers/AuthController.cs
index 2795eda..e9a308e 100644
--- a/Controllers/AuthController.cs
+++ b/Controllers/AuthController.cs
@@ -77,7 +77,7 @@
             return BadRequest("鏃犳硶鑾峰彇鏈夋晥Token");
         }
 
-        
+
 
         [HttpPost("createWorkflow")]
         public ActionResult<string> CreateWorkflowRequest([FromBody] WorkflowRequestDto request)
@@ -99,7 +99,7 @@
                 var parameters = new Dictionary<string, string>
                 {
                     ["mainData"] = JsonConvert.SerializeObject(request.MainData),
-                    ["workflowId"] = request.WorkflowId.ToString(),
+                    ["workflowId"] = "",
                     ["requestName"] = request.RequestName
                 };
 
@@ -234,7 +234,7 @@
                 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);
@@ -243,12 +243,12 @@
                 // 鏋勫缓甯︽椂鍖虹殑鏃ユ湡鍙傛暟
                 var postData = new StringBuilder();
                 var dateParam = DateTime.Now.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:sszzz");
-                postData.AppendFormat("KQSDATE={0}&KQEDATE={1}", 
+                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())
                 {
diff --git a/Controllers/QC/OAJyController.cs b/Controllers/QC/OAJyController.cs
new file mode 100644
index 0000000..ba47301
--- /dev/null
+++ b/Controllers/QC/OAJyController.cs
@@ -0,0 +1,39 @@
+锘縰sing System.Dynamic;
+using Microsoft.AspNetCore.Mvc;
+using NewPdaSqlServer.Dto.service;
+using NewPdaSqlServer.entity;
+using NewPdaSqlServer.service.QC;
+using NewPdaSqlServer.util;
+using Newtonsoft.Json.Linq;
+
+namespace NewPdaSqlServer.Controllers.QC;
+
+[Route("api/[controller]")]
+[ApiController]
+public class OAJyController : ControllerBase
+{
+    IpqcService m = new IpqcService();
+
+    [HttpPost("SumbitIQCToOA")]
+    public ResponseResult SumbitIQCToOA([FromBody] dynamic queryObj)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            //var resultInfos = m.SumbitIQCToOA(queryObj);
+            //var tbBillList =
+            //    resultInfos.tbBillList = item;
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/Controllers/Wom/WomdaaController.cs b/Controllers/Wom/WomdaaController.cs
index 8b0f2a1..3492d8d 100644
--- a/Controllers/Wom/WomdaaController.cs
+++ b/Controllers/Wom/WomdaaController.cs
@@ -236,6 +236,7 @@
             return ResponseResult.ResponseError(ex);
         }
     }
+    
 
     /// <summary>
     ///     淇敼
@@ -260,6 +261,36 @@
             return ResponseResult.ResponseError(ex);
         }
     }
+    #endregion
 
+    #region 鐜板満绠$悊
+
+    //GetItemsByDaa001
+    /// <summary>
+    ///     鎵弿娉ㄥ鐮侊紝鑾峰彇宸ュ崟鍜屾潯鐮佷俊鎭�
+    /// </summary>
+    /// <returns></returns>
+    [HttpPost("getZsBarInfo")]
+    public ResponseResult getZsBarInfo([FromBody] dynamic query)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            // 鍏堝垵濮嬪寲tbBillList灞炴��
+            resultInfos.tbBillList = new ExpandoObject();
+            resultInfos.tbBillList.ZsBarInfo = m.getZsBarInfo(query);
+            resultInfos.tbBillList.Traceability = m.getTraceability(query);
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
     #endregion
 }
\ No newline at end of file
diff --git a/Dto/service/WorkflowRequestDto.cs b/Dto/service/WorkflowRequestDto.cs
new file mode 100644
index 0000000..02e6b98
--- /dev/null
+++ b/Dto/service/WorkflowRequestDto.cs
@@ -0,0 +1,42 @@
+锘縰sing NewPdaSqlServer.Dto.@base;
+
+namespace NewPdaSqlServer.Dto.service;
+
+
+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/QC/OAJyService.cs b/service/QC/OAJyService.cs
new file mode 100644
index 0000000..605ad1f
--- /dev/null
+++ b/service/QC/OAJyService.cs
@@ -0,0 +1,238 @@
+锘縰sing MES.Service.Models;
+using Microsoft.IdentityModel.Tokens;
+using NewPdaSqlServer.Controllers;
+using NewPdaSqlServer.DB;
+using NewPdaSqlServer.Dto.service;
+using NewPdaSqlServer.entity;
+using NewPdaSqlServer.util;
+using Newtonsoft.Json;
+using SqlSugar;
+using System.Net;
+using System.Security.Cryptography;
+using System.Text;
+using static Azure.Core.HttpHeader;
+
+namespace NewPdaSqlServer.service.QC;
+
+public class OAJyService : RepositoryNoEntity
+{
+    private readonly HttpClient _client = new HttpClient();
+
+    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 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 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 headers = new Dictionary<string, string>
+        {
+            ["appid"] = APPID,
+            ["secret"] = RsaHelper.Encrypt(SECRET, SPK)
+        };
+
+        try
+        {
+            var response = 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);
+        }
+    }
+
+
+    public dynamic SumbitIQCToOA(dynamic queryObj)
+    {
+        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);
+        }
+    }
+}
\ No newline at end of file
diff --git a/service/Wom/WomdaaManager.cs b/service/Wom/WomdaaManager.cs
index 2cc6490..5e2300b 100644
--- a/service/Wom/WomdaaManager.cs
+++ b/service/Wom/WomdaaManager.cs
@@ -251,4 +251,54 @@
 
         return dto;
     }
+
+    /// <summary>
+    /// 鑾峰彇宸ュ崟鏉$爜淇℃伅
+    /// </summary>
+    /// <param name="query"></param>
+    /// <returns></returns>
+    public dynamic getZsBarInfo(dynamic query)
+    {
+
+        var sql = string.Format(@"SELECT TOP 1 A.barCode AS zsBarcode,
+             D.name AS lineName,
+             D.line_no,
+             B.daa001,
+             C.item_no,
+             C.item_name,
+             C.item_model,
+             A.quantity as barQty,
+             B.daa008 as sumQty,
+             isnull((SELECT count(1) FROM WORK_COLLECT WHERE processNo = '{0}' AND ABOUT_GUID = A.ABOUT_GUID),0) AS finQty,
+             isnull((SELECT TOP 1 processNo FROM WORK_COLLECT WHERE  WORK_COLLECT.barCode = '{1}' AND checkResult = '鈭�' ORDER BY WORK_COLLECT.createDate DESC ),'') AS lastGx
+FROM WORK_TRAC_CODE A
+         LEFT JOIN WOMDAA B ON A.ABOUT_GUID = B.guid
+         LEFT JOIN MES_ITEMS C ON B.daa002 = C.item_id
+         LEFT JOIN MES_WORKSHOP_LINE D ON A.lineId = D.id
+WHERE A.barCode = '{1}'", query.GX, query.Zsbarcode);
+
+        var ZsBarInfo = Db.Ado.SqlQuery<dynamic>(sql);
+
+        if (ZsBarInfo.Count < 1)
+        {
+            throw new Exception($"璇ヨ拷婧爜{query.Zsbarcode}涓嶅瓨鍦ㄤ笉瀛樺湪");
+        }
+
+        return ZsBarInfo;
+    }
+
+    //鑾峰彇鐢熶骇
+    public dynamic getTraceability(dynamic query)
+    {
+        var sql = string.Format(@"SELECT processNo, A.barCode, B.lineId, line_no, name AS lineName, checkResult, C.USER_NAME
+FROM WORK_COLLECT A
+         LEFT JOIN WORK_TRAC_CODE B ON A.barCode = B.barCode
+         LEFT JOIN SYS_USER C ON C.ACCOUNT = A.createBy
+         LEFT JOIN MES_WORKSHOP_LINE D ON B.lineId = D.id
+WHERE A.barCode = '{0}'", query.Zsbarcode);
+
+        var Traceability = Db.Ado.SqlQuery<dynamic>(sql);
+
+        return Traceability;
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.3