fcx
2025-12-02 02893d929e7d2b650dc32ff14e6b12e6ca39dc75
StandardPda/MES.Service/service/QC/SJService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,865 @@
using MES.Service.DB;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
using System.Data;
namespace MES.Service.service.QC;
public class SJService
{
    private readonly BaseService _baseService = new();
    //获取最大单号
    public string getMaxBillNo()
    {
        var db = SqlSugarHelper.GetInstance();
        var date = DateTime.Now.ToString("yyyy-MM-dd");
        var sql =
            "select max(BILL_NO) from QS_ITEM_IPI_REQ where to_char(CREATE_TIME,'yyyy-mm-dd') = '" +
            date + "'";
        var maxBillNo = db.Ado.SqlQuerySingle<string>(sql);
        var number = "0001";
        if (maxBillNo != null)
        {
            maxBillNo = maxBillNo.Substring(12);
            var no = Convert.ToInt32(maxBillNo);
            no++;
            number = no.ToString().PadLeft(4, '0');
        }
        return "SJN" + date.Replace("-", "") + number;
    }
    //获取所有数据分页
    //public (List<SJPageResult> item, int TotalCount) getPage(SJPageResult queryObj)
    //{
    //    var db = SqlSugarHelper.GetInstance();
    //    string[]? lineNo = null;
    //    // if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser))
    //    //     lineNo = _baseService.getUserLineNo(queryObj.StatusUser);
    //    var totalCount = 0;
    //    var data = db.Queryable<SJPageResult>()
    //        .WhereIF(lineNo != null && lineNo.Length > 0,
    //            a => lineNo.Contains(a.line))
    //        .WhereIF(queryObj.Id != null, a => a.Id == queryObj.Id)
    //        .WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo),
    //            a => a.BillNo == queryObj.BillNo)
    //        // .WhereIF(
    //        //     StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
    //        //     "未完成".Equals(queryObj.Result),
    //        //     a => a.Result == queryObj.Result && (a.FSubmit == 0 || a.FSubmit == null))
    //        .WhereIF(
    //            StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
    //            "未完成".Equals(queryObj.Result),
    //            a => a.FSubmit == 0 || a.FSubmit == null)
    //        // .WhereIF(
    //        //     StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
    //        //     !"未完成".Equals(queryObj.Result),
    //        //     a => a.Result != "未完成" && a.FSubmit == 1)
    //        .WhereIF(
    //            StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
    //            !"未完成".Equals(queryObj.Result),
    //            a => a.FSubmit == 1)
    //        .OrderBy(a => a.BillNo, OrderByType.Desc)
    //        .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
    //    return (data, totalCount);
    //}
    public (List<SJPageResult> item, int TotalCount) getPage(SJPageResult queryObj)
    {
        var db = SqlSugarHelper.GetInstance();
        string[]? lineNo = null;
        // if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser))
        //     lineNo = _baseService.getUserLineNo(queryObj.StatusUser);
        var totalCount = 0;
        string searchValue = queryObj.searchValue?.Trim();
        // ========= æž„建基础 query =========
        var query = db.Queryable<SJPageResult>()
            .WhereIF(lineNo != null && lineNo.Length > 0,
                a => lineNo.Contains(a.line))
            .WhereIF(queryObj.Id != null,
                a => a.Id == queryObj.Id)
            .WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo),
                a => a.BillNo == queryObj.BillNo)
            // æœªå®Œæˆ
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
                "未完成".Equals(queryObj.Result),
                a => a.FSubmit == 0 || a.FSubmit == null)
            // å·²å®Œæˆ
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
                !"未完成".Equals(queryObj.Result),
                a => a.FSubmit == 1);
        // ========= SearchValue åˆ¤æ–­ =========
        // SearchValue ä¸ºç©ºï¼šè¿”回全部
        if (string.IsNullOrWhiteSpace(searchValue))
        {
            var allData = query
                .OrderBy(a => a.BillNo, OrderByType.Desc)
                .ToPageList(
                    Math.Max(queryObj.PageIndex, 1),
                    Math.Max(queryObj.Limit, 1),
                    ref totalCount
                );
            return (allData, totalCount);
        }
        // SearchValue ä¸ä¸ºç©ºï¼šæ¨¡ç³ŠæŸ¥ BILL_NO / ITEM_NO
        query = query.Where(a =>
            SqlFunc.Like(SqlFunc.Trim(a.BillNo).ToLower(), $"%{searchValue.ToLower()}%") ||
            SqlFunc.Like(SqlFunc.Trim(a.ItemNo).ToLower(), $"%{searchValue.ToLower()}%")
        );
        // ========= æ‰§è¡Œåˆ†é¡µ =========
        var data = query
            .OrderBy(a => a.BillNo, OrderByType.Desc)
            .ToPageList(
                Math.Max(queryObj.PageIndex, 1),
                Math.Max(queryObj.Limit, 1),
                ref totalCount
            );
        return (data, totalCount);
    }
    //SetQSItem
    // public List<QsItemIpiItem> SetQSItems(string itemNo)
    // {
    //     var db = SqlSugarHelper.GetInstance();
    //     return db
    //         .Queryable<MoidToItem, MesQualityStandard>((a, b) =>
    //             new JoinQueryInfos(JoinType.Inner, a.MoidNum == b.MoidNum))
    //         .Where((a, b) => b.QsType == "1" && a.Fsubmit == 1 && a.ItemNo == itemNo).Select(
    //             (a, b) => new QsItemIpiItem
    //             {
    //                 ProjName = b.ProjName,
    //                 ItemMod = b.ItemMod,
    //                 InspectionMethod = b.InspectionMethod,
    //                 UsingInstruments = b.UsingInstruments,
    //                 LevelNum = SqlFunc.IsNull(
    //                     SqlFunc.IsNull(b.LevelNum * b.InspectionLevel, 1),
    //                     b.InspectionLevel),
    //                 MaxValue = b.MaxValue,
    //                 StandardValue = b.StandardValue,
    //                 MinValue = b.MinValue,
    //                 Notes = b.Notes,
    //                 FcheckLevel = b.FcheckLevel,
    //                 FacLevel = b.FacLevel,
    //                 QsCode = b.QsCode,
    //                 QsName = b.QsName,
    //                 result = "未检测"
    //             }).ToList();
    // }
    public List<QsItemIpiItem> SetQSItems(string itemNo)
    {
        var db = SqlSugarHelper.GetInstance();
        var count = db.Queryable<MesQa>().Where(s => s.QsType == "1"
            && s.ItemNo == itemNo && s.Fsubmit == 1).Count();
        if (count <= 0) return [];
        return db
            .Queryable<MesQualityStandard>()
            .Where(b => b.QsType == "1" && b.ItemNo == itemNo).Select(b =>
                new QsItemIpiItem
                {
                    ProjName = b.ProjName,
                    ItemMod = b.ItemMod,
                    InspectionMethod = b.InspectionMethod,
                    UsingInstruments = b.UsingInstruments,
                    LevelNum = SqlFunc.IsNull(
                        SqlFunc.IsNull(b.LevelNum * b.InspectionLevel, 1),
                        b.InspectionLevel),
                    MaxValue = b.MaxValue,
                    StandardValue = b.StandardValue,
                    MinValue = b.MinValue,
                    Notes = b.Notes,
                    FcheckLevel = b.FcheckLevel,
                    FacLevel = b.FacLevel,
                    QsCode = b.QsCode,
                    QsName = b.QsName,
                    Picture = b.Picture,
                    Picturename = b.Picturename,
                    result = "未检测",
                    isCheck = 0,UP_FILE=b.UP_FILE
                }).ToList();
    }
    public List<QsItemIpiItem> getQSItems(decimal? pid, decimal? id)
    {
        var db = SqlSugarHelper.GetInstance();
        var qsItemIpiItems = db
            .Queryable<QsItemIpiItem>()
            .WhereIF(pid > 0, a => a.Pid == pid)
            .WhereIF(id > 0, a => a.Id == id).ToList();
        var array = qsItemIpiItems.Select(s => s.Id).ToArray();
        var qsItemIpiItemDetails = db.Queryable<QsItemIpiItemDetail>()
            .Where(s => array.Contains(s.Pid))
            .GroupBy(s => s.Pid)
            .Select(s => new
            {
                s.Pid,
                count = SqlFunc.AggregateCount(s.Id)
            }).ToList();
        qsItemIpiItems.ForEach(s =>
        {
            var find = qsItemIpiItemDetails.Find(a => s.Id == a.Pid);
            if (find == null)
            {
                s.isCheck = 0;
                s.result = "未完成";
            }
            else
            {
                s.isCheck = find.count;
                if (find.count == s.LevelNum && s.IsPass == 1)
                    s.result = "合格";
                else if (find.count == s.LevelNum && s.IsPass == 0)
                    s.result = "不合格";
                else
                    s.result = "未完成";
            }
        });
        //使用linq表达式过滤出图片id不为空的数据
        var itemIpiItems =
            qsItemIpiItems.Where(s => s.Picture is { Length: > 0 })
                .ToList();
        if (itemIpiItems.Count > 0)
            itemIpiItems.ForEach(s =>
            {
                var qsItemIpiItem = qsItemIpiItems.Find(t => t.Id == s.Id);
                //将字节数组转换为Base64编码的字符串
                qsItemIpiItem.imageData = Convert.ToBase64String(s.Picture);
            });
        //排序,未完成的排在前面
        qsItemIpiItems = qsItemIpiItems.OrderBy(s => s.isCheck).ToList();
        return qsItemIpiItems;
    }
    public QsItem Save(QsItem item)
    {
        var qsItemIpiReq = item.From;
        var qsItemIpiItems = item.Items;
        SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            qsItemIpiReq.StatusDate = DateTime.Now;
            var pid = db.Insertable(qsItemIpiReq)
                .ExecuteReturnIdentity();
            qsItemIpiReq.Id = pid;
            item.gid = pid;
            qsItemIpiItems.ForEach(s => s.Pid = pid);
            return db.Insertable(qsItemIpiItems)
                .ExecuteCommand();
        });
        item.Items = getQSItems(qsItemIpiReq.Id, null);
        //没有上下限的检验项目自动盘点为合格
        item.Items.ForEach(s =>
        {
            if (s.MaxValue != null || s.StandardValue != null ||
                s.MinValue != null) return;
            var detail = new QsItemIpiItemDetail();
            detail.Pid = s.Id;
            detail.Gid = item.gid;
            detail.Fstand = "√";
            detail.FcheckResu = "1";
            detail.UpdateBy = item.From.StatusUser;
            detail.count = (int?)s.LevelNum;
            SetQSItemDetail(detail);
        });
        item.Items = getQSItems(qsItemIpiReq.Id, null);
        var sjPageResult = new SJPageResult
            { Id = item.From.Id, Limit = 1, PageIndex = 1 };
        var pageResult = getPage(sjPageResult);
        item.Result = pageResult.item[0];
        return item;
    }
    public QsItem SaveItem(QsItem item)
    {
        var qsItemIpiItems = item.Items;
        SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            // 1. åˆ é™¤æ—§çš„子项
            db.Deleteable<QsItemIpiItem>()
                .Where(s => s.Pid == item.gid)
                .ExecuteCommand();
            qsItemIpiItems.ForEach(s => s.Pid = item.gid);
            db.Insertable(qsItemIpiItems).ExecuteCommand();
            // 2. æŸ¥æ‰¾ MesQa å¯¹åº”主表ID(通过 item.ItemNo)
            var mesQa = db.Queryable<MesQa>()
                .Where(q => q.ItemNo == item.ItemNo)
                .Select(q => new { q.Id })
                .First();
            if (mesQa == null || mesQa.Id == null)
            {
                throw new Exception($"未找到物料编号 {item.ItemNo} å¯¹åº”çš„ MesQa ä¸»è¡¨è®°å½•。");
            }
            var mesQaId = mesQa.Id;
            var mid = item.gid;
            // 3. åŒæ­¥æ‰«ç æ£€éªŒé¡¹ç›®è¡¨ï¼ˆMES_SJ_SCAN_ITEM_CK)
            db.Deleteable<MES_SJ_SCAN_ITEM_CK>()
                .Where(s => s.MID == mid)
                .ExecuteCommand();
            var scanItems = db.Queryable<MES_SJ_SCAN_ITEM>()
                .Where(s => s.MID == mesQaId)
                .Select(s => new MES_SJ_SCAN_ITEM_CK
                {
                    SCAN_ITEM = s.SCAN_ITEM,
                    SN_NO = null,
                    MID = (long)mid,
                    CREATE_DATE = DateTime.Now
                })
                .ToList();
            foreach (var ck in scanItems)
            {
                ck.ID = (long)db.Ado.GetDecimal("SELECT SEQ_MES_SJ_SCAN_ITEM_CK.NEXTVAL FROM DUAL");
            }
            if (scanItems.Any())
            {
                db.Insertable(scanItems).ExecuteCommand();
            }
            // 4. ä¸€è‡´æ€§é¡¹ç›®åŒæ­¥é€»è¾‘(MES_IQC_CONSISTENCY_SJ_CK)
            // -------------------------------------------------------------
            // åˆ é™¤æ—§æ•°æ®
            db.Ado.ExecuteCommand(
                "DELETE FROM MES_IQC_CONSISTENCY_SJ_CK WHERE pid = :IMGID",
                new { IMGID = item.gid.ToString() });
            // æŸ¥è¯¢ä¸€è‡´æ€§é¡¹ç›®æºæ•°æ®
            var consistencyItems = db.SqlQueryable<MES_IQC_CONSISTENCY_SJ_CK>(@"
            SELECT
                a.ID AS PID,
                b.ItemName,
                b.ItemMode,
                b.SuppName,
                a.Item_No AS ImgID,
                0 AS IsChack,
                b.MULTI_SELECT
            FROM MES_QA a
            LEFT JOIN MES_IQC_CONSISTENCY_SJ_DT b ON a.ID = b.PID
            WHERE a.FSUBMIT = 1
              AND a.QS_TYPE = 1
              AND a.ITEM_NO = :ITEM_NO
              AND b.ItemName IS NOT NULL
        ").AddParameters(new { ITEM_NO = item.ItemNo }).ToList();
            foreach (var ci in consistencyItems)
            {
                db.Ado.ExecuteCommand(@"
                INSERT INTO MES_IQC_CONSISTENCY_SJ_CK
                    (ID, PID, ITEMNAME, ITEMMODE, SUPPNAME, IMGID, ISCHACK, MULTI_SELECT)
                VALUES (
                    F_GETSEQNEXTVALUE('MES_IQC_CONSISTENCY_SJ_CK'),
                    :PID,
                    :ITEMNAME,
                    :ITEMMODE,
                    :SUPPNAME,
                    :IMGID,
                    :ISCHACK,
                    :MULTI_SELECT
                )",
                    new
                    {
                        PID = item.gid,
                        ITEMNAME = ci.ItemName,
                        ITEMMODE = ci.ItemMode,
                        SUPPNAME = ci.SuppName,
                        IMGID = ci.ImgID,
                        ISCHACK = ci.ISCHACK,
                        MULTI_SELECT = ci.MULTI_SELECT
                    });
            }
            return 1;
        });
        // 5. é‡æ–°åŠ è½½æ£€éªŒé¡¹ç›®å¹¶å¤„ç†è‡ªåŠ¨åˆæ ¼é¡¹
        item.Items = getQSItems(item.gid, null);
        item.Items.ForEach(s =>
        {
            if (s.MaxValue != null || s.StandardValue != null || s.MinValue != null) return;
            var detail = new QsItemIpiItemDetail
            {
                Pid = s.Id,
                Gid = item.gid,
                Fstand = "√",
                FcheckResu = "1",
                UpdateBy = item.StatusUser,
                count = (int?)s.LevelNum
            };
            SetQSItemDetail(detail);
        });
        item.Items = getQSItems(item.gid, null);
        return item;
    }
    public int SetQSItemDetail(QsItemIpiItemDetail detail)
    {
        var oracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            List<QsItemIpiItemDetail> result = new();
            for (var i = 0; i < detail.count; i++)
            {
                var item = new QsItemIpiItemDetail();
                item.Gid = detail.Gid;
                item.Pid = detail.Pid;
                item.Fstand = detail.Fstand;
                item.FcheckResu = detail.FcheckResu;
                item.CreateBy = detail.UpdateBy;
                item.CreateDate = DateTime.Now;
                result.Add(item);
            }
            return db.Insertable(result).ExecuteCommand();
        });
        detail.CreateBy = detail.UpdateBy;
        autoResult(detail);
        return oracle;
    }
    public List<QsItemIpiItemDetail> getQSItemDetail(decimal? pid, decimal? gid)
    {
        var db = SqlSugarHelper.GetInstance();
        return db.Queryable<QsItemIpiItemDetail>()
            .Where(s => s.Pid == pid)
            .WhereIF(gid > 0, s => s.Gid == gid)
            .ToList();
    }
    //自动判定是否合格
    private int autoResult(QsItemIpiItemDetail detail)
    {
        var db = SqlSugarHelper.GetInstance();
        // Single æ²¡æœ‰æŸ¥è¯¢åˆ°ç»“果时返回Null,如果结果大于1条会抛出错误
        var qsItemIpiItem = db.Queryable<QsItemIpiItem>()
            .Single(s => s.Id == detail.Pid);
        if (qsItemIpiItem == null) return 0;
        var count = db.Queryable<QsItemIpiItemDetail>()
            .Where(s => s.Pid == detail.Pid).Count();
        var result = 0;
        if (qsItemIpiItem.LevelNum != count) return 0;
        var passCount = db.Queryable<QsItemIpiItemDetail>()
            .Where(s => s.Pid == detail.Pid && s.Fstand == "√").Count();
        if (count == passCount) result = 1;
        var useTransactionWithOracle =
            SqlSugarHelper.UseTransactionWithOracle(db =>
            {
                var commit = 0;
                commit += db.Updateable<QsItemIpiItem>()
                    .SetColumns(s => s.IsPass == result)
                    .Where(s => s.Id == detail.Pid)
                    .ExecuteCommand();
                return commit;
            });
        //自动判定是否合格
        //获取检验单的检验项目理论个数
        var sum = db.Queryable<QsItemIpiItem>()
            .Where(s => s.Pid == detail.Gid).Sum(it => it.LevelNum);
        if (sum == null || sum == 0) return 1;
        //获取检验单下的检验项目实际个数
        var icount = db.Queryable<QsItemIpiItemDetail>()
            .Where(s => s.Gid == detail.Gid).Count();
        if (icount == 0) return 1;
        //实际个数等于理论个数时对检验单进行判定
        if (sum == icount)
        {
            result = 0;
            //获取这个检验单下的所有合格的检验结果
            passCount = db.Queryable<QsItemIpiItemDetail>()
                .Where(s => s.Gid == detail.Gid && s.Fstand == "√").Count();
            //合格的检验结果等于总检验数视为合格
            if (icount == passCount) result = 1;
            useTransactionWithOracle +=
                SqlSugarHelper.UseTransactionWithOracle(db =>
                {
                    return db.Updateable<QsItemIpiReq>()
                        .SetColumns(s => s.IsPass == result)
                        .SetColumns(s => s.StatusUser == detail.CreateBy)
                        .SetColumns(s => s.CompleteTime == DateTime.Now)
                        .Where(s => s.Id == detail.Gid)
                        .ExecuteCommand();
                });
        }
        return useTransactionWithOracle;
    }
    public int UpdateQSItemDetail(QsItemIpiItemDetail detail)
    {
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemIpiItemDetail>()
                .SetColumns(s => s.UpdateBy == detail.UpdateBy)
                .SetColumns(s => s.UpdateDate == DateTime.Now)
                .SetColumnsIF(StringUtil.IsNotNullOrEmpty(detail.Fstand),
                    s => s.Fstand == detail.Fstand)
                .SetColumnsIF(StringUtil.IsNotNullOrEmpty(detail.FcheckResu),
                    s => s.FcheckResu == detail.FcheckResu)
                .Where(s => s.Id == detail.Id)
                .ExecuteCommand();
        });
        detail.CreateBy = detail.UpdateBy;
        withOracle += autoResult(detail);
        return withOracle;
    }
    //主表修改备注字段
    public int saveRemarksGid(QsItem dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemIpiReq>()
                .SetColumns(it =>
                    it.Remarks == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .Where(it => it.Id == dto.gid)
                .ExecuteCommand();
        });
    }
    //子表修改备注字段
    public int saveRemarksPid(QsItem dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemIpiItem>()
                .SetColumns(it =>
                    it.Remarks == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .Where(it => it.Id == dto.pid)
                .ExecuteCommand();
        });
    }
    //孙表修改备注字段
    public int saveRemarksById(QsItem dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemIpiItemDetail>()
                .SetColumns(it =>
                    it.Remarks == dto.Remarks) //SetColumns是可以叠加的 å†™2个就2个字段赋值
                .Where(it => it.Id == dto.id)
                .ExecuteCommand();
        });
    }
    public int removeXJ(decimal? id)
    {
        var withOracle = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            var commit = 0;
            //删除主表
            commit += db.Deleteable<QsItemIpiReq>().Where(s => s.Id == id)
                .ExecuteCommand();
            //删除子表
            commit += db.Deleteable<QsItemIpiItem>().Where(s => s.Pid == id)
                .ExecuteCommand();
            //删除孙表
            commit += db.Deleteable<QsItemIpiItemDetail>()
                .Where(s => s.Gid == id)
                .ExecuteCommand();
            return commit;
        });
        return withOracle;
    }
    public bool SJQaSubmit(LLJDto rkjDto)
    {
        var useTransactionWithOracle =
            SqlSugarHelper.UseTransactionWithOracle(db =>
            {
                return db.Updateable<QsItemIpiReq>()
                    .SetColumns(s => s.Fsubmit == 1)
                    .SetColumns(s => s.FsubmitBy == rkjDto.userNo)
                    .SetColumns(s => s.FsubmitDate == DateTime.Now)
                    .Where(s => s.Id == rkjDto.gid)
                    .ExecuteCommand();
            });
        return useTransactionWithOracle > 0;
    }
    public List<Component> getYzxBDlist(string id)
    {
        OracleSQLHelper SQLHelper = new();
        //查元器件
        //var sql1 =
        //    string.Format(
        //        @"select ITEMNAME from MES_IQC_CONSISTENCY_ck where PID='" +
        //        id + "' group by ITEMNAME order by ITEMNAME");
        var sql1 =
            string.Format(
                @"select CASE WHEN max(MULTI_SELECT) is null THEN ''ELSE '【'||max(MULTI_SELECT)||'】' END  as A,ITEMNAME as ITEMNAME   from MES_IQC_CONSISTENCY_SJ_ck where PID='" + id + "' group by ITEMNAME order by ITEMNAME");
        //查明细
        var sql2 =
            string.Format(@"select * from MES_IQC_CONSISTENCY_SJ_ck where PID='" +
                          id + "' order by ITEMNAME,ITEMMODE,SUPPNAME");
        var dataTable1 = SQLHelper.ExecuteQuery(sql1);
        var dataTable2 = SQLHelper.ExecuteQuery(sql2);
        var Components = new List<Component>();
        for (var i = 0; i < dataTable1.Rows.Count; i++)
        {
            var component = new Component();
            component.Name = dataTable1.Rows[i]["A"].ToString() + dataTable1.Rows[i]["ITEMNAME"].ToString();
            component.Specs = new List<string>();
            component.Manufacturers = new List<string>();
            component.Id = new List<string>();
            component.SelectedSpec = -1;
            component.SelectedMfg = -1;
            var index = 0;
            for (var j = 0; j < dataTable2.Rows.Count; j++)
                if (dataTable2.Rows[j]["ITEMNAME"].ToString() ==
                    dataTable1.Rows[i]["ITEMNAME"].ToString())
                {
                    component.Specs.Add(dataTable2.Rows[j]["ITEMMODE"]
                        .ToString());
                    component.Manufacturers.Add(dataTable2.Rows[j]["SUPPNAME"]
                        .ToString());
                    component.Id.Add(dataTable2.Rows[j]["ID"].ToString());
                    if (dataTable2.Rows[j]["ISCHACK"].ToString() == "1")
                    {
                        component.SelectedSpec = index;
                        component.SelectedMfg = index;
                    }
                    index++;
                }
            Components.Add(component);
        }
        return Components;
    }
    public DataTable getAllInspectors()
    {
        OracleSQLHelper SQLHelper = new();
        var sql =
            @"select a.USER_NAME label,U.FCODE value from IQC_BEFORE_FROM_SJ a JOIN SYS_USER U ON U.FID=A.SID";
        return SQLHelper.ExecuteQuery(sql);
    }
    /// <summary>
    ///     ä¸€è‡´æ€§é¡¹ç›®
    /// </summary>
    public class Component
    {
        public string Name { get; set; }
        public List<string> Specs { get; set; }
        public List<string> Manufacturers { get; set; }
        public List<string> Id { get; set; }
        public int SelectedSpec { get; set; }
        public int SelectedMfg { get; set; }
    }
    public void saveYzxBDlist(string id, DataTable DB)
    {
        OracleSQLHelper SQLHelper = new();
        //先把结果清空
        var sql1 =
            string.Format(
                @"update MES_IQC_CONSISTENCY_SJ_ck set ISCHACK=0 where PID='" +
                id + "' ");
        SQLHelper.ExecuteQuery(sql1);
        var rowId = "";
        for (var i = 0; i < DB.Rows.Count; i++)
            rowId += "'" + DB.Rows[i]["id"] + "',";
        rowId = rowId.Substring(0, rowId.Length - 1);
        //修改结果
        var sql2 =
            string.Format(
                @"update MES_IQC_CONSISTENCY_SJ_ck set ISCHACK=1 where PID='" +
                id + "'and id in(" + rowId + ") ");
        SQLHelper.ExecuteQuery(sql2);
    }
    public string[] YzxImgVerify(string id)
    {
        var msgStr = new string[2];
        OracleSQLHelper SQLHelper = new();
        //修改结果
        //var sql2 = string.Format(
        //    @"select A.ITEMNAME from ( select 888||min(id) id,ITEMNAME from MES_IQC_CONSISTENCY_CK where pid='" +
        //    id + "' group by  ITEMNAME) A " +
        //    "left join MES_QS_IMAGE b on a.id=b.fid where B.id is null order by ITEMNAME");
        var sql2 = string.Format(
         @"select A.ITEMNAME from ( select 999||min(id) id,ITEMNAME from MES_IQC_CONSISTENCY_SJ_CK where pid='" + id.ToString() + "' and ITEMNAME not in(select ITEMNAME from MES_IQC_CONSISTENCY_SJ_CK where PID='" + id.ToString() + "'  and MULTI_SELECT is not null)" +
         "group by  ITEMNAME) A" +
         " left join MES_QS_IMAGE b on a.id=b.fid where B.id is null" +
         " union" +
         " select  '分组:' || MULTI_SELECT as ITEMNAME      from MES_IQC_CONSISTENCY_SJ_CK      where pid = '" + id.ToString() + "'        and MULTI_SELECT is not null and MULTI_SELECT not in(select  A.MULTI_SELECT as ITEMNAME from (select 999 || min(id) id, MULTI_SELECT      from MES_IQC_CONSISTENCY_SJ_CK      where pid = '" + id.ToString() + "'       and MULTI_SELECT is not null      group by MULTI_SELECT,ITEMNAME) A        left join MES_QS_IMAGE b on a.id = b.fid where B.id is not null)     group by MULTI_SELECT");
        var db = SQLHelper.ExecuteQuery(sql2);
        if (db.Rows.Count > 0)
        {
            msgStr[1] = "元器件:";
            for (var i = 0; i < db.Rows.Count; i++)
                msgStr[1] += db.Rows[i]["ITEMNAME"] + ",";
            msgStr[1] += "未完成图片上传,请上传!";
            msgStr[0] = "1";
        }
        else
        {
            msgStr[0] = "0";
            msgStr[1] = "ok";
        }
        return msgStr;
    }
    /// <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,
            System.Data.DbType.Int32, ParameterDirection.Output,
            4000);
        var outputMessage = new SugarParameter("o_Msg", null,
            System.Data.DbType.String,
            ParameterDirection.Output, 4000);
        // å®šä¹‰è¾“入参数
        var parameters = new List<SugarParameter>
        {
            new("P_FCHECK_BY", NewStaffUserID,
                System.Data.DbType.String, ParameterDirection.Input),
            new("p_Release_No", releaseNo,
                System.Data.DbType.String, ParameterDirection.Input),
            new("p_User", userID,
                System.Data.DbType.String, ParameterDirection.Input),
            outputResult,
            outputMessage
        };
        var db = SqlSugarHelper.GetInstance();
        // ä½¿ç”¨ SqlSugar æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
        db.Ado.ExecuteCommand(
            "BEGIN Prc_Mes_Pqc_SJ_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();
        var msg = new string[2];
        msg[0] = resultValue;
        msg[1] = messageValue;
        return msg;
    }
    /// <summary>
    /// èŽ·å–é¦–æ£€å•æ‰€æœ‰ä¸è‰¯æè¿°
    /// </summary>
    /// <param name="id">检验单ID</param>
    /// <returns>不良描述数据表</returns>
    public DataTable getBlmsItem(string id)
    {
        OracleSQLHelper SQLHelper = new();
        // æŸ¥è¯¢é¦–检检验单的不良描述
        var sql1 = string.Format(
            @"select PROJ_NAME, REMARKS
              from QS_ITEM_IPI_ITEM f
              where PID = '" + id + "' and REMARKS is not null  order by PROJ_NAME");
        return SQLHelper.ExecuteQuery(sql1);
    }
}