|
|
@@ -41,17 +41,15 @@ public class AdoS0ProductStructuresController : ControllerBase
|
|
|
.WhereIF(q.FactoryRefId.HasValue, x => x.FactoryRefId == q.FactoryRefId!.Value)
|
|
|
.WhereIF(q.IsEnabled.HasValue, x => x.IsEnabled == q.IsEnabled!.Value);
|
|
|
|
|
|
- if (!string.IsNullOrWhiteSpace(q.Keyword) && q.CompanyRefId.HasValue && q.FactoryRefId.HasValue)
|
|
|
+ if (!string.IsNullOrWhiteSpace(q.Keyword))
|
|
|
{
|
|
|
var kw = q.Keyword!.Trim();
|
|
|
- var mids = await _materialRep.AsQueryable()
|
|
|
- .Where(i => i.CompanyRefId == q.CompanyRefId!.Value && i.FactoryRefId == q.FactoryRefId!.Value
|
|
|
- && (i.ItemNum.Contains(kw) || i.Descr.Contains(kw)))
|
|
|
- .Select(i => i.Id)
|
|
|
- .ToListAsync();
|
|
|
- if (mids.Count == 0)
|
|
|
- return Ok(new { total = 0, page, pageSize, list = Array.Empty<object>() });
|
|
|
- query = query.Where(m => mids.Contains(m.ParentMaterialId) || mids.Contains(m.ComponentMaterialId));
|
|
|
+ // 直接匹配 BOM 主表存储的父/子项物料编码文本(ParentItem/ComponentItem)。
|
|
|
+ // legacy BOM 行的 ParentMaterialId/ComponentMaterialId 多为 NULL(未解析到 ItemMaster.Id),
|
|
|
+ // 原"keyword→ItemMaster.Id→Contains(ParentMaterialId)"关联会漏掉几乎全部历史数据,
|
|
|
+ // 且依赖 CompanyRefId/FactoryRefId(查询区已不再提供)导致整段过滤被跳过。
|
|
|
+ // 改为按父/子项编码文本模糊匹配,对 NULL-FK 行同样生效,对应"父级物料编码"查询语义。
|
|
|
+ query = query.Where(m => m.ParentItem.Contains(kw) || m.ComponentItem.Contains(kw));
|
|
|
}
|
|
|
|
|
|
var total = await query.CountAsync();
|