zyf
2024-11-26 2276feb4375d99c0424091bb32c1d5d92b67d41b
MES.Service/service/QC/LljService.cs
@@ -1,74 +1,80 @@
using MES.Service.DB;
using System.Data;
using MES.Service.DB;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
using DbType = System.Data.DbType;
namespace MES.Service.service.QC;
public class LljService
{
    public List<LtsLlj> GetPage(XJPageResult queryObj)
    public (List<LtsLlj> item, int TotalCount) GetPage(XJPageResult queryObj)
    {
        var db = SqlSugarHelper.GetInstance();
        var id = Convert.ToDecimal(queryObj.id);
       return db.Queryable<LtsLlj>()
           .WhereIF(
               StringUtil.IsNotNullOrEmpty(queryObj.result) &&
               "未完成".Equals(queryObj.result),
               (a) =>a.FcheckResu == null)
           .WhereIF(
               StringUtil.IsNotNullOrEmpty(queryObj.result) &&
               !"未完成".Equals(queryObj.result),
               (a) => a.FcheckResu != null)
           .WhereIF(id > 0, (a) => a.Id == id)
            .ToPageList(queryObj.PageIndex, queryObj.Limit);
        var totalCount = 0;
        var pageList = db.Queryable<LtsLlj>()
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                "未完成".Equals(queryObj.result),
                a => a.FcheckResu == null)
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                !"未完成".Equals(queryObj.result),
                a => a.FcheckResu != null)
            .WhereIF(id > 0, a => a.Id == id)
            .OrderByDescending(a => a.Id)
            .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
        return (pageList, totalCount);
    }
  //根据检验标准来计算检验个数
    public List<MesQaItemsDetectDetail5> SetItems(string itemNo, decimal quantity,string releaseNo)
    //根据检验标准来计算检验个数
    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();
        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(
                && 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 ,
                    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",
                    Factory = "1000",
                    Company = "1000",
                   // FcheckItemDesc = "0",
                   // FcheckResu = "0",
                    FcheckTool =  b.FcheckTool,
                    FspecRequ = b.FspecRequ,
                   // FtextType = "0",
                   // Funit = "0",
                   // LastupdateBy = "0",
                   // ProcNo = "0",
                   // WorkshopCenterCode = "0"
                    // FcheckItemDesc = "0",
                    // FcheckResu = "0",
                    FcheckTool = b.FcheckTool,
                    FspecRequ = b.FspecRequ
                    // FtextType = "0",
                    // Funit = "0",
                    // LastupdateBy = "0",
                    // ProcNo = "0",
                    // WorkshopCenterCode = "0"
                }).ToList();
        mesQaIqcItem.ForEach(item =>
@@ -76,25 +82,28 @@
            string LEV = null;
            switch (item.FcheckLevel)
            {
                case string s when s.Contains("S1"):
                case null:
                    LEV = ""; // 默认值
                    break;
                case { } s when s.Contains("S1"):
                    LEV = "B.FLEVEL_S1";
                    break;
                case string s when s.Contains("S2"):
                case { } s when s.Contains("S2"):
                    LEV = "B.FLEVEL_S2";
                    break;
                case string s when s.Contains("S3"):
                case { } s when s.Contains("S3"):
                    LEV = "B.FLEVEL_S3";
                    break;
                case string s when s.Contains("S4"):
                case { } s when s.Contains("S4"):
                    LEV = "B.FLEVEL_S4";
                    break;
                case string s when s.Contains("(I)"):
                case { } s when s.Contains("(I)"):
                    LEV = "B.FLEVEL_I";
                    break;
                case string s when s.Contains("(II)"):
                case { } s when s.Contains("(II)"):
                    LEV = "B.FLEVEL_II";
                    break;
                case string s when s.Contains("(III)"):
                case { } s when s.Contains("(III)"):
                    LEV = "B.FLEVEL_III";
                    break;
                default:
@@ -102,21 +111,32 @@
                    break;
            }
            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 " +
                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 + "'";
                  item.SampleSizeNo + "'  AND SAMPLE_SIZE_WORD= '" + maxBillNo +
                  "'";
            var resultClass = db.Ado.SqlQuerySingle<ResultClass>(sql);
            item.CheckQyt = resultClass.FSAMPLE_SIZE_WORD;
@@ -140,6 +160,7 @@
        var length = endIndex - startIndex - 1;
        return input.Substring(startIndex + 1, length);
    }
    public int saveItem(LLJDto rkjDto)
    {
        var items = rkjDto.items;
@@ -153,34 +174,30 @@
        });
        rkjDto.items = GetItems(rkjDto.releaseNo, null);
        var db = SqlSugarHelper.GetInstance();
        rkjDto.items.ForEach(s =>
        {
            if (s.FupAllow != null  || s.Fstand != null  ||
                s.FdownAllow != null  ) return;
            if (s.FupAllow != null || s.Fstand != null ||
                s.FdownAllow != null) return;
            // 没有录入参考值,判断有多少个NG,那么录入的抽检结果必须是OK或者NG,NG代表不合格
            var ifck = db.Queryable<MesQaItemsDetectDetail12>()
                .Where(x => x.FcheckResu == "NG" && x.MainId == s.Id).Count();
            //检验明细总数
            var count = db.Queryable<MesQaItemsDetectDetail12>().Where(x1 => x1.MainId == s.Id).Count();
            var count = db.Queryable<MesQaItemsDetectDetail12>()
                .Where(x1 => x1.MainId == s.Id).Count();
            if (ifck > s.FreQty && s.CheckQyt == count)
            {
                s.FcheckResu = "不合格";
            }else if (ifck < s.FreQty && s.CheckQyt == count)
            {
            else if (ifck < s.FreQty && s.CheckQyt == count)
                s.FcheckResu = "合格";
            }
            else
            {
                s.FcheckResu = "未完成";
            }
            var detail = new MesQaItemsDetectDetail12();
            detail.MainId = s.Id;
            detail.ReleaseNo = rkjDto.releaseNo;
@@ -193,54 +210,55 @@
        return Convert.ToInt32(rkjDto.gid);
    }
    public List<MesQaItemsDetectDetail5> GetItems(string? releaseNo, decimal? id)
    public List<MesQaItemsDetectDetail5> GetItems(string? releaseNo,
        decimal? id)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<MesQaItemsDetectDetail5, MesQaItemsDetectDetail12>((a, b) =>
                new JoinQueryInfos(JoinType.Left, a.Id == b.MainId))
        return db.Queryable<MesQaItemsDetectDetail5, MesQaItemsDetectDetail12>(
                (a, b) =>
                    new JoinQueryInfos(JoinType.Left, a.Id == b.MainId))
            .Where((a, b) => a.ReleaseNo == releaseNo)
           // .WhereIF(id > 0, (a, b) => a.Id == id)
            // .WhereIF(id > 0, (a, b) => a.Id == id)
            .GroupBy((a, b) => new
            {
                a.Id,
                a.ReleaseNo,
                a.FacLevel,
                a.FcheckItem ,
                 a.FcheckTool ,
                 a.FdownAllow,
                 a.FcheckLevel,
                 a.Fstand,
                 a.FupAllow,
                 a.SampleSizeNo ,
                 a.FspecRequ ,
                 a.FreQty,
                 a.CheckQyt,
                 a.FcheckResu
                a.ReleaseNo,
                a.FacLevel,
                a.FcheckItem,
                a.FcheckTool,
                a.FdownAllow,
                a.FcheckLevel,
                a.Fstand,
                a.FupAllow,
                a.SampleSizeNo,
                a.FspecRequ,
                a.FreQty,
                a.CheckQyt,
                a.FcheckResu
            }).Select((a, b) => new MesQaItemsDetectDetail5
            {
                Id = a.Id,
                ReleaseNo = a.ReleaseNo,
                CheckQyt = a.CheckQyt,
                FacLevel = a.FacLevel,
                FcheckItem = a.FcheckItem ,
                FcheckTool = a.FcheckTool ,
                FdownAllow = a.FdownAllow,
                FcheckLevel  = a.FcheckLevel,
                Fstand =a.Fstand,
                FupAllow = a.FupAllow,
                SampleSizeNo = a.SampleSizeNo ,
                FspecRequ =a.FspecRequ ,
                FreQty  = a.FreQty,
                Factory = "1000",
                FacLevel = a.FacLevel,
                FcheckItem = a.FcheckItem,
                FcheckTool = a.FcheckTool,
                FdownAllow = a.FdownAllow,
                FcheckLevel = a.FcheckLevel,
                Fstand = a.Fstand,
                FupAllow = a.FupAllow,
                SampleSizeNo = a.SampleSizeNo,
                FspecRequ = a.FspecRequ,
                FreQty = a.FreQty,
                Factory = "1000",
                Company = "1000",
                FenterQty = SqlFunc.AggregateCount(b.Id),
                FcheckResu  = a.FcheckResu
                FcheckResu = a.FcheckResu
            }).ToList();
    }
    public int SetQSItemDetail(MesQaItemsDetectDetail12 detail)
    {
        var dbd = SqlSugarHelper.GetInstance();
@@ -259,22 +277,20 @@
                item.Factory = "1000";
                item.Company = "1000";
                result.Add(item);
            }
            return db.Insertable(result).ExecuteCommand();
        });
        detail.CreateBy = detail.LastupdateBy;
        autoResult(detail);
        return oracle;
    }
    private int autoResult(MesQaItemsDetectDetail12 detail)
    {
        var db = SqlSugarHelper.GetInstance();
@@ -288,7 +304,7 @@
        //查询这个检验项目下的检验结果
        var count = db.Queryable<MesQaItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId).Count();
        updateDetail5(detail);
        var result = "";
