南骏 池
2025-05-20 8a20e14ad405620bbbb8e857959941692bdc17a8
1.OA->MES接口开发
2.MES->OA字段优化
已添加2个文件
已修改2个文件
215 ■■■■■ 文件已修改
Controllers/QC/OaToMesController.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Dto/service/OaToMesQuery.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/QC/OaApi.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/MesOaToMesManager.cs 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/QC/OaToMesController.cs
@@ -3,6 +3,7 @@
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.service.QC;
using NewPdaSqlServer.service.Warehouse;
using NewPdaSqlServer.util;
using Newtonsoft.Json.Linq;
@@ -12,18 +13,19 @@
[ApiController]
public class OaToMesController : ControllerBase
{
    OaApiService m = new OaApiService();
    MesOaToMesManager m = new MesOaToMesManager();
    [HttpPost("ApproveIqcEx")]
    public ResponseResult ApproveIqc(dynamic queryObj)
    public ResponseResult ApproveIqcEx(OaToMesQuery queryObj)
    {
        try
        {
            string rtnMsg = m.ApproveIqcEx(queryObj);
            return new ResponseResult
            {
                status = 0,
                message = "异常处置单审批接口开发中",
                data = ""
                message = rtnMsg,
                data = null
            };
        }
        catch (Exception ex)
@@ -34,14 +36,15 @@
    [HttpPost("RetrunIqcEx")]
    public ResponseResult APVMes_QC_Exceptional(dynamic queryObj)
    public ResponseResult RetrunIqcEx(OaToMesRQuery queryObj)
    {
        try
        {
            string rtnMsg = m.RetrunIqcEx(queryObj);
            return new ResponseResult
            {
                status = 0,
                message = "异常处置单退回接口开发中",
                message = rtnMsg,
                data = ""
            };
        }
Dto/service/OaToMesQuery.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace NewPdaSqlServer.Dto.service
{
    public class OaToMesQuery
    {
        [Required(ErrorMessage = "异常单号不能为空")]
        [StringLength(100, ErrorMessage = "异常单号长度不能超过100个字符")]
        public string iqcExNo { get; set; }
        [Required(ErrorMessage = "检验数据不能为空")]
        [MinLength(1, ErrorMessage = "至少需要1条检验数据")]
        public List<IQCDataItem> dataJson { get; set; }
        public string requestId { get; set; }
    }
    public class IQCDataItem
    {
        [Required(ErrorMessage = "检验单号不能为空")]
        [StringLength(100, ErrorMessage = "检验单号长度不能超过100个字符")]
        public string jyd { get; set; }
        [Required(ErrorMessage = "选别类别不能为空")]
        [StringLength(100, ErrorMessage = "选别类别长度不能超过100个字符")]
        public string xblb { get; set; }
        [Required(ErrorMessage = "处理意见不能为空")]
        // [RegularExpression("退料补料|特采", ErrorMessage = "处理意见只能是'退料补料'或'特采'")]
        public string clyj { get; set; }
        [Required(ErrorMessage = "接收数量不能为空")]
        [Range(0, int.MaxValue, ErrorMessage = "接收数量必须大于等于0")]
        public int jssl { get; set; } // ä¿®æ”¹ä¸ºæ•°å€¼ç±»åž‹
    }
    public class OaToMesRQuery
    {
        [Required(ErrorMessage = "异常单号不能为空")]
        [StringLength(100, ErrorMessage = "异常单号长度不能超过100个字符")]
        public string iqcExNo { get; set; }
        public string requestId { get; set; }
    }
}
service/QC/OaApi.cs
@@ -187,6 +187,7 @@
        // ä½¿ç”¨å‚数化查询防止SQL注入
        const string mainSql = @"
SELECT TOP 1 
    A.fBillNo AS ycczdh,
    C.item_no   AS wlbm,
    C.item_name AS jzmcwlmc,
    D.supp_name AS khgys,
@@ -212,6 +213,7 @@
        // å­—段映射配置(字段名 -> æ•°æ®åº“列名)
        var fieldMappings = new Dictionary<string, (string Field, string Default)>
        {
            ["ycczdh"] = ("ycczdh", "N/A"),
            ["wlbm"] = ("wlbm", "N/A"),
            ["khgys"] = ("khgys", "N/A"),
            ["jzmcwlmc"] = ("jzmcwlmc", "N/A"),
service/Warehouse/MesOaToMesManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,150 @@
using System.Data;
using System.Data.SqlClient;
using Masuit.Tools;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.entity.Base;
using SqlSugar;
namespace NewPdaSqlServer.service.Warehouse;
public class MesOaToMesManager : Repository<OaToMesQuery>
{
    public string ApproveIqcEx(OaToMesQuery query)
    {
        var _strMsg = "";
        var _intSum = 0;
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            // å‚数校验增强
            if (query.iqcExNo.IsNullOrEmpty()) throw new Exception("异常单号不允许为空");
            if (query.dataJson == null || !query.dataJson.Any()) throw new Exception("检验数据不能为空");
            using (var cmd = new SqlCommand("[iqc_ycd_oa_mes]", conn))
            {
                try
                {
                    conn.Open();
                    //// æ ¡éªŒMES检验单
                    //var checkSql = @"SELECT B.releaseNo AS jydNo
                    //               FROM Mes_QC_Exceptional_Detail B
                    //               LEFT JOIN Mes_QC_Exceptional A ON A.guid = B.pGuid
                    //               WHERE A.fBillNo = @iqcExNo";
                    //using (var checkCmd = new SqlCommand(checkSql, conn))
                    //{
                    //    checkCmd.Parameters.AddWithValue("@iqcExNo", query.iqcExNo);
                    //    var dbJydList = new List<string>();
                    //    using (var reader = checkCmd.ExecuteReader())
                    //    {
                    //        while (reader.Read())
                    //        {
                    //            dbJydList.Add(reader["jydNo"].ToString());
                    //        }
                    //    }
                    //    // éªŒè¯æ•°æ®ä¸€è‡´æ€§
                    //    var inputJydList = query.dataJson.Select(d => d.jyd).ToList();
                    //    var diff = inputJydList.Except(dbJydList).Union(dbJydList.Except(inputJydList));
                    //    if (diff.Any())
                    //    {
                    //        throw new Exception($"传入异常处置单对应的检验单号与MES不匹配,差异单号:{string.Join(",", diff)}");
                    //    }
                    //}
                    // å¾ªçŽ¯å¤„ç†æ¯æ¡æ•°æ®
                    foreach (var item in query.dataJson)
                    {
                        cmd.Parameters.Clear();
                        cmd.CommandType = CommandType.StoredProcedure;
                        SqlParameter[] parameters =
                        {
                            new SqlParameter("@outMsg", SqlDbType.NVarChar, 150) { Direction = ParameterDirection.Output },
                            new SqlParameter("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output },
                            new SqlParameter("@ycdNo", query.iqcExNo),
                            new SqlParameter("@jydNo", item.jyd),
                            new SqlParameter("@xblb", item.xblb),
                            new SqlParameter("@clyj", item.clyj),
                            new SqlParameter("@jssl", item.jssl),
                            new SqlParameter("@inFieldValue", 1)
                        };
                        cmd.Parameters.AddRange(parameters);
                        cmd.ExecuteNonQuery();
                        _intSum += (int)parameters[1].Value;
                        if ((int)parameters[1].Value <= 0)
                        {
                            throw new Exception(parameters[0].Value.ToString());
                        }
                    }
                    string rtnMsg = $"{query.iqcExNo}审批推送MES成功!";
                    return rtnMsg;
                }
                catch (Exception ex)
                {
                    // å¢žå¼ºå¼‚常日志
                    _strMsg = $"异常处置失败:{ex.Message}";
                    throw new Exception(_strMsg);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    public string RetrunIqcEx(OaToMesRQuery query)
    {
        var _strMsg = "";
        var _intSum = 0;
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            // å‚数校验增强
            if (query.iqcExNo.IsNullOrEmpty()) throw new Exception("异常单号不允许为空");
            using (var cmd = new SqlCommand("[iqc_ycd_oa_mes]", conn))
            {
                try
                {
                    conn.Open();
                    int inFieldValue = 0;
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new SqlParameter("@outMsg", SqlDbType.NVarChar, 150) { Direction = ParameterDirection.Output },
                        new SqlParameter("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output },
                        new SqlParameter("@ycdNo", query.iqcExNo),
                        new SqlParameter("@jydNo", DBNull.Value),
                        new SqlParameter("@xblb", DBNull.Value),
                        new SqlParameter("@clyj", DBNull.Value),
                        new SqlParameter("@jssl", DBNull.Value),
                        new SqlParameter("@inFieldValue", inFieldValue)
                    };
                    cmd.Parameters.AddRange(parameters);
                    cmd.ExecuteNonQuery();
                    _intSum = (int)parameters[1].Value;
                    if (_intSum <= 0)
                    {
                        throw new Exception(parameters[0].Value.ToString());
                    }
                    return $"{query.iqcExNo}退回操作成功!影响记录数:{_intSum}";
                }
                catch (Exception ex)
                {
                    _strMsg = $"异常单退回失败:{ex.Message}";
                    throw new Exception(_strMsg);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
}