zjh
2025-04-26 f8187896eeafc43457b81f4d08a1f0821bf51f1c
StandardPda/MES.Service/service/QC/LljService.cs
@@ -1,11 +1,15 @@
using System.Data;
using Masuit.Tools;
using Masuit.Tools;
using MES.Service.DB;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.util;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using MySqlConnector;
using Newtonsoft.Json;
using SharpCompress.Factories;
using SqlSugar;
using System.Data;
using System.Xml.Linq;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using DbType = System.Data.DbType;
@@ -13,12 +17,11 @@
public class LljService
{
    private static readonly HttpClient client = new();
    public (List<LtsLlj> item, int TotalCount) GetPage(XJPageResult queryObj)
    {
        if (queryObj.createUser.IsNullOrEmpty())
        {
            return ([], 0);
        }
        if (queryObj.createUser.IsNullOrEmpty()) return ([], 0);
        var db = SqlSugarHelper.GetInstance();
@@ -26,40 +29,59 @@
        var totalCount = 0;
        var itemIds = GetQaItem(db, queryObj.createUser);
        //var itemIds = GetQaItem(db, queryObj.createUser);
        var pageList = db.Queryable<LtsLlj, IqcBefore, SysUser, VMesQaItemsDetect01, SysUser>((a, b, c,d,e) =>
        var pageList = db
            .Queryable<LtsLlj, IqcBefore, VMesQaItemsDetect01, SysUser,
                IqcBeforeFrom, SysUser, InspectorChangeLog, SysUser>((a, b, d, e, f, g,h,i) =>
                new JoinQueryInfos(JoinType.Left, a.ItemId == b.ItemId,
                    JoinType.Left, b.Sid == c.Fid,
                    JoinType.Inner, a.Id == d.Id,
                     JoinType.Left, a.CreateBy == e.Fcode
                    JoinType.Left, a.CreateBy == e.Fcode,
                    JoinType.Left, f.Id == b.PID,
                    JoinType.Left, f.Sid == g.Fid,
                    JoinType.Left,a.ReleaseNo==h.InspectionNo && h.IsValid=="Y",
                    JoinType.Left,i.Fcode==h.Inspector
                ))
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                "未完成".Equals(queryObj.result),
                (a, b, c) => a.FcheckResu == null )
                (a, b, d) => a.FcheckResu == null)
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                !"未完成".Equals(queryObj.result),
                (a, b, c) => a.FcheckResu != null)
            .WhereIF(
                itemIds is { Length: > 0 },
                (a, b, c) => itemIds.Contains(a.ItemId))
            .WhereIF(id > 0, (a, b, c) => a.Id == id)
        //加筛选条件,根据供应商,物料编码,物料名称搜索
        //.WhereIF(queryObj.SearchValue!=null && queryObj.SearchValue!="", (a) => a.SuppName == queryObj.SearchValue|| a.ItemName == queryObj.SearchValue || a.ItemNo == queryObj.SearchValue )
            .WhereIF(queryObj.SearchValue != null && queryObj.SearchValue != "",
            (a) => (a.SuppName.ToLower().Contains(queryObj.SearchValue.ToLower())
            || a.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower())
            || a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower())))
            .OrderByDescending((a, b, c) => a.Id)
            .Select((a, b, c, d,e) => new LtsLlj
                (a, b, d) => a.FcheckResu != null)
            //.WhereIF(
            //    itemIds is { Length: > 0 },
            //    (a, b, c) => itemIds.Contains(a.ItemId))
            .WhereIF(id > 0, (a, b, d) => a.Id == id)
            .WhereIF(queryObj.createUser!="PL017"&& queryObj.UserIndex=="0", (a, b, d, e, f, g,h, i) => (g.Fcode == queryObj.createUser || i.Fcode == queryObj.createUser))//判断此单的检验员,或者检验为空就显示此单据
            //加筛选条件,根据供应商,物料编码,物料名称,项目搜索
            //.WhereIF(queryObj.SearchValue != null && queryObj.SearchValue != "",
            //(a, b, d) => (a.SuppName.ToLower().Contains(queryObj.SearchValue.ToLower())
            //|| a.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower())
            //|| a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower())
            //|| d.ProjectCodes.ToLower().Contains(queryObj.SearchValue.ToLower())
            //))
            //根据下拉框搜索条件筛选(0项目, 1物料编号, 2物料名称, 3供应商, 4采购员)
            .WhereIF(queryObj.SelectedIndex == "0" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (d.ProjectCodes.ToLower().Contains(queryObj.SearchValue.ToLower())))
            .WhereIF(queryObj.SelectedIndex == "1" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower())))
            .WhereIF(queryObj.SelectedIndex == "2" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (a.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower())))
            .WhereIF(queryObj.SelectedIndex == "3" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (a.SuppName.ToLower().Contains(queryObj.SearchValue.ToLower())))
            .WhereIF(queryObj.SelectedIndex == "4" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d, e) => (e.Fname.ToLower().Contains(queryObj.SearchValue.ToLower())))
            //.OrderByDescending((a, b, d) => a.Id)
            .Select((a, b, d, e, f, g,h,i) => new LtsLlj
            {
                UserName = c.Fname,
                FIRST=d.First,
                CreateUserName=e.Fname
                //UserName = g.Fname,
                //UserName = (i.Fname!=null ||i.Fname!="") ? i.Fname : g.Fname,
                UserName = (i.Fname!=null ||i.Fname!="") ? i.Fname : g.Fname,
                FIRST = d.First,
                CreateUserName = e.Fname,
                NewFngDesc = d.NewFngDesc,
                ProjectCodes = d.ProjectCodes
            }, true)
            .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
        return (pageList, totalCount);
    }
