南骏 池
2025-04-07 ddea1761f2f6040a3e0b5bb1f693684306f4c4d4
1.产品绑定模块
2.来料检提交oa
已添加3个文件
已修改3个文件
410 ■■■■■ 文件已修改
Controllers/AuthController.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/QC/OAJyController.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Wom/WomdaaController.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Dto/service/WorkflowRequestDto.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/QC/OAJyService.cs 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Wom/WomdaaManager.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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())
                {
Controllers/QC/OAJyController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
using 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);
        }
    }
}
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
}
Dto/service/WorkflowRequestDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
using 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; }
}
service/QC/OAJyService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,238 @@
using 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)
        {
            // å°†PEM格式的公钥转换为XML格式
            var rsa = RSA.Create();
            rsa.ImportFromPem(publicKeyPem);  // ä½¿ç”¨.NET 5+ å†…ç½®PEM解析方法
            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);
        }
    }
}
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;
    }
}