Просмотр исходного кода

fix(s0): 标准BOM列表关键字按父/子项编码文本匹配

修复输入父级物料编码查不出子项:原关键字过滤被 CompanyRefId/FactoryRefId
双 gate(查询区已隐藏二者→恒跳过),且走 keyword→ItemMaster.Id→ParentMaterialId
关联,而 53031/53032 行 ParentMaterialId 为 NULL→关联永远漏 legacy 数据。
改为直接匹配 BOM 主表 ParentItem/ComponentItem 编码文本,对 NULL-FK 行生效。
AB3A97 实存于物料主数据,本批不补造/不清洗数据。bump server 1.0.200->1.0.201。
YY968XX 13 часов назад
Родитель
Сommit
8c471111ae

+ 3 - 3
server/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj

@@ -11,9 +11,9 @@
     <GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
     <Copyright>Admin.NET</Copyright>
     <Description>Admin.NET 通用权限开发平台</Description>
-    <AssemblyVersion>1.0.200</AssemblyVersion>
-    <FileVersion>1.0.200</FileVersion>
-    <Version>1.0.200</Version>
+    <AssemblyVersion>1.0.201</AssemblyVersion>
+    <FileVersion>1.0.201</FileVersion>
+    <Version>1.0.201</Version>
   </PropertyGroup>
 
   <ItemGroup>

+ 7 - 9
server/Plugins/Admin.NET.Plugin.AiDOP/Controllers/S0/Manufacturing/AdoS0ProductStructuresController.cs

@@ -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();