using System.Data; using System.Security.Cryptography; using System.Text; using Masuit.Tools; using MES.Service.DB; using MES.Service.Dto.service; using MES.Service.Modes; using MES.Service.util; using Newtonsoft.Json; using SqlSugar; using DbType = System.Data.DbType; namespace MES.Service.service.QC; public class LljService { private static readonly HttpClient client = new(); 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((a, b, d, e, f, g, h, i) => new JoinQueryInfos(JoinType.Left, a.ItemId == b.ItemId, JoinType.Inner, a.Id == d.Id, JoinType.Left, a.CreateBy == e.Fcode, JoinType.Left, f.Id == b.PID, JoinType.Left, f.Sid == g.Fid, JoinType.Left, a.ReleaseNo == h.InspectionNo && h.IsValid == "Y", JoinType.Left, i.Fcode == h.Inspector )) .WhereIF( StringUtil.IsNotNullOrEmpty(queryObj.result) && "未完成".Equals(queryObj.result), (a, b, d) => a.FcheckResu == null) .WhereIF( StringUtil.IsNotNullOrEmpty(queryObj.result) && !"未完成".Equals(queryObj.result), (a, b, d) => a.FcheckResu != null) //.WhereIF( // itemIds is { Length: > 0 }, // (a, b, c) => itemIds.Contains(a.ItemId)) .WhereIF(id > 0, (a, b, d) => a.Id == id) .WhereIF(queryObj.arrivalFilter >= 0, (a, b, d) => a.IsArrival == queryObj.arrivalFilter) .WhereIF(queryObj.createUser!="PL017"&& queryObj.UserIndex=="0", (a, b, d, e, f, g,h, i) => (g.Fcode == queryObj.createUser || i.Fcode == queryObj.createUser))//判断此单的检验员,或者检验为空就显示此单据 //加筛选条件,根据供应商,物料编码,物料名称,项目搜索 //.WhereIF(queryObj.SearchValue != null && queryObj.SearchValue != "", //(a, b, d) => (a.SuppName.ToLower().Contains(queryObj.SearchValue.ToLower()) //|| a.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower()) //|| a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()) //|| d.ProjectCodes.ToLower().Contains(queryObj.SearchValue.ToLower()) //)) //根据下拉框搜索条件筛选(0项目, 1物料编号, 2物料名称, 3供应商, 4采购员) .WhereIF(queryObj.SelectedIndex == "0" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (d.ProjectCodes.ToLower().Contains(queryObj.SearchValue.ToLower()))) .WhereIF(queryObj.SelectedIndex == "1" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))) .WhereIF(queryObj.SelectedIndex == "2" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (a.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower()))) .WhereIF(queryObj.SelectedIndex == "3" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (a.SuppName.ToLower().Contains(queryObj.SearchValue.ToLower()))) .WhereIF(queryObj.result== "已完成", (a, b, d, e) => (a.IqcDate>= queryObj.startDate.ToDateTime()&& a.IqcDate <= queryObj.endDate.ToDateTime().AddDays(1))) .WhereIF(queryObj.result == "已完成" && queryObj.state!= "所有状态",(a, b, d, e) => (a.FcheckResu == queryObj.state)) // .WhereIF(queryObj.result == "未完成" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d, e) => (e.Fname.ToLower().Contains(queryObj.SearchValue.ToLower()))) //.OrderByDescending((a, b, d) => a.Id) .Select((a, b, d, e, f, g, h, i) => new LtsLlj { //UserName = g.Fname, //UserName = (i.Fname!=null ||i.Fname!="") ? i.Fname : g.Fname, UserName = i.Fname != null || i.Fname != "" ? i.Fname : g.Fname, FIRST = d.First, CreateUserName = e.Fname, NewFngDesc = d.NewFngDesc, ProjectCodes = d.ProjectCodes }, true) .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount); return (pageList, totalCount); } private decimal[] GetQaItem(SqlSugarClient db, string? user) { var itemsId = db.Queryable() .Select(s => s.Id).ToList(); var iqc = db.Queryable() .Select(a => a.ItemId).ToList(); var decimals = itemsId.Except(iqc).ToList(); var array = db.Queryable((a, b, c) => new JoinQueryInfos(JoinType.Inner, a.Fid == b.Sid, JoinType.Inner, b.ItemId == c.Id)) .Where((a, b, c) => a.Fcode == user) .Select((a, b, c) => c.Id).ToList(); decimals.AddRange(array); var decimals1 = decimals.Distinct().ToArray(); return decimals1; } //根据检验标准来计算检验个数 //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("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), outputResult, outputMessage }; var db = SqlSugarHelper.GetInstance(); // 使用 SqlSugar 执行存储过程 db.Ado.ExecuteCommand( "BEGIN PRC_QA_ITEM_INSERT_BTN(:P_RELEASE_NO, :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; } /// /// 保存新检验员 /// /// 新检验员ID /// 修改人 /// 检验单号 /// public string[] SaveCheckBy(string NewStaffUserID, string userID, 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_FCHECK_BY", NewStaffUserID, DbType.String, ParameterDirection.Input), new("p_Release_No", releaseNo, DbType.String, ParameterDirection.Input), new("p_User", userID, DbType.String, ParameterDirection.Input), outputResult, outputMessage }; var db = SqlSugarHelper.GetInstance(); // 使用 SqlSugar 执行存储过程 db.Ado.ExecuteCommand( "BEGIN Prc_Mes_Iqc_Qa_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; } public string[] SaveSysSubmit(SysSubmit sysSubmit) { // 定义输出参数 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_BILLNO", sysSubmit.PI_BILLNO, DbType.String, ParameterDirection.Input), new("PI_USER", sysSubmit.PI_USER, DbType.String, ParameterDirection.Input), new("PI_SAMPLE_STATUS", sysSubmit.PI_SAMPLE_STATUS, DbType.String, ParameterDirection.Input), new("PI_SAMPLE_TYPE", sysSubmit.PI_SAMPLE_TYPE, DbType.String, ParameterDirection.Input), new("PI_SAMPLE_REASON", sysSubmit.PI_SAMPLE_REASON, DbType.String, ParameterDirection.Input), new("PI_INSPECT_TYPE", sysSubmit.PI_INSPECT_TYPE, DbType.String, ParameterDirection.Input), new("PI_SAMPLE_PREPARATION", sysSubmit.PI_SAMPLE_PREPARATION, DbType.String, ParameterDirection.Input), new("PI_URGENCY", sysSubmit.PI_URGENCY, DbType.String, ParameterDirection.Input), new("PI_FIRMWAREVERSION", sysSubmit.PI_FIRMWAREVERSION, DbType.String, ParameterDirection.Input), new("PI_HARDWAREVERSION", sysSubmit.PI_HARDWAREVERSION, DbType.String, ParameterDirection.Input), new("PI_REMARK", sysSubmit.PI_REMARK, DbType.String, ParameterDirection.Input), outputResult, outputMessage }; var db = SqlSugarHelper.GetInstance(); // 使用 SqlSugar 执行存储过程 db.Ado.ExecuteCommand( "BEGIN PRC_MES_IQC_QC_SYSSUBMIT(:PI_BILLNO,:PI_USER,:PI_SAMPLE_STATUS,:PI_SAMPLE_TYPE,:PI_SAMPLE_REASON,:PI_INSPECT_TYPE,:PI_SAMPLE_PREPARATION,:PI_URGENCY,:PI_FIRMWAREVERSION,:PI_HARDWAREVERSION,:PI_REMARK, :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; } public static string BuildCurrentSign(string paramJson, string appSecret) { var commonDict = new Dictionary(); var jsonDict = JsonConvert .DeserializeObject>(paramJson); var keyList = new List(); foreach (var entry in jsonDict) { if (entry.Key.Equals("sign", StringComparison.OrdinalIgnoreCase)) continue; var value = entry.Value?.ToString().Trim() ?? ""; commonDict[entry.Key] = value; keyList.Add(entry.Key); } // 按字母顺序排序键 keyList.Sort((x, y) => string.Compare(x, y, StringComparison.Ordinal)); // 拼接签名字符串 var sb = new StringBuilder(); foreach (var key in keyList) sb.Append(commonDict[key]).Append(":"); sb.Append(appSecret); // 计算MD5 using var md5 = MD5.Create(); var hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString())); return BitConverter.ToString(hashBytes) .Replace("-", "") .ToLowerInvariant(); } public async Task SignDelivery(string id) { var msg = new string[2]; //发起请求,签收送货单 try { var requestData = XkyCommonParam.GetInit(); requestData.body = new BodyParam { erpCode = "Z106", dnXkNo = id }; // 序列化为JSON var json = JsonConvert.SerializeObject(requestData); using (var client = new HttpClient()) { // 设置请求内容 var content = new StringContent(json, Encoding.UTF8, "application/json"); // 发送POST请求 var response = await client.PostAsync( "https://openapi.xiekeyun.com/delivery/updateDeliveryStatus.json", content); // 处理响应 if (response.IsSuccessStatusCode) { var responseBody = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject( responseBody); //成功后手动下推到货单 if (result.Result == 1) { // 定义输出参数 var outputMessage = new SugarParameter("C_RESULT", null, DbType.String, ParameterDirection.Output, 4000); // 定义输入参数 var parameters = new List { new("C_IN_STR", "送货单签收[BTNOK[PL017[" + id, DbType.String, ParameterDirection.Input), outputMessage }; var db = SqlSugarHelper.GetInstance(); // 使用 SqlSugar 执行存储过程 db.Ado.ExecuteCommand( "BEGIN PRC_RF_PDA_RECEIPT_BTN(:C_IN_STR,:C_RESULT); END;", parameters.ToArray()); // 获取输出参数的值 var messageValue = outputMessage.Value?.ToString(); msg[0] = "0"; msg[1] = messageValue; } else { if (result.ErrorMsg == "出货单据不是已送货状态!") { // 定义输出参数 var outputMessage = new SugarParameter("C_RESULT", null, DbType.String, ParameterDirection.Output, 4000); // 定义输入参数 var parameters = new List { new("C_IN_STR", "送货单签收[BTNOK[PL017[" + id, DbType.String, ParameterDirection.Input), outputMessage }; var db = SqlSugarHelper.GetInstance(); // 使用 SqlSugar 执行存储过程 db.Ado.ExecuteCommand( "BEGIN PRC_RF_PDA_RECEIPT_BTN(:C_IN_STR,:C_RESULT); END;", parameters.ToArray()); // 获取输出参数的值 var messageValue = outputMessage.Value?.ToString(); msg[0] = "0"; msg[1] = messageValue; } else { msg[0] = "1"; msg[1] = "002[" + id + "签收失败," + result.ErrorMsg; } } } else { msg[0] = "1"; msg[1] = $"002[{id}签收失败,请求失败,状态码:{response.StatusCode}"; } } } catch (Exception ex) { msg[0] = "1"; msg[1] = $"002[请求失败,状态码:{ex.Message}"; } //msg[0] = "1"; //msg[1] = responseBody; return msg; } public async Task SignDelivery2(string id,string c_user) { var msg = new string[2]; //发起请求,签收送货单 try { var requestData = XkyCommonParam.GetInit(); requestData.body = new BodyParam { erpCode = "Z106", dnXkNo = id }; // 序列化为JSON var json = JsonConvert.SerializeObject(requestData); using (var client = new HttpClient()) { // 设置请求内容 var content = new StringContent(json, Encoding.UTF8, "application/json"); // 发送POST请求 var response = await client.PostAsync( "https://openapi.xiekeyun.com/delivery/updateDeliveryStatus.json", content); // 处理响应 if (response.IsSuccessStatusCode) { var responseBody = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject( responseBody); //成功后手动下推到货单 if (result.Result == 1) { // 定义输出参数 var outputMessage = new SugarParameter("C_RESULT", null, DbType.String, ParameterDirection.Output, 4000); // 定义输入参数 var parameters = new List { new("C_IN_STR", "送货单签收[BTNOK["+c_user+"[" + id, DbType.String, ParameterDirection.Input), outputMessage }; var db = SqlSugarHelper.GetInstance(); // 使用 SqlSugar 执行存储过程 db.Ado.ExecuteCommand( "BEGIN PRC_RF_PDA_RECEIPT_BTN(:C_IN_STR,:C_RESULT); END;", parameters.ToArray()); // 获取输出参数的值 var messageValue = outputMessage.Value?.ToString(); msg[0] = "0"; msg[1] = messageValue; } else { if (result.ErrorMsg == "出货单据不是已送货状态!") { // 定义输出参数 var outputMessage = new SugarParameter("C_RESULT", null, DbType.String, ParameterDirection.Output, 4000); // 定义输入参数 var parameters = new List { new("C_IN_STR", "送货单签收[BTNOK["+c_user+"[" + id, DbType.String, ParameterDirection.Input), outputMessage }; var db = SqlSugarHelper.GetInstance(); // 使用 SqlSugar 执行存储过程 db.Ado.ExecuteCommand( "BEGIN PRC_RF_PDA_RECEIPT_BTN(:C_IN_STR,:C_RESULT); END;", parameters.ToArray()); // 获取输出参数的值 var messageValue = outputMessage.Value?.ToString(); msg[0] = "0"; msg[1] = messageValue; } else { msg[0] = "1"; msg[1] = "002[" + id + "签收失败," + result.ErrorMsg; } } } else { msg[0] = "1"; msg[1] = $"002[{id}签收失败,请求失败,状态码:{response.StatusCode}"; } } } catch (Exception ex) { msg[0] = "1"; msg[1] = $"002[请求失败,状态码:{ex.Message}"; } //msg[0] = "1"; //msg[1] = responseBody; return msg; } public async Task getTestXKYSign() { var msg = new string[2]; //发起请求,签收送货单 try { var requestData = XkyCommonParam.GetTestInit(); msg[0] = "0"; msg[1] = requestData.ToJsonString(); } catch (Exception ex) { msg[0] = "1"; msg[1] = $"002[请求失败,状态码:{ex.Message}"; } //msg[0] = "1"; //msg[1] = responseBody; 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) { OracleSQLHelper SQLHelper = new(); var sql = @"update MES_QA_ITEMS_DETECT_01 set FCHECK_BEGIN_DATE=sysdate where RELEASE_NO='"+ releaseNo + "' and FCHECK_BEGIN_DATE is null"; SQLHelper.ExecuteQuery(sql); 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) .OrderByDescending((a, b) => a.FcheckItem) .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 DataTable getAllInspectors() { OracleSQLHelper SQLHelper = new(); var sql = @"select a.USER_NAME label,U.FCODE value from IQC_BEFORE_FROM a JOIN SYS_USER U ON U.FID=A.SID"; return SQLHelper.ExecuteQuery(sql); } 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 DataTable getFromInfo(string BarCode) { OracleSQLHelper SQLHelper = new(); var sql = string.Format( @"select b.ID,b.LOT_NO,b.RELEASE_NO,b.FSUBMIT from MES_INV_ITEM_BARCODES A left join MES_QA_ITEMS_DETECT_01 B on A.BILL_NO=b.LOT_NO and A.ITEM_ID=b.ITEM_ID where ITEM_BARCODE='" + BarCode + "'and b.ID is not null"); return SQLHelper.ExecuteQuery(sql); } public int getFromMJCount(string BarCode) { OracleSQLHelper SQLHelper = new(); var sql = string.Format( @"select count(*) count from MES_INV_ITEM_BARCODES A left join MES_INV_ITEM_ARN_DETAIL B on A.BILL_NO=b.CBILL_NO and A.ITEM_ID=b.ITEM_ID where ITEM_BARCODE='"+ BarCode + "' and CHECK_STATES='免检'"); return Convert.ToInt32(SQLHelper.ExecuteQuery(sql).Rows[0]["count"]); } public DataTable getImgBDlist(string id) { OracleSQLHelper SQLHelper = new(); var sql = string.Format( @"select id,FID,IMAGE_DATA from MES_QS_IMAGE where FID=" + id + ""); return SQLHelper.ExecuteQuery(sql); } public List 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 sql2 = string.Format(@"select * from MES_IQC_CONSISTENCY_ck where PID='" + id + "' order by ITEMNAME,ITEMMODE,SUPPNAME"); var dataTable1 = SQLHelper.ExecuteQuery(sql1); var dataTable2 = SQLHelper.ExecuteQuery(sql2); var Components = new List(); for (var i = 0; i < dataTable1.Rows.Count; i++) { var component = new Component(); component.Name = dataTable1.Rows[i]["ITEMNAME"].ToString(); component.Specs = new List(); component.Manufacturers = new List(); component.Id = new List(); 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 getBlmsItem() { OracleSQLHelper SQLHelper = new(); //查不良描述 var sql1 = @"select DEFECT_NAME from MES_DEFECT_CODE A left join MES_DEFECT_TYPE X ON X.TYPE_NO = A.DEFECT_SORT AND X.COMPANY = A.COMPANY AND X.FACTORY = A.FACTORY"; return SQLHelper.ExecuteQuery(sql1); } public DataTable getBlmsItem(string id) { OracleSQLHelper SQLHelper = new(); //查不良描述 var sql1 = string.Format( @"select FCHECK_ITEM,FUNIT from mes_qa_items_detect_detail5 f where RELEASE_NO='" + id + "' and FUNIT is not null order by FCHECK_ITEM"); return SQLHelper.ExecuteQuery(sql1); } public void saveYzxBDlist(string id, DataTable DB) { OracleSQLHelper SQLHelper = new(); //先把结果清空 var sql1 = string.Format( @"update MES_IQC_CONSISTENCY_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_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 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; } 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(); }); } //删除主表并且连级删除子表和孙表 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 string[] 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(); var msg = new string[2]; msg[0] = resultValue; msg[1] = messageValue; return msg; } catch (Exception ex) { throw new Exception(ex.Message); } } /// /// 从U9获取料号图纸列表 /// /// u9No:u9物料编号 /// type:1:图纸规格书 2:进料检验文件 /// /// public async Task GetFileUrlByU9List(string Type, string U9No) { try { var requestUrl = $"https://erp.dream-maker.com/api/public/getFileUrlByU9No?u9No={Uri.EscapeDataString(U9No)}&type={Type}"; var response = await client.GetAsync(requestUrl); response.EnsureSuccessStatusCode(); // 检查HTTP状态码 var responseContent = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject(responseContent); if (result.Status == 0 && result.Data != null) return result.Data; return null; } catch (Exception ex) { throw new Exception(ex.Message); } } public class DataAcquisitionConfiguration { //测试环境 public const string TEST_COMPANY_CODE = "55958795"; public const string TEST_APP_KEY = "ab2d86b6dffabcc81dca6855c727c246"; public const string TEST_APP_SECRET = "01b17babe2a96d5ebd802e67709f33d1"; public const string TEST_ERP_CODE = "Z106"; //正式环境 public const string COMPANY_CODE = "72505985"; public const string APP_KEY = "a2866f03bb7f76387bfb1a98001f0e31"; public const string APP_SECRET = "f13bd1bcb130f0090ed92dc021e5f4e1"; public const string ERP_CODE = "Z106"; } [Serializable] public class ApiCommonParam { //发放给用户的Key public string appKey { get; set; } //接口版本 public string version { get; set; } //数据所属公司编码 public string ownerCompanyCode { get; set; } //操作者所属公司编码 public string operateCompanyCode { get; set; } //签名 public string sign { get; set; } //时间戳 public long? timestamps { get; set; } ////扩展字段 //public object Reserver { get; set; } } [Serializable] public class BodyParam { public string erpCode { get; set; } public string dnXkNo { get; set; } } public class XkyCommonParam { public ApiCommonParam commonParam { get; set; } public BodyParam body { get; set; } public static XkyCommonParam GetInit() { var apiParam = new ApiCommonParam { // 发携客云提供的appKey appKey = DataAcquisitionConfiguration.APP_KEY, // 接口版本 version = "1.0", // 操作者所属公司编码 operateCompanyCode = DataAcquisitionConfiguration.COMPANY_CODE, // 数据所属公司编码,非集团公司默认赋值为操作公司 ownerCompanyCode = DataAcquisitionConfiguration.COMPANY_CODE, // 当前时间对应的时间戳(秒数) timestamps = DateTimeOffset.UtcNow.ToUnixTimeSeconds() }; var appSecret = DataAcquisitionConfiguration.APP_SECRET; // 生成签名 var sign = BuildCurrentSign( JsonConvert.SerializeObject(apiParam), appSecret); apiParam.sign = sign; return new XkyCommonParam { commonParam = apiParam }; } public static XkyCommonParam GetTestInit() { var apiParam = new ApiCommonParam { // 发携客云提供的appKey appKey = DataAcquisitionConfiguration.TEST_APP_KEY, // 接口版本 version = "1.0", // 操作者所属公司编码 operateCompanyCode = DataAcquisitionConfiguration.TEST_COMPANY_CODE, // 数据所属公司编码,非集团公司默认赋值为操作公司 ownerCompanyCode = DataAcquisitionConfiguration.TEST_COMPANY_CODE, // 当前时间对应的时间戳(秒数) timestamps = DateTimeOffset.UtcNow.ToUnixTimeSeconds() }; var appSecret = DataAcquisitionConfiguration.TEST_APP_SECRET; // 生成签名 var sign = BuildCurrentSign( JsonConvert.SerializeObject(apiParam), appSecret); apiParam.sign = sign; return new XkyCommonParam { commonParam = apiParam }; } } /// /// 一致性项目 /// public class Component { public string Name { get; set; } public List Specs { get; set; } public List Manufacturers { get; set; } public List Id { get; set; } public int SelectedSpec { get; set; } public int SelectedMfg { get; set; } } /// /// 料号图纸接口返回对象 /// public class ApiResponse { [JsonProperty("status")] public int Status { get; set; } [JsonProperty("message")] public string Message { get; set; } [JsonProperty("data")] public string[] Data { get; set; } [JsonProperty("totalCount")] public int TotalCount { get; set; } } /// /// 携客云接口返回对象 /// public class XKYApiResponse { [JsonProperty("errorCode")] public string ErrorCode { get; set; } [JsonProperty("errorMsg")] public string ErrorMsg { get; set; } [JsonProperty("result")] public int Result { get; set; } [JsonProperty("data")] public object Data { get; set; } [JsonProperty("curServerTime")] public long CurServerTime { get; set; } // 如果需要时间转换可以添加这个属性 public DateTime ServerTime => DateTimeOffset .FromUnixTimeMilliseconds(CurServerTime).DateTime; } }