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()) || a.LotNo.ToLower() .Contains(queryObj.SearchValue.ToLower()) || a.ReleaseNo.ToLower() .Contains(queryObj.SearchValue.ToLower()) || a.ItemModel.ToLower() .Contains(queryObj.SearchValue.ToLower())) .OrderByDescending(a => a.Id) .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount); var emergencyValues = pageList.Select(item => item.EMERGENCY).ToList(); return (pageList, totalCount); } //根据检验标准来计算检验个数 /// /// 调用存储过程,重新获取检验项目 /// /// /// /// /// public string[] SetItems(decimal itemNo, decimal quantity, string releaseNo) { // 定义输出参数 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("P_RELEASE_NO", releaseNo, DbType.String, ParameterDirection.Input), new("P_ITEM_ID", itemNo, DbType.String, ParameterDirection.Input), outputResult, outputMessage }; var db = SqlSugarHelper.GetInstance(); // 使用 SqlSugar 执行存储过程 db.Ado.ExecuteCommand( "BEGIN PRC_QA_ITEM_INSERT_BTN(:P_RELEASE_NO,:P_ITEM_ID, :o_Result, :o_Msg); 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; } //紧急放行 public string[] EmergencyRelease(int id) { var db = SqlSugarHelper.GetInstance(); int emergencyStatus = db.Queryable() .Where(t => t.Id == id) .Select(t => t.EMERGENCY) .First(); if (emergencyStatus != 0) { return new string[] { "1", "非紧急状态,无法执行紧急放行" }; } var outputResult = new SugarParameter("PO_RESULT", null, DbType.Int32, ParameterDirection.Output, 4000); var outputMessage = new SugarParameter("PO_MSG", null, DbType.String, ParameterDirection.Output, 4000); var parameters = new List { new("P_ID", id, DbType.Int32, ParameterDirection.Input), outputResult, outputMessage }; db.Ado.ExecuteCommand( "BEGIN prc_MES_QA_ITEMS_update1(:P_ID, :PO_RESULT, :PO_MSG); END;", parameters.ToArray()); var lotNo1 = db.Queryable() .Where(t => t.Id == id) .Select(t => t.LotNo1) .First(); var resultValue = outputResult.Value?.ToString(); var messageValue = outputMessage.Value?.ToString(); return new string[] { resultValue, messageValue, lotNo1?.ToString() ?? "" }; } public string[] WithdrawEmergencyRelease(int id) { var db = SqlSugarHelper.GetInstance(); int emergencyStatus = db.Queryable() .Where(t => t.Id == id) .Select(t => t.EMERGENCY) .First(); if (emergencyStatus != 0) { return new string[] { "1", "非紧急状态,无需撤回" }; } var outputResult = new SugarParameter("PO_RESULT", null, DbType.Int32, ParameterDirection.Output, 4000); var outputMessage = new SugarParameter("PO_MSG", null, DbType.String, ParameterDirection.Output, 4000); var parameters = new List { new("P_ID", id, DbType.Int32, ParameterDirection.Input), outputResult, outputMessage }; db.Ado.ExecuteCommand( "BEGIN prc_MES_QA_ITEMS_update2(:P_ID, :PO_RESULT, :PO_MSG); END;", parameters.ToArray()); var lotNo1 = db.Queryable() .Where(t => t.Id == id) .Select(t => t.LotNo1) .First(); var resultValue = outputResult.Value?.ToString(); var messageValue = outputMessage.Value?.ToString(); return new string[] { resultValue, messageValue, lotNo1?.ToString() ?? "" }; } 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, a.Funit, a.Meom }).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 FcheckItemDesc = a.FspecRequ, Funit = a.Funit, Meom = a.Meom, }).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; }); //5.20xwt修改将更新主表检验结果字段放在IqcQaSubmit方法下 /*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.Funit == dto.Remarks) //SetColumns是可以叠加的 写2个就2个字段赋值 .Where(it => it.Id == dto.pid) .ExecuteCommand(); return db.Updateable() .SetColumns(it => it.Meom == dto.Meom) .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_Submit83(: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); var sum = db.Queryable() .Where(s => s.ReleaseNo == dto.releaseNo).Count(); if (sum == 0) return true; var icount = db.Queryable() .Where(s => s.ReleaseNo == dto.releaseNo && s.FcheckResu == "合格") .Count(); var FcheckResu = "不合格"; if (sum == icount) FcheckResu = "合格"; var sysUser = db.Queryable() .Where(s => s.Fcode == dto.userNo).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 == dto.userNo) .SetColumns(s => s.LastupdateDate == DateTime.Now) .Where(s => s.ReleaseNo == dto.releaseNo) .ExecuteCommand(); }); return true; } catch (Exception ex) { throw new Exception(ex.Message); } } }