| | |
| | | public List<QsItemIpiItem> getQSItems(decimal? pid, decimal? id) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | // 使用JOIN查询获取子表数据和主表的MNUM、DNUM字段 |
| | | var qsItemIpiItems = db |
| | | .Queryable<QsItemIpiItem>() |
| | | .WhereIF(pid > 0, a => a.Pid == pid) |
| | | .WhereIF(id > 0, a => a.Id == id).ToList(); |
| | | .Queryable<QsItemIpiItem, QsItemIpiReq>((a, b) => new JoinQueryInfos(JoinType.Left, a.Pid == b.Id)) |
| | | .WhereIF(pid > 0, (a, b) => a.Pid == pid) |
| | | .WhereIF(id > 0, (a, b) => a.Id == id) |
| | | .Select((a, b) => new QsItemIpiItem |
| | | { |
| | | Id = a.Id, |
| | | Pid = a.Pid, |
| | | ProjName = a.ProjName, |
| | | ItemMod = a.ItemMod, |
| | | InspectionMethod = a.InspectionMethod, |
| | | UsingInstruments = a.UsingInstruments, |
| | | LevelNum = a.LevelNum, |
| | | MaxValue = a.MaxValue, |
| | | StandardValue = a.StandardValue, |
| | | MinValue = a.MinValue, |
| | | Notes = a.Notes, |
| | | FcheckLevel = a.FcheckLevel, |
| | | FacLevel = a.FacLevel, |
| | | QsCode = a.QsCode, |
| | | QsName = a.QsName, |
| | | Picture = a.Picture, |
| | | Picturename = a.Picturename, |
| | | IsPass = a.IsPass, |
| | | ItemId = a.ItemId, |
| | | Mnum = b.Mnum, // 从主表获取MNUM |
| | | Dnum = b.Dnum, // 从主表获取DNUM |
| | | Snum = a.Snum, // 送检批数 |
| | | Remarks = a.Remarks |
| | | }).ToList(); |
| | | |
| | | var array = qsItemIpiItems.Select(s => s.Id).ToArray(); |
| | | var qsItemIpiItemDetails = db.Queryable<QsItemIpiItemDetail>() |
| | |
| | | |
| | | //排序,未完成的排在前面 |
| | | qsItemIpiItems = qsItemIpiItems.OrderBy(s => s.isCheck).ToList(); |
| | | |
| | | // 为每个检验项目生成穴号信息 |
| | | qsItemIpiItems.ForEach(item => |
| | | { |
| | | if (item.Mnum > 0 && item.Snum > 0) |
| | | { |
| | | // 使用SNUM作为送检批数来计算总编号数量 |
| | | item.HoleNumbers = GenerateHoleNumbers(item.Mnum, item.Dnum, item.Snum); |
| | | } |
| | | }); |
| | | |
| | | return qsItemIpiItems; |
| | | } |
| | |
| | | var oracle = SqlSugarHelper.UseTransactionWithOracle(db => |
| | | { |
| | | List<QsItemIpiItemDetail> result = new(); |
| | | |
| | | // 获取起始索引,如果没有指定则从0开始 |
| | | int startIndex = detail.startIndex ?? 0; |
| | | |
| | | for (var i = 0; i < detail.count; i++) |
| | | { |
| | | var item = new QsItemIpiItemDetail(); |
| | |
| | | item.FcheckResu = detail.FcheckResu; |
| | | item.CreateBy = detail.UpdateBy; |
| | | item.CreateDate = DateTime.Now; |
| | | |
| | | // 如果有起始索引,可以在这里设置相关的索引信息 |
| | | // 注意:这里只是示例,实际可能需要根据业务需求调整 |
| | | result.Add(item); |
| | | } |
| | | |
| | |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 生成穴号信息 |
| | | /// </summary> |
| | | /// <param name="mnum">开穴总数</param> |
| | | /// <param name="dnum">堵穴号(逗号分隔)</param> |
| | | /// <param name="snum">送检批数</param> |
| | | /// <returns>穴号信息列表</returns> |
| | | private List<HoleNumberInfo> GenerateHoleNumbers(decimal? mnum, string? dnum, decimal? snum) |
| | | { |
| | | var result = new List<HoleNumberInfo>(); |
| | | |
| | | if (mnum == null || mnum <= 0 || snum == null || snum <= 0) |
| | | return result; |
| | | |
| | | // 解析堵穴号 |
| | | var blockedHoles = new HashSet<int>(); |
| | | if (!string.IsNullOrEmpty(dnum)) |
| | | { |
| | | var holeNumbers = dnum.Split(',', StringSplitOptions.RemoveEmptyEntries); |
| | | foreach (var holeStr in holeNumbers) |
| | | { |
| | | if (int.TryParse(holeStr.Trim(), out int holeNum)) |
| | | { |
| | | blockedHoles.Add(holeNum); |
| | | } |
| | | } |
| | | } |
| | | |
| | | int totalHoles = (int)mnum.Value; |
| | | int batchCount = (int)snum.Value; // 送检批数 |
| | | |
| | | // 计算总编号数量:开穴总数 × 送检批数 |
| | | int totalIndexes = totalHoles * batchCount; |
| | | |
| | | for (int i = 1; i <= totalIndexes; i++) |
| | | { |
| | | // 穴号循环:1-8, 1-8... |
| | | int holeNumber = ((i - 1) % totalHoles) + 1; |
| | | bool isBlocked = blockedHoles.Contains(holeNumber); |
| | | |
| | | result.Add(new HoleNumberInfo |
| | | { |
| | | Index = i, |
| | | HoleNumber = holeNumber, |
| | | IsBlocked = isBlocked, |
| | | RecordValue = isBlocked ? "/" : null, |
| | | CheckResult = isBlocked ? "/" : null |
| | | }); |
| | | } |
| | | |
| | | // 排序:堵穴排最后优先级第一,然后穴号从小到大排,穴号相同的排一起 |
| | | result = result.OrderBy(x => x.IsBlocked) // 堵穴排最后(false在前,true在后) |
| | | .ThenBy(x => x.HoleNumber) // 穴号从小到大 |
| | | .ToList(); |
| | | |
| | | // 重新设置Index,保持连续编号 |
| | | for (int i = 0; i < result.Count; i++) |
| | | { |
| | | result[i].Index = i + 1; |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | } |