fcx
2025-12-02 02893d929e7d2b650dc32ff14e6b12e6ca39dc75
StandardPda/MES.Service/service/QC/XJService.cs
@@ -3,6 +3,7 @@
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
using System.Data;
namespace MES.Service.service.QC;
@@ -61,7 +62,8 @@
                             statusArray.Contains(a.Daa018))
            .GroupBy((a, b) => new
            {
                b.LineNo, b.LineName
                b.LineNo,
                b.LineName
            })
            .Select((a, b) => new MesLine
            {
@@ -106,56 +108,197 @@
                }).ToList();
    }
    public List<QsQaItemXj> getPage(XJPageResult queryObj)
    //public (List<QsQaItemXj> item, int TotalCount) getPage(XJPageResult queryObj)
    //{
    //    var db = SqlSugarHelper.GetInstance();
    //    var id = Convert.ToDecimal(queryObj.id);
    //    var totalCount = 0;
    //    string[]? lineNo = null;
    //    // if (StringUtil.IsNotNullOrEmpty(queryObj.createUser))
    //    //     lineNo = _baseService.getUserLineNo(queryObj.createUser);
    //    var pageList = db
    //        .Queryable<QsQaItemXj, Womdaa,
    //            MesItems>((s, a,  b) =>
    //            new JoinQueryInfos(
    //                JoinType.Inner, s.BillNo == a.Daa001,
    //                JoinType.Left, s.ItemId == b.Id
    //            )
    //        )
    //        .WhereIF(
    //            StringUtil.IsNotNullOrEmpty(queryObj.result) &&
    //            "未完成".Equals(queryObj.result),
    //            (s, a,  b) => s.Fsubmit == null || s.Fsubmit == 0)
    //        // .WhereIF(
    //        //     StringUtil.IsNotNullOrEmpty(queryObj.result) &&
    //        //     !"未完成".Equals(queryObj.result),
    //        //     (s, a,  b) => s.FcheckResu != null)
    //        .WhereIF(
    //            StringUtil.IsNotNullOrEmpty(queryObj.result) &&
    //            !"未完成".Equals(queryObj.result),
    //            (s, a,  b) => s.Fsubmit == 1)
    //        .WhereIF(id > 0, (s, a, b) => s.Id == id)
    //        .Select((s, a,  b) => new QsQaItemXj
    //        {
    //            Id = s.Id,
    //            PlanQty = a.Daa008,
    //            CreateBy = s.CreateBy,
    //            CreateDate = s.CreateDate,
    //            ReleaseNo = s.ReleaseNo,
    //            ItemNo = s.ItemNo,
    //            BillNo = s.BillNo,
    //            ItemName = b.ItemName,
    //            ItemModel = b.ItemModel,
    //            FcheckBy = s.FcheckBy,
    //            FcheckResu = s.FcheckResu,
    //            Remarks = s.Remarks,
    //            Fsubmit = s.Fsubmit,
    //            FcheckDate = s.FcheckDate,
    //            FsubmitBy = s.FsubmitBy
    //        }).OrderBy(s => s.CreateDate, OrderByType.Desc)
    //        .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
    //    return (pageList, totalCount);
    //}
    public (List<QsQaItemXj> item, int TotalCount) getPage(XJPageResult queryObj)
    {
        var db = SqlSugarHelper.GetInstance();
        var id = Convert.ToDecimal(queryObj.id);
        var totalCount = 0;
        string[]? lineNo = null;
        if (StringUtil.IsNotNullOrEmpty(queryObj.createUser))
            lineNo = _baseService.getUserLineNo(queryObj.createUser);
        return db
            .Queryable<QsQaItemXj, Womdaa, MesLine,
                MesItems>((s, a, c, b) =>
        var pageList = db
            .Queryable<QsQaItemXj, Womdaa, MesItems>((s, a, b) =>
                new JoinQueryInfos(
                    JoinType.Inner, s.BillNo == a.Daa001,
                    JoinType.Left, a.Daa015 == c.LineNo,
                    JoinType.Left, s.ItemId == b.Id
                )
            )
            .WhereIF(lineNo != null && lineNo.Length > 0,
                (s, a, c, b) => lineNo.Contains(c.LineNo))
            // ⭐ 模糊搜索(BillNo 或 ItemNo 新增
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.SearchValue),
                (s, a, b) =>
                    s.BillNo.Contains(queryObj.SearchValue) ||
                    s.ItemNo.Contains(queryObj.SearchValue)
            )
            // ⭐ 状态筛选:未完成
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                "未完成".Equals(queryObj.result),
                (s, a, c, b) => s.FcheckResu == null)
                (s, a, b) => s.Fsubmit == null || s.Fsubmit == 0
            )
            // ⭐ 状态筛选:已完成
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.result) &&
                !"未完成".Equals(queryObj.result),
                (s, a, c, b) => s.FcheckResu != null)
            .WhereIF(id > 0, (s, a, c, b) => s.Id == id)
            .Select((s, a, c, b) => new QsQaItemXj
                (s, a, b) => s.Fsubmit == 1
            )
            // ⭐ ID 查询(单条)
            .WhereIF(id > 0, (s, a, b) => s.Id == id)
            // ⭐ select 实体返回
            .Select((s, a, b) => new QsQaItemXj
            {
                Daa020 = c.LineNo,
                Id = s.Id,
                PlanQty = a.Daa008,
                ReleaseNo = s.ReleaseNo,
                FcheckDate = s.FcheckDate,
                FcheckBy = s.FcheckBy,
                ItemNo = s.ItemNo,
                FcheckResu = s.FcheckResu,
                CreateBy = s.CreateBy,
                CreateDate = s.CreateDate,
                ReleaseNo = s.ReleaseNo,
                ItemNo = s.ItemNo,
                LastupdateBy = s.LastupdateBy,
                LastupdateDate = s.LastupdateDate,
                Modify1By = s.Modify1By,
                ItemUnit = s.ItemUnit,
                BillNo = s.BillNo,
                MoidNum = s.MoidNum,
                FsubmitBy = s.FsubmitBy,
                FsubmitDate = s.FsubmitDate,
                Fsubmit = s.Fsubmit,
                Remarks = s.Remarks,
                ItemId = s.ItemId,
                // ⭐ 额外字段(来自连表)
                PlanQty = a.Daa008,
                ItemName = b.ItemName,
                ItemModel = b.ItemModel,
                FcheckBy = s.FcheckBy,
                FcheckResu = s.FcheckResu,
                Remarks = s.Remarks
            }).OrderBy(s => s.CreateDate, OrderByType.Desc)
            .ToPageList(queryObj.PageIndex, queryObj.Limit);
                ItemModel = b.ItemModel
            })
            .OrderBy(s => s.CreateDate, OrderByType.Desc)
            .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount);
        return (pageList, totalCount);
    }
    public object CloseInspection(XJCloseInspectionDto dto)
    {
        try
        {
            var db = SqlSugarHelper.GetInstance();
            var sql = string.Format(
                @"UPDATE QS_QA_ITEM_XJ
              SET FSUBMIT = 1,
                  FCHECK_RESU = '手动关闭'
              WHERE ID = '{0}'",
                dto.id);
            db.Ado.ExecuteCommand(sql);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = "关闭成功"
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    public bool XJQaSubmit(LLJDto rkjDto)
    {
        var useTransactionWithOracle =
            SqlSugarHelper.UseTransactionWithOracle(db =>
            {
                return db.Updateable<QsQaItemXj>()
                    .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<QsQaItemXj01> setJYItem(string itemNo)
    {
@@ -169,29 +312,28 @@
        return db
            .Queryable<MesQualityStandard>()
            .Where(b => b.QsType == "2"
                        && b.ItemNo == itemNo).Select(
                b => new QsQaItemXj01
                {
                    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 = "未检测",
                    isCheck = 0,
                    Picture = b.Picture,
                    Picturename = b.Picturename
                }).ToList();
                        && b.ItemNo == itemNo).Select(b => new QsQaItemXj01
            {
                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 = "未检测",
                isCheck = 0,
                Picture = b.Picture,
                Picturename = b.Picturename
            }).ToList();
    }
    public List<QsQaItemXj01> getJYItem(decimal? pid, decimal? id)
@@ -288,36 +430,92 @@
        return Convert.ToInt32(xj.Id);
    }
    //public int saveItem(XJDto xjDto)
    //{
    //    var items = xjDto.items;
    //    var userNo = xjDto.userNo;
    //    SqlSugarHelper.UseTransactionWithOracle(db =>
    //    {
    //        foreach (var item in items) item.Pid = xjDto.gid;
    //        return db.Insertable(items).ExecuteCommand();
    //    });
    //    xjDto.items = getJYItem(xjDto.gid, null);
    //    xjDto.items.ForEach(s =>
    //    {
    //        if (s.MaxValue != null || s.StandardValue != null ||
    //            s.MinValue != null) return;
    //        var detail = new QsQaItemXj02();
    //        detail.Pid = s.Id;
    //        detail.Gid = xjDto.gid;
    //        detail.Fstand = "√";
    //        detail.FcheckResu = "1";
    //        detail.UpdateBy = xjDto.userNo;
    //        detail.count = (int?)s.LevelNum;
    //        SetQSItemDetail(detail);
    //    });
    //    return Convert.ToInt32(xjDto.gid);
    //}
    public int saveItem(XJDto xjDto)
    {
        var items = xjDto.items;
        var userNo = xjDto.userNo;
        SqlSugarHelper.UseTransactionWithOracle(db =>
        // ✅ 使用 lambda 返回插入条数,保证 Func<SqlSugarClient, int> 每条路径都有返回值
        int insertCount = SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            foreach (var item in items) item.Pid = xjDto.gid;
            // 1️⃣ 检查表里是否存在相同 gid 的数据
            var existingCount = db.Queryable<QsQaItemXj01>()
                                  .Count(s => s.Pid == xjDto.gid);
            // 2️⃣ 如果存在,则先删除
            if (existingCount > 0)
            {
                db.Deleteable<QsQaItemXj01>()
                  .Where(s => s.Pid == xjDto.gid)
                  .ExecuteCommand();
            }
            // 3️⃣ 给每条明细设置 Pid 并插入,返回插入条数
            foreach (var item in items)
            {
                item.Pid = xjDto.gid;
            }
            return db.Insertable(items).ExecuteCommand();
        });
        // 4️⃣ 重新获取插入后的明细
        xjDto.items = getJYItem(xjDto.gid, null);
        xjDto.items.ForEach(s =>
        // 5️⃣ 对没有 Max/Min/StandardValue 的明细生成默认检测结果
        foreach (var s in xjDto.items)
        {
            if (s.MaxValue != null || s.StandardValue != null ||
                s.MinValue != null) return;
            var detail = new QsQaItemXj02();
            detail.Pid = s.Id;
            detail.Gid = xjDto.gid;
            detail.Fstand = "√";
            detail.FcheckResu = "1";
            detail.UpdateBy = xjDto.userNo;
            detail.count = (int?)s.LevelNum;
            SetQSItemDetail(detail);
        });
            if (s.MaxValue != null || s.StandardValue != null || s.MinValue != null)
                continue;
        return Convert.ToInt32(xjDto.gid);
            var detail = new QsQaItemXj02
            {
                Pid = s.Id,
                Gid = xjDto.gid,
                Fstand = "√",
                FcheckResu = "1",
                UpdateBy = xjDto.userNo,
                count = (int?)s.LevelNum
            };
            SetQSItemDetail(detail);
        }
        // 6️⃣ 返回插入条数
        return insertCount;
    }
    public XJDto getXjDetail02ById(decimal? id)
@@ -398,8 +596,8 @@
        if (count == passCount) result = 1;
        var useTransactionWithOracle = SqlSugarHelper.UseTransactionWithOracle(
            db =>
        var useTransactionWithOracle =
            SqlSugarHelper.UseTransactionWithOracle(db =>
            {
                var commit = 0;
                commit += db.Updateable<QsQaItemXj01>()
@@ -516,6 +714,45 @@
        });
    }
    /// <summary>
    /// 获取首检单所有不良描述
    /// </summary>
    /// <param name="id">检验单ID</param>
    /// <returns>不良描述数据表</returns>
    public DataTable getBlmsItem1(string id)
    {
        OracleSQLHelper SQLHelper = new();
        // 查询首检检验单的不良描述
        var sql1 = string.Format(
            @"select PROJ_NAME, REMARKS
              from QS_QA_ITEM_XJ01 f
              where PID = '" + id + "' and REMARKS is not null  order by PROJ_NAME");
        return SQLHelper.ExecuteQuery(sql1);
    }
    /// <summary>
    /// 获取巡检检单所有不良描述
    /// </summary>
    /// <param name="id">检验单ID</param>
    /// <returns>不良描述数据表</returns>
    public DataTable ggetBlmsItem1(string id)
    {
        OracleSQLHelper SQLHelper = new();
        // 查询首检检验单的不良描述
        var sql1 = string.Format(
            @"select PROJ_NAME, REMARKS
              from QS_QA_ITEM_XJ01 f
              where PID = '" + id + "' and REMARKS is not null  order by PROJ_NAME");
        return SQLHelper.ExecuteQuery(sql1);
    }
    //孙表修改备注字段
    public int saveRemarksById(XJDto dto)
    {
@@ -527,5 +764,10 @@
                .Where(it => it.Id == dto.id)
                .ExecuteCommand();
        });
    }
}