zyf
2025-08-26 fa53abd5d374862c640da5310d0bd1bb641a0d5b
MES.Service/service/QC/SJService.cs
@@ -3,6 +3,9 @@
using MES.Service.Modes;
using MES.Service.util;
using SqlSugar;
using DbType = System.Data.DbType;
using System.Data;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace MES.Service.service.QC;
@@ -34,33 +37,80 @@
    }
    //获取所有数据分页
    public List<SJPageResult> getPage(SJPageResult queryObj)
    public (List<SJPageResult> items, int totalCount) getPage(SJPageResult queryObj)
    {
        var db = SqlSugarHelper.GetInstance();
        string[]? lineNo = null;
        if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser))
            lineNo = _baseService.getUserLineNo(queryObj.StatusUser);
        int totalCount = 0;
        var data = db.Queryable<SJPageResult>()
            .WhereIF(lineNo != null && lineNo.Length > 0,
                a => lineNo.Contains(a.line))
        //if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser))
        //    lineNo = _baseService.getUserLineNo(queryObj.StatusUser);
        var data = db.Queryable<SJPageResult, Womdaa, Womcaa, SysDepartment, MesUserDepartmentQc,MesItems> ((a,
                    da,ca,d,dq,i) =>
                new JoinQueryInfos(
                    JoinType.Left, Convert.ToDecimal(a.Pbaid) == da.Id, // 关联工单信息
                    JoinType.Left, da.Daa021 == ca.Caa020,//任务单,用于查询销售订单号
                    JoinType.Left, d.Departmentid == Convert.ToDecimal(da.Daa013),//查询车间
                    JoinType.Left, dq.Departmentcode == d.Departmentcode,//查询用户权限
                    JoinType.Left, i.Id == Convert.ToDecimal(da.Daa002)//查询用户权限
                ))
            //.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 => a.FSubmit == "0")
            .WhereIF(
                StringUtil.IsNotNullOrEmpty(queryObj.Result) &&
                !"未完成".Equals(queryObj.Result),
                a => a.Result != "未完成")
            .OrderBy(a => a.BillNo, OrderByType.Desc)
            .ToPageList(queryObj.PageIndex, queryObj.Limit);
                a => a.FSubmit == "1")
            //匹配权限
            .WhereIF(!string.IsNullOrEmpty(queryObj.LoginUser),
                (a, da, ca, d, dq) => dq.Usercode == queryObj.LoginUser)
            //匹配搜索字符串
            .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue),
                (a, da, ca, d, dq,i) =>
                a.BillNo.ToLower().Contains(queryObj.SearchValue.ToLower())||
                i.ItemName.ToLower() .Contains(queryObj.SearchValue.ToLower()) ||
                ca.Caa015.ToLower().Contains(queryObj.SearchValue.ToLower()) ||
                i.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))
            .Select((a, da, ca, d, dq) => new SJPageResult
            {
                Id = a.Id,
                BillNo = a.BillNo,
                StatusDate = a.StatusDate,
                FName = a.FName,
                Result = a.Result,
                FSubmit = a.FSubmit,
                FSubmitBy = a.FSubmitBy,
                FSubmitDate = a.FSubmitDate,
                MoidNum = a.MoidNum,
                StatusUser = a.StatusUser,
                Pbaid = a.Pbaid,
                CreateTime = a.CreateTime,
                Comments = a.Comments,
                ItemMod = a.ItemMod,
                ItemNo = a.ItemNo,
                daa001 = a.daa001,
                line = a.line,
                Remarks = a.Remarks,
                Daa003 = a.Daa003,
                Daa004 = a.Daa004,
                Daa008 = a.Daa008,
                LineName = a.LineName,
                SaleOrder = ca.Caa015,
                DepartName = d.Departmentname
            })
            .OrderBy(a => a.CreateTime, OrderByType.Desc);
        var items = data.ToPageList(queryObj.PageIndex, queryObj.Limit,ref totalCount);
        return data;
        return (items, totalCount);
    }
@@ -99,7 +149,7 @@
        var count = db.Queryable<MesQa>().Where(s => s.QsType == "1"
            && s.ItemNo == itemNo && s.Fsubmit == 1).Count();
        if (count <= 0) return new List<QsItemIpiItem>();
        if (count <= 0) return [];
        return db
            .Queryable<MesQualityStandard>()