@@ -306,7 +322,7 @@
            result = "合格";
        //else if (count - passCount < QsItemOqcItem.FreQty) 
        //    result = "不合格";
        else if (noCount >= QsItemOqcItem.FreQty)
        else if (noCount >= QsItemOqcItem.FreQty)
            result = "不合格";
        var useTransactionWithOracle = SqlSugarHelper.UseTransactionWithOracle(
            db =>
@@ -322,7 +338,8 @@
            });
        var isNull = db.Queryable<MesQaItemsDetectDetail5>()
            .Where(s => s.ReleaseNo == detail.ReleaseNo && s.FcheckResu == null).Count();
            .Where(s => s.ReleaseNo == detail.ReleaseNo && s.FcheckResu == null)
            .Count();
        if (isNull > 0) return 1;
@@ -335,7 +352,8 @@
        //获取检验单下的合格的检验项目个数
        var icount = db.Queryable<MesQaItemsDetectDetail5>()
            .Where(s => s.ReleaseNo == detail.ReleaseNo && s.FcheckResu == "合格").Count();
            .Where(s => s.ReleaseNo == detail.ReleaseNo && s.FcheckResu == "合格")
            .Count();
        var FcheckResu = "不合格";
@@ -358,9 +376,9 @@
                .Where(s => s.ReleaseNo == detail.ReleaseNo)
                .ExecuteCommand();
        });
      //  if (FcheckResu.Equals("不合格"))
            //自动生成入库检异常对策
       ///     saveDetect02(detail.Id, detail.CreateBy);
        //  if (FcheckResu.Equals("不合格"))
        //自动生成入库检异常对策
        ///     saveDetect02(detail.Id, detail.CreateBy);
        return useTransactionWithOracle;
    }
@@ -408,7 +426,7 @@
             .ExecuteCommand());
     }
     */
    public LLJDto getXjDetail02ById(decimal? id)
    {
        var rkjDto = new LLJDto();
@@ -417,17 +435,17 @@
        var qsItemOqcItem =
            db.Queryable<MesQaItemsDetectDetail5>().Single(s => s.Id == id);
       /* if (qsItemOqcItem.IsPass == 0)
            qsItemOqcItem.Result = "不合格";
        else if (qsItemOqcItem.IsPass == 1)
            qsItemOqcItem.Result = "合格";
        else
            qsItemOqcItem.Result = "未完成";
        /* if (qsItemOqcItem.IsPass == 0)
             qsItemOqcItem.Result = "不合格";
         else if (qsItemOqcItem.IsPass == 1)
             qsItemOqcItem.Result = "合格";
         else
             qsItemOqcItem.Result = "未完成";
        if (qsItemOqcItem.Picture is { Length: > 0 })
            qsItemOqcItem.imageData =
                Convert.ToBase64String(qsItemOqcItem.Picture);
*/
         if (qsItemOqcItem.Picture is { Length: > 0 })
             qsItemOqcItem.imageData =
                 Convert.ToBase64String(qsItemOqcItem.Picture);
 */
        //获取不合格数
        var count = db.Queryable<MesQaItemsDetectDetail12>()
            .Where(s => s.Fstand == "×" && s.MainId == id).Count();
@@ -450,9 +468,8 @@
        {
            return db.Updateable<MesQaItemsDetectDetail12>()
                .SetColumns(s => s.LastupdateBy == detail.LastupdateBy)
               // .SetColumns(s => s.LastupdateDate == DateTime.Now)
                // .SetColumns(s => s.LastupdateDate == DateTime.Now)
                .SetColumnsIF(StringUtil.IsNotNullOrEmpty(detail.Fstand),
                    s => s.Fstand == detail.Fstand)
                .SetColumnsIF(StringUtil.IsNotNullOrEmpty(detail.FcheckResu),
                    s => s.FcheckResu == detail.FcheckResu)
@@ -466,15 +483,16 @@
        return withOracle;
    }
//更新检验明细已检、不合格数量  
    private int updateDetail5(MesQaItemsDetectDetail12 detail)
    {
        var db = SqlSugarHelper.GetInstance();
        //查询这个检验项目下的检验数量
        var count = db.Queryable<MesQaItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId).Count();
        //获取不合格数
        var countNo = db.Queryable<MesQaItemsDetectDetail12>()
            .Where(s => s.MainId == detail.MainId && s.Fstand == "×").Count();
@@ -487,9 +505,10 @@
                .Where(s => s.Id == detail.MainId)
                .ExecuteCommand();
        });
        return withOracle;
    }
    //主表修改备注字段
    public int saveRemarksGid(LLJDto dto)
    {
@@ -502,6 +521,7 @@
                .ExecuteCommand();
        });
    }
    //子表修改备注字段
    public int saveRemarksPid(LLJDto dto)
    {
@@ -514,7 +534,7 @@
                .ExecuteCommand();
        });
    }
    //删除主表并且连级删除子表和孙表
    public int removeXJ(string? releaseNo)
    {
@@ -522,10 +542,12 @@
        {
            var commit = 0;
            //删除主表
            commit += db.Deleteable<MesQaItemsDetect01>().Where(s => s.ReleaseNo == releaseNo)
            commit += db.Deleteable<MesQaItemsDetect01>()
                .Where(s => s.ReleaseNo == releaseNo)
                .ExecuteCommand();
            //删除子表
            commit += db.Deleteable<MesQaItemsDetectDetail5>().Where(s => s.ReleaseNo == releaseNo)
            commit += db.Deleteable<MesQaItemsDetectDetail5>()
                .Where(s => s.ReleaseNo == releaseNo)
                .ExecuteCommand();
            //删除孙表
            commit += db.Deleteable<MesQaItemsDetectDetail12>()
@@ -536,4 +558,54 @@
        return withOracle;
    }
    public bool IqcQaSubmit(LLJDto dto)
    {
        var (factory, company) = UserUtil.GetFactory(dto.userNo);
        try
        {
            // 定义输出参数
            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_FACTORY", factory,
                    DbType.String, ParameterDirection.Input),
                new("PI_COMPANY", company, DbType.String,
                    ParameterDirection.Input),
                new("p_Release_No", dto.releaseNo, DbType.String,
                    ParameterDirection.Input),
                new("p_User", dto.userNo, DbType.String,
                    ParameterDirection.Input),
                outputResult,
                outputMessage
            };
            var db = SqlSugarHelper.GetInstance();
            // 使用 SqlSugar 执行存储过程
            db.Ado.ExecuteCommand(
                "BEGIN Prc_Mes_Iqc_Qa_Submit82(:PI_FACTORY, :PI_COMPANY, :p_Release_No, :p_User, :o_Result, :o_Msg); END;",
                parameters.ToArray());
            // 获取输出参数的值
            var resultValue = outputResult.Value?.ToString();
            var messageValue = outputMessage.Value?.ToString();
            if ("1".Equals(resultValue)) throw new Exception(messageValue);
            return true;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
}