using System.Data; using Masuit.Tools; 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 item, int TotalCount) GetPage(XJPageResult queryObj) { if (queryObj.createUser.IsNullOrEmpty()) return ([], 0); var db = SqlSugarHelper.GetInstance(); var id = Convert.ToDecimal(queryObj.id); var totalCount = 0; //var itemIds = GetQaItem(db, queryObj.createUser); var pageList = db.Queryable() .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) //加筛选条件,根据供应商,物料编码,物料名称搜索 //.WhereIF(queryObj.SearchValue!=null && queryObj.SearchValue!="", (a) => a.SuppName == queryObj.SearchValue|| a.ItemName == queryObj.SearchValue || a.ItemNo == queryObj.SearchValue ) .WhereIF(!string.IsNullOrEmpty(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 => a.Id) .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount); return (pageList, totalCount); } //根据检验标准来计算检验个数 // public List SetItems(string itemNo, // decimal quantity, string releaseNo) // { // var db = SqlSugarHelper.GetInstance(); // // // var count = db.Queryable().Where(s => s.Ee == 1 && // s.Isenabled == 1 // && s.ItemNo == itemNo && s.Ftype == "1").Count(); // // if (count <= 0) return []; // // var mesQaIqcItem = db // .Queryable().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(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(sql); // // item.CheckQyt = resultClass.FSAMPLE_SIZE_WORD; // item.FreQty = resultClass.Result; // }); // // return mesQaIqcItem; // } public string[] SetItems(string itemNo, decimal quantity, string releaseNo) { // 定义输出参数 var outputResult = new SugarParameter("PO_RESULT", null, DbType.Int32, ParameterDirection.Output, 4000); var outputMessage = new SugarParameter("PO_TEXT", null, DbType.String, ParameterDirection.Output, 4000); // 定义输入参数 var parameters = new List { 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, :PO_RESULT, :PO_TEXT); 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); var endIndex = input.IndexOf(endChar, startIndex); if (startIndex == -1 || endIndex == -1) // 如果未找到起始字符或结束字符,则返回空字符串或者抛出异常,根据实际情况选择 return string.Empty; // 或者抛出异常 // throw new ArgumentException("Start or end character not found"); // 提取子字符串 var length = endIndex - startIndex - 1; return input.Substring(startIndex + 1, length); } public int saveItem(LLJDto rkjDto) { var items = rkjDto.items; var userNo = rkjDto.userNo; SqlSugarHelper.UseTransactionWithOracle(db => { foreach (var item in items) item.ReleaseNo = rkjDto.releaseNo; return db.Insertable(items).ExecuteCommand(); }); 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; // 没有录入参考值,判断有多少个NG,那么录入的抽检结果必须是OK或者NG,NG代表不合格 var ifck = db.Queryable() .Where(x => x.FcheckResu == "NG" && x.MainId == s.Id).Count(); //检验明细总数 var count = db.Queryable() .Where(x1 => x1.MainId == s.Id).Count(); if (ifck > s.FreQty && s.CheckQyt == count) s.FcheckResu = "不合格"; 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; detail.Fstand = "√"; detail.FcheckResu = "OK"; detail.LastupdateBy = rkjDto.userNo; detail.count = (int?)s.CheckQyt; SetQSItemDetail(detail); }); return Convert.ToInt32(rkjDto.gid); } public List GetItems(string? releaseNo, decimal? id) { var db = SqlSugarHelper.GetInstance(); return db.Queryable( (a, b) => new JoinQueryInfos(JoinType.Left, a.Id == b.MainId)) .Where((a, b) => a.ReleaseNo == releaseNo) // .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.FcheckItemDesc }).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", Company = "1000", FenterQty = SqlFunc.AggregateCount(b.Id), FcheckResu = a.FcheckResu, FcheckItemDesc = a.FcheckItemDesc }).ToList(); } public int SetQSItemDetail(MesQaItemsDetectDetail12 detail) { var dbd = SqlSugarHelper.GetInstance(); var oracle = SqlSugarHelper.UseTransactionWithOracle(db => { List result = new(); for (var i = 0; i < detail.count; i++) { var item = new MesQaItemsDetectDetail12(); item.MainId = detail.MainId; item.ReleaseNo = detail.ReleaseNo; item.Fstand = detail.Fstand; item.FcheckResu = detail.FcheckResu; item.CreateBy = detail.LastupdateBy; item.CreateDate = DateTime.Now; 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(); // Single 没有查询到结果时返回Null,如果结果大于1条会抛出错误 var QsItemOqcItem = db.Queryable() .Single(s => s.Id == detail.MainId); if (QsItemOqcItem == null) return 0; //查询这个检验项目下的检验结果 var count = db.Queryable() .Where(s => s.MainId == detail.MainId).Count(); updateDetail5(detail); var result = ""; //检验实际结果不等于应该检验的个数时直接推出 if (QsItemOqcItem.CheckQyt != count) return 0; //合格的有多少个 var passCount = db.Queryable() .Where(s => s.MainId == detail.MainId && s.Fstand == "√").Count(); //不合格的有多少个 var noCount = db.Queryable() .Where(s => s.MainId == detail.MainId && s.Fstand == "×").Count(); if (count == passCount) result = "合格"; //else if (count - passCount < QsItemOqcItem.FreQty) // result = "不合格"; else if (noCount >= QsItemOqcItem.FreQty) result = "不合格"; var useTransactionWithOracle = SqlSugarHelper.UseTransactionWithOracle( db => { var commit = 0; commit += db.Updateable() .SetColumns(s => s.FcheckResu == result) .SetColumns(s => s.FenterQty == count) .Where(s => s.Id == detail.MainId) .ExecuteCommand(); return commit; }); var isNull = db.Queryable() .Where(s => s.ReleaseNo == detail.ReleaseNo && s.FcheckResu == null) .Count(); if (isNull > 0) return 1; //获取检验单的检验项目的个数 var sum = db.Queryable() .Where(s => s.ReleaseNo == detail.ReleaseNo).Count(); if (sum == 0) return 1; //获取检验单下的合格的检验项目个数 var icount = db.Queryable() .Where(s => s.ReleaseNo == detail.ReleaseNo && s.FcheckResu == "合格") .Count(); var FcheckResu = "不合格"; //实际个数等于理论个数时对检验单进行判定 if (sum == icount) //合格的检验结果等于总检验数视为合格 FcheckResu = "合格"; var sysUser = db.Queryable() .Where(s => s.Fcode == detail.CreateBy).First(); SqlSugarHelper.UseTransactionWithOracle(db => { return db.Updateable() .SetColumns(s => s.FcheckResu == FcheckResu) .SetColumns(s => s.FcheckDate == DateTime.Now) .SetColumns(s => s.FcheckBy == sysUser.Fname) .SetColumns(s => s.LastupdateBy == detail.CreateBy) .SetColumns(s => s.LastupdateDate == DateTime.Now) .Where(s => s.ReleaseNo == detail.ReleaseNo) .ExecuteCommand(); }); // if (FcheckResu.Equals("不合格")) //自动生成入库检异常对策 /// saveDetect02(detail.Id, detail.CreateBy); return useTransactionWithOracle; } /* public int saveDetect02(decimal? gid, string? createBy) { var db = SqlSugarHelper.GetInstance(); var qsItemOqcReq = db.Queryable().Single(s => s.Id == gid); var mesInvItemIns = db.Queryable() .Single(s => s.BillNo == qsItemOqcReq.BillNo); var mesSchemeResult = db.Queryable() .Single(s => s.BillNo == mesInvItemIns.CbillNo); var entity = new MesQaItemsDetect02(); entity.ItemNo = mesSchemeResult.BoardItem; entity.BoardItem = mesSchemeResult.BoardItem; entity.LineNo = mesSchemeResult.LineNo; entity.Aufnr = mesSchemeResult.TaskNo; entity.ReleaseNo = qsItemOqcReq.ReleaseNo; entity.LotNo = qsItemOqcReq.BillNo; entity.FcheckDate = qsItemOqcReq.FcheckDate; entity.FcheckMemo = qsItemOqcReq.Remarks; entity.Gid = qsItemOqcReq.Id; // entity.PlanQty = qsItemOqcReq.FcheckDate; entity.FcheckResu = "不合格"; entity.FcheckLevel = "严重"; entity.CreateDate = DateTime.Now; entity.Factory = "10000"; entity.Company = "1000"; entity.Ftype = "4"; entity.Fversion = 0; entity.Modify1Flag = 0; entity.IpqcStatus = 0; entity.Fsubmit = 1; entity.CreateBy = createBy; entity.FcheckBy = createBy; return SqlSugarHelper.UseTransactionWithOracle(db => db .Insertable(entity) .ExecuteCommand()); } */ public LLJDto getXjDetail02ById(decimal? id) { var rkjDto = new LLJDto(); var db = SqlSugarHelper.GetInstance(); var qsItemOqcItem = db.Queryable().Single(s => s.Id == id); /* 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); */ //获取不合格数 var count = db.Queryable() .Where(s => s.Fstand == "×" && s.MainId == id).Count(); qsItemOqcItem.Unqualified = count; rkjDto.ItemXj01 = qsItemOqcItem; rkjDto.ItemXj02s = db.Queryable() .Where(s => s.MainId == id) .ToList(); return rkjDto; } public int UpdateQSItemDetail(MesQaItemsDetectDetail12 detail) { var withOracle = SqlSugarHelper.UseTransactionWithOracle(db => { return db.Updateable() .SetColumns(s => s.LastupdateBy == detail.LastupdateBy) // .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) .Where(s => s.MainId == detail.MainId && s.Id == detail.Id) .ExecuteCommand(); }); detail.CreateBy = detail.LastupdateBy; withOracle += autoResult(detail); return withOracle; } //更新检验明细已检、不合格数量 private int updateDetail5(MesQaItemsDetectDetail12 detail) { var db = SqlSugarHelper.GetInstance(); //查询这个检验项目下的检验数量 var count = db.Queryable() .Where(s => s.MainId == detail.MainId).Count(); //获取不合格数 var countNo = db.Queryable() .Where(s => s.MainId == detail.MainId && s.Fstand == "×").Count(); //更新检验明细已检数量 var withOracle = SqlSugarHelper.UseTransactionWithOracle(db => { return db.Updateable() .SetColumns(s => s.FenterQty == count) .SetColumns(s => s.FngQty == countNo) .Where(s => s.Id == detail.MainId) .ExecuteCommand(); }); return withOracle; } //主表修改备注字段 public int saveRemarksGid(LLJDto dto) { return SqlSugarHelper.UseTransactionWithOracle(db => { return db.Updateable() .SetColumns(it => it.FngDesc == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值 .Where(it => it.ReleaseNo == dto.releaseNo) .ExecuteCommand(); }); } //子表修改备注字段 public int saveRemarksPid(LLJDto dto) { return SqlSugarHelper.UseTransactionWithOracle(db => { return db.Updateable() // .SetColumns(it => // it.Remarks == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值 .Where(it => it.Id == dto.pid) .ExecuteCommand(); }); } //删除主表并且连级删除子表和孙表 public int removeXJ(string? releaseNo) { var withOracle = SqlSugarHelper.UseTransactionWithOracle(db => { var commit = 0; //删除主表 commit += db.Deleteable() .Where(s => s.ReleaseNo == releaseNo) .ExecuteCommand(); //删除子表 commit += db.Deleteable() .Where(s => s.ReleaseNo == releaseNo) .ExecuteCommand(); //删除孙表 commit += db.Deleteable() .Where(s => s.ReleaseNo == releaseNo) .ExecuteCommand(); return commit; }); 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 { 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); } } }