@@ -131,15 +181,10 @@
    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 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)
        var qsItemIpiItemDetails = db.Queryable<QsItemIpiItemDetail>().Where(s => array.Contains(s.Pid)).GroupBy(s => s.Pid)
            .Select(s => new
            {
                s.Pid,
@@ -167,9 +212,7 @@
        });
        //使用linq表达式过滤出图片id不为空的数据
        var itemIpiItems =
            qsItemIpiItems.Where(s => s.Picture is { Length: > 0 })
                .ToList();
        var itemIpiItems =qsItemIpiItems.Where(s => s.Picture is { Length: > 0 }).ToList();
        if (itemIpiItems.Count > 0)
            itemIpiItems.ForEach(s =>
            {
@@ -192,16 +235,14 @@
            db =>
            {
                qsItemIpiReq.StatusDate = DateTime.Now;
                var pid = db.Insertable(qsItemIpiReq)
                    .ExecuteReturnIdentity();
                var pid = db.Insertable(qsItemIpiReq).ExecuteReturnIdentity();
                qsItemIpiReq.Id = pid;
                item.gid = pid;
                qsItemIpiItems.ForEach(s => s.Pid = pid);
                return db.Insertable(qsItemIpiItems)
                    .ExecuteCommand();
                return db.Insertable(qsItemIpiItems).ExecuteCommand();
            });
        item.Items = getQSItems(qsItemIpiReq.Id, null);
@@ -223,29 +264,40 @@
        item.Items = getQSItems(qsItemIpiReq.Id, null);
        var sjPageResult = new SJPageResult
            { Id = item.From.Id, Limit = 1, PageIndex = 1 };
        item.Result = getPage(sjPageResult)[0];
        item.Result = getPage(sjPageResult).items[0];
        return item;
    }
    public QsItem SaveItem(QsItem item)
    {
        var db = SqlSugarHelper.GetInstance();
        var del = db.Deleteable<QsItemIpiItem>()
            .Where(s=>s.Pid == item.gid)
            .ExecuteCommand();
        //QsItemIpiItemDetail
        var del1 = db.Deleteable<QsItemIpiItemDetail>()
            .Where(s => s.Gid == item.gid)
            .ExecuteCommand();
        var qsItemIpiItems = item.Items;
        SqlSugarHelper.UseTransactionWithOracle(
            db =>
            {
                qsItemIpiItems.ForEach(s => s.Pid = item.gid);
                return db.Insertable(qsItemIpiItems)
                    .ExecuteCommand();
                return db.Insertable(qsItemIpiItems).ExecuteCommand();
            });
        item.Items = getQSItems(item.gid, null);
        //没有上下限的检验项目自动盘点为合格
        item.Items.ForEach(s =>
        {
            if (s.MaxValue != null || s.StandardValue != null ||
                s.MinValue != null) return;
            if (s.MaxValue != null || s.StandardValue != null || s.MinValue != null)
            {
                return;
            }
            var detail = new QsItemIpiItemDetail();
            detail.Pid = s.Id;
            detail.Gid = item.gid;
@@ -277,7 +329,6 @@
                item.CreateDate = DateTime.Now;
                result.Add(item);
            }
            return db.Insertable(result).ExecuteCommand();
        });
@@ -347,28 +398,28 @@
        if (icount == 0) return 1;
        //实际个数等于理论个数时对检验单进行判定
        if (sum == icount)
        {
            result = 0;
        //if (sum == icount)
        //{
        //    result = 0;
            //获取这个检验单下的所有合格的检验结果
            passCount = db.Queryable<QsItemIpiItemDetail>()
                .Where(s => s.Gid == detail.Gid && s.Fstand == "√").Count();
        //    //获取这个检验单下的所有合格的检验结果
        //    passCount = db.Queryable<QsItemIpiItemDetail>()
        //        .Where(s => s.Gid == detail.Gid && s.Fstand == "√").Count();
            //合格的检验结果等于总检验数视为合格
            if (icount == passCount) result = 1;
        //    //合格的检验结果等于总检验数视为合格
        //    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();
                });
        }
        //    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;
    }
@@ -390,7 +441,7 @@
        detail.CreateBy = detail.UpdateBy;
        withOracle += autoResult(detail);
        // withOracle += autoResult(detail);
        return withOracle;
    }
@@ -421,6 +472,19 @@
                .ExecuteCommand();
        });
    }
    //NOTES
    public int saveNotesPid(QsItem dto)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemIpiItem>()
                .SetColumns(it =>it.Notes == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
                .Where(it => it.Id == dto.pid)
                .ExecuteCommand();
        });
    }
    //孙表修改备注字段
    public int saveRemarksById(QsItem dto)
@@ -428,8 +492,7 @@
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemIpiItemDetail>()
                .SetColumns(it =>
                    it.Remarks == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
                .SetColumns(it =>it.Remarks == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值
                .Where(it => it.Id == dto.id)
                .ExecuteCommand();
        });
@@ -455,4 +518,73 @@
        return withOracle;
    }
    public bool SJQaSubmit(QsItem item)
    {
        if (item == null)
            throw new ArgumentNullException(nameof(item), "质检项数据不能为空");
        if (string.IsNullOrWhiteSpace(item.userNo))
            throw new ArgumentException("用户编号不能为空", nameof(item.userNo));
        var (factory, company) = UserUtil.GetFactory(item.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("p_Id", item.gid, DbType.Int32,ParameterDirection.Input),
             new("p_Flag", 1, DbType.Int32,ParameterDirection.Input),
             new("p_User", item.userNo, DbType.String, ParameterDirection.Input),
             outputResult,
             outputMessage
         };
            var db = SqlSugarHelper.GetInstance();
            // 使用 SqlSugar 执行存储过程
            db.Ado.ExecuteCommand(
                "BEGIN PRC_WOMDAA_SJ_UPDATE_RES(:p_Id,:p_Flag,: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); }
            if ("0".Equals(resultValue)) { throw new Exception(messageValue); }
            return true;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
    /// <summary>
    /// 更新QsItemIpiItem的IsPass值
    /// </summary>
    /// <param name="id">QsItemIpiItem的ID</param>
    /// <param name="isPass">IsPass的值(0表示不合格,1表示合格)</param>
    /// <returns>更新影响的行数</returns>
    public int UpdateQsItemIpiItemIsPass(decimal id, decimal isPass)
    {
        return SqlSugarHelper.UseTransactionWithOracle(db =>
        {
            return db.Updateable<QsItemIpiItem>()
                .SetColumns(s => s.IsPass == isPass)
                .Where(s => s.Id == id)
                .ExecuteCommand();
        });
    }
}