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