@@ -89,98 +111,254 @@
    //根据检验标准来计算检验个数
    public List<MesQaItemsDetectDetail5> SetItems(string itemNo,
    //public List<MesQaItemsDetectDetail5> SetItems(string itemNo,
    //    decimal quantity, string releaseNo)
    //{
    //    var db = SqlSugarHelper.GetInstance();
    //    var count = db.Queryable<MesQaIqc>().Where(s => s.EE == 1 &&
    //        s.ISENABLED == 1
    //        && s.ItemNo == itemNo && s.FTYPE == "1").Count();
    //    if (count <= 0) return [];
    //    var mesQaIqcItem = db
    //        .Queryable<MesQaIqc>().Where(s => s.EE == 1 && s.ISENABLED == 1
    //            && s.ItemNo == itemNo && s.FTYPE == "1").Select(
    //            b => new MesQaItemsDetectDetail5
    //            {
    //                ReleaseNo = releaseNo,
    //                FacLevel = b.FacLevel,
    //                FcheckItem = b.FcheckItem,
    //                FdownAllow = b.FdownAllow,
    //                FcheckLevel = b.FREQUENCY,
    //                Fstand = b.FSTAND,
    //                FupAllow = b.FupAllow,
    //                SampleSizeNo = b.SampleSizeNo,
    //                FenterQty = 0,
    //                Factory = "1000",
    //                Company = "1000",
    //                // FcheckItemDesc = "0",
    //                // FcheckResu = "0",
    //                FcheckTool = b.FcheckTool,
    //                FspecRequ = b.FspecRequ
    //                // FtextType = "0",
    //                // Funit = "0",
    //                // LastupdateBy = "0",
    //                // ProcNo = "0",
    //                // WorkshopCenterCode = "0"
    //            }).ToList();
    //    mesQaIqcItem.ForEach(item =>
    //    {
    //        var LEV = item.FcheckLevel switch
    //        {
    //            null => "" // 默认值
    //            ,
    //            { } s when s.Contains("S1") => "B.FLEVEL_S1",
    //            { } s when s.Contains("S2") => "B.FLEVEL_S2",
    //            { } s when s.Contains("S3") => "B.FLEVEL_S3",
    //            { } s when s.Contains("S4") => "B.FLEVEL_S4",
    //            { } s when s.Contains("(I)") => "B.FLEVEL_I",
    //            { } s when s.Contains("(II)") => "B.FLEVEL_II",
    //            { } s when s.Contains("(III)") => "B.FLEVEL_III",
    //            _ => ""
    //        };
    //        if (string.IsNullOrEmpty(LEV))
    //            throw new Exception(item.SampleSizeNo + "的检验水平不正确");
    //        var sql =
    //            "SELECT " + LEV +
    //            " FROM MES_QM_AQL1 A LEFT JOIN MES_QM_AQL2 B ON B.AQL1_ID=A.ID WHERE A.SAMPLE_SIZE_NO='" +
    //            item.SampleSizeNo + "' AND B.LOT_FROM<= " + quantity +
    //            "   AND " +
    //            quantity + "<=B.LOT_TO";
    //        var maxBillNo = db.Ado.SqlQuerySingle<string>(sql);
    //        if (string.IsNullOrEmpty(maxBillNo))
    //            throw new Exception(item.SampleSizeNo + "下的" + quantity +
    //                                "这个范围下没有匹配到检验项目");
    //        var result = ExtractSubstring(item.FacLevel, '(', ')');
    //        if (string.IsNullOrEmpty(result))
    //            throw new Exception(item.SampleSizeNo + "下的" + quantity +
    //                                "拒收水平不正确");
    //        sql = "SELECT FSAMPLE_SIZE_WORD, " + result +
    //              " Result FROM MES_QM_AQL1 A LEFT JOIN MES_QM_AQL3 C ON C.AQL1_ID=A.ID WHERE A.SAMPLE_SIZE_NO= '" +
    //              item.SampleSizeNo + "'  AND SAMPLE_SIZE_WORD= '" + maxBillNo +
    //              "'";
    //        var resultClass = db.Ado.SqlQuerySingle<ResultClass>(sql);
    //        item.CheckQyt = resultClass.FSAMPLE_SIZE_WORD;
    //        item.FreQty = resultClass.Result;
    //    });
    //    return mesQaIqcItem;
    //}
    /// <summary>
    /// 调用存储过程,重新获取检验项目
    /// </summary>
    /// <param name="itemNo"></param>
    /// <param name="quantity"></param>
    /// <param name="releaseNo"></param>
    /// <returns></returns>
    public string[] SetItems(string itemNo,
        decimal quantity, string releaseNo)
    {
        // 定义输出参数
        var outputResult = new SugarParameter("o_Result", null,
            DbType.Int32, ParameterDirection.Output,
            4000);
        var outputMessage = new SugarParameter("o_Msg", null,
            DbType.String,
            ParameterDirection.Output, 4000);
        // 定义输入参数
        var parameters = new List<SugarParameter>
        {
            new("P_RELEASE_NO", releaseNo,
          DbType.String, ParameterDirection.Input),
      outputResult,
      outputMessage
        };
        var db = SqlSugarHelper.GetInstance();
        // 使用 SqlSugar 执行存储过程
        db.Ado.ExecuteCommand(
            "BEGIN PRC_QA_ITEM_INSERT_BTN(:P_RELEASE_NO, :o_Result, :o_Msg); END;",
            parameters.ToArray());
        var count = db.Queryable<MesQaIqc>().Where(s => s.EE == 1 &&
            s.ISENABLED == 1
            && s.ItemNo == itemNo && s.FTYPE == "1").Count();
        // 获取输出参数的值
        var resultValue = outputResult.Value?.ToString();
        var messageValue = outputMessage.Value?.ToString();
        string[] msg = new string[2];
        msg[0] = resultValue;
        msg[1] = messageValue;
        return msg;
        if (count <= 0) return [];
        var mesQaIqcItem = db
            .Queryable<MesQaIqc>().Where(s => s.EE == 1 && s.ISENABLED == 1
                && s.ItemNo == itemNo && s.FTYPE == "1").Select(
                b => new MesQaItemsDetectDetail5
                {
                    ReleaseNo = releaseNo,
                    FacLevel = b.FacLevel,
                    FcheckItem = b.FcheckItem,
                    FdownAllow = b.FdownAllow,
                    FcheckLevel = b.FREQUENCY,
                    Fstand = b.FSTAND,
                    FupAllow = b.FupAllow,
                    SampleSizeNo = b.SampleSizeNo,
                    FenterQty = 0,
                    Factory = "1000",
                    Company = "1000",
                    // FcheckItemDesc = "0",
                    // FcheckResu = "0",
                    FcheckTool = b.FcheckTool,
                    FspecRequ = b.FspecRequ
                    // FtextType = "0",
                    // Funit = "0",
                    // LastupdateBy = "0",
                    // ProcNo = "0",
                    // WorkshopCenterCode = "0"
                }).ToList();
        mesQaIqcItem.ForEach(item =>
        {
            string LEV = item.FcheckLevel switch
            {
                null => "" // 默认值
                ,
                { } s when s.Contains("S1") => "B.FLEVEL_S1",
                { } s when s.Contains("S2") => "B.FLEVEL_S2",
                { } s when s.Contains("S3") => "B.FLEVEL_S3",
                { } s when s.Contains("S4") => "B.FLEVEL_S4",
                { } s when s.Contains("(I)") => "B.FLEVEL_I",
                { } s when s.Contains("(II)") => "B.FLEVEL_II",
                { } s when s.Contains("(III)") => "B.FLEVEL_III",
                _ => ""
            };
            if (string.IsNullOrEmpty(LEV))
                throw new Exception(item.SampleSizeNo + "的检验水平不正确");
            var sql =
                "SELECT " + LEV +
                " FROM MES_QM_AQL1 A LEFT JOIN MES_QM_AQL2 B ON B.AQL1_ID=A.ID WHERE A.SAMPLE_SIZE_NO='" +
                item.SampleSizeNo + "' AND B.LOT_FROM<= " + quantity +
                "   AND " +
                quantity + "<=B.LOT_TO";
            var maxBillNo = db.Ado.SqlQuerySingle<string>(sql);
            if (string.IsNullOrEmpty(maxBillNo))
                throw new Exception(item.SampleSizeNo + "下的" + quantity +
                                    "这个范围下没有匹配到检验项目");
            var result = ExtractSubstring(item.FacLevel, '(', ')');
            if (string.IsNullOrEmpty(result))
                throw new Exception(item.SampleSizeNo + "下的" + quantity +
                                    "拒收水平不正确");
            sql = "SELECT FSAMPLE_SIZE_WORD, " + result +
                  " Result FROM MES_QM_AQL1 A LEFT JOIN MES_QM_AQL3 C ON C.AQL1_ID=A.ID WHERE A.SAMPLE_SIZE_NO= '" +
                  item.SampleSizeNo + "'  AND SAMPLE_SIZE_WORD= '" + maxBillNo +
                  "'";
            var resultClass = db.Ado.SqlQuerySingle<ResultClass>(sql);
            item.CheckQyt = resultClass.FSAMPLE_SIZE_WORD;
            item.FreQty = resultClass.Result;
        });
        return mesQaIqcItem;
    }
    /// <summary>
    /// 保存新检验员
    /// </summary>
    /// <param name="NewStaffUserID">新检验员ID</param>
    /// <param name="userID">修改人</param>
    /// <param name="releaseNo">检验单号</param>
    /// <returns></returns>
    public string[] SaveCheckBy(string NewStaffUserID, string userID, string releaseNo)
    {
        // 定义输出参数
        var outputResult = new SugarParameter("o_Result", null,
            DbType.Int32, ParameterDirection.Output,
            4000);
        var outputMessage = new SugarParameter("o_Msg", null,
            DbType.String,
            ParameterDirection.Output, 4000);
        // 定义输入参数
        var parameters = new List<SugarParameter>
        {
            new("P_FCHECK_BY", NewStaffUserID,
          DbType.String, ParameterDirection.Input),
              new("p_Release_No", releaseNo,
          DbType.String, ParameterDirection.Input),
            new("p_User", userID,
          DbType.String, ParameterDirection.Input),
      outputResult,
      outputMessage
        };
        var db = SqlSugarHelper.GetInstance();
        // 使用 SqlSugar 执行存储过程
        db.Ado.ExecuteCommand(
            "BEGIN Prc_Mes_Iqc_Qa_Update_CheckBy(:P_FCHECK_BY,:p_Release_No,:p_User, :o_Result, :o_Msg); END;",
            parameters.ToArray());
        // 获取输出参数的值
        var resultValue = outputResult.Value?.ToString();
        var messageValue = outputMessage.Value?.ToString();
        string[] msg = new string[2];
        msg[0] = resultValue;
        msg[1] = messageValue;
        return msg;
    }
    public string[] SaveSysSubmit(SysSubmit sysSubmit)
    {
        // 定义输出参数
        var outputResult = new SugarParameter("o_Result", null,
            DbType.Int32, ParameterDirection.Output,
            4000);
        var outputMessage = new SugarParameter("o_Msg", null,
            DbType.String,
            ParameterDirection.Output, 4000);
        // 定义输入参数
        var parameters = new List<SugarParameter>
        {
            new("PI_BILLNO", sysSubmit.PI_BILLNO,
          DbType.String, ParameterDirection.Input),
             new("PI_USER", sysSubmit.PI_USER,
          DbType.String, ParameterDirection.Input),
              new("PI_SAMPLE_STATUS", sysSubmit.PI_SAMPLE_STATUS,
          DbType.String, ParameterDirection.Input),
               new("PI_SAMPLE_TYPE", sysSubmit.PI_SAMPLE_TYPE,
          DbType.String, ParameterDirection.Input),
                new("PI_SAMPLE_REASON", sysSubmit.PI_SAMPLE_REASON,
          DbType.String, ParameterDirection.Input),
                 new("PI_INSPECT_TYPE", sysSubmit.PI_INSPECT_TYPE,
          DbType.String, ParameterDirection.Input),
                  new("PI_SAMPLE_PREPARATION", sysSubmit.PI_SAMPLE_PREPARATION,
          DbType.String, ParameterDirection.Input),
                   new("PI_URGENCY", sysSubmit.PI_URGENCY,
          DbType.String, ParameterDirection.Input),
                    new("PI_FIRMWAREVERSION", sysSubmit.PI_FIRMWAREVERSION,
          DbType.String, ParameterDirection.Input),
                     new("PI_HARDWAREVERSION", sysSubmit.PI_HARDWAREVERSION,
          DbType.String, ParameterDirection.Input),
                      new("PI_REMARK", sysSubmit.PI_REMARK,
          DbType.String, ParameterDirection.Input),
            outputResult,
            outputMessage
  };
        var db = SqlSugarHelper.GetInstance();
        // 使用 SqlSugar 执行存储过程
        db.Ado.ExecuteCommand(
            "BEGIN PRC_MES_IQC_QC_SYSSUBMIT(:PI_BILLNO,:PI_USER,:PI_SAMPLE_STATUS,:PI_SAMPLE_TYPE,:PI_SAMPLE_REASON,:PI_INSPECT_TYPE,:PI_SAMPLE_PREPARATION,:PI_URGENCY,:PI_FIRMWAREVERSION,:PI_HARDWAREVERSION,:PI_REMARK, :o_Result, :o_Msg); END;",
            parameters.ToArray());
        // 获取输出参数的值
        var resultValue = outputResult.Value?.ToString();
        var messageValue = outputMessage.Value?.ToString();
        string[] msg = new string[2];
        msg[0] = resultValue;
        msg[1] = messageValue;
        return msg;
    }
    private string ExtractSubstring(string input, char startChar, char endChar)
    {
        var startIndex = input.IndexOf(startChar);
@@ -292,9 +470,19 @@
                Company = "1000",
                FenterQty = SqlFunc.AggregateCount(b.Id),
                FcheckResu = a.FcheckResu,
                FcheckItemDesc=a.FcheckItemDesc
                FcheckItemDesc = a.FcheckItemDesc
            }).ToList();
    }
    public DataTable getAllInspectors()
    {
         OracleSQLHelper SQLHelper = new();
         var sql =string.Format(@"select a.USER_NAME label,U.FCODE value from IQC_BEFORE_FROM a JOIN SYS_USER U ON U.FID=A.SID");
         return SQLHelper.ExecuteQuery(sql);
    }
    public int SetQSItemDetail(MesQaItemsDetectDetail12 detail)
    {
@@ -499,6 +687,17 @@
        return rkjDto;
    }
    public DataTable getFromInfo(string BarCode)
    {
        OracleSQLHelper SQLHelper = new();
        var sql = string.Format(@"select b.ID,b.LOT_NO,b.RELEASE_NO,b.FSUBMIT from MES_INV_ITEM_BARCODES A
                                    left join MES_QA_ITEMS_DETECT_01 B on A.BILL_NO=b.LOT_NO and A.ITEM_ID=b.ITEM_ID
                                    where ITEM_BARCODE='"+ BarCode + "'");
        return SQLHelper.ExecuteQuery(sql);
    }
    public int UpdateQSItemDetail(MesQaItemsDetectDetail12 detail)
    {
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
@@ -521,7 +720,7 @@
        return withOracle;
    }
//更新检验明细已检、不合格数量
    //更新检验明细已检、不合格数量
    private int updateDetail5(MesQaItemsDetectDetail12 detail)
    {
        var db = SqlSugarHelper.GetInstance();
@@ -552,8 +751,8 @@
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<MesQaItemsDetect01>()
                // .SetColumns(it =>
                //     it.Remarks == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
                .SetColumns(it =>
                    it.FngDesc == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
                .Where(it => it.ReleaseNo == dto.releaseNo)
                .ExecuteCommand();
        });
@@ -596,7 +795,7 @@
        return withOracle;
    }
    public bool IqcQaSubmit(LLJDto dto)
    public string[] IqcQaSubmit(LLJDto dto)
    {
        var (factory, company) = UserUtil.GetFactory(dto.userNo);
        try
@@ -635,14 +834,58 @@
            // 获取输出参数的值
            var resultValue = outputResult.Value?.ToString();
            var messageValue = outputMessage.Value?.ToString();
            if ("1".Equals(resultValue)) throw new Exception(messageValue);
            return true;
            string[] msg = new string[2];
            msg[0] = resultValue;
            msg[1] = messageValue;
            return msg;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    /// <summary>
    ///     从U9获取料号图纸列表
    /// </summary>
    /// <param name="Type">u9No:u9物料编号</param>
    /// <param name="U9No">type:1:图纸规格书  2:进料检验文件 </param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    public async Task<string[]> GetFileUrlByU9List(string Type, string U9No)
    {
        try
        {
            var requestUrl =
                $"https://erp.dream-maker.com/api/public/getFileUrlByU9No?u9No={Uri.EscapeDataString(U9No)}&type={Type}";
            var response = await client.GetAsync(requestUrl);
            response.EnsureSuccessStatusCode(); // 检查HTTP状态码
            var responseContent = await response.Content.ReadAsStringAsync();
            var result =
                JsonConvert.DeserializeObject<ApiResponse>(responseContent);
            if (result.Status == 0 && result.Data != null) return result.Data;
            return null;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    /// <summary>
    ///     料号图纸接口返回对象
    /// </summary>
    public class ApiResponse
    {
        [JsonProperty("status")] public int Status { get; set; }
        [JsonProperty("message")] public string Message { get; set; }
        [JsonProperty("data")] public string[] Data { get; set; }
        [JsonProperty("totalCount")] public int TotalCount { get; set; }
    }
}