using Admin.NET.Plugin.AiDOP.Dto.S0.Manufacturing; namespace Admin.NET.Plugin.AiDOP.Infrastructure; /// /// BOM 聚合保存前校验(对齐 Batch3 §9 / §19 题 5 要点,深度成环需结合全库 BOM 图扩展)。 /// public static class AdoS0MfgBomRules { public static string? ValidateUpsert(AdoS0MfgBomUpsertDto dto) { if (dto.Items == null || dto.Items.Count == 0) return "BOM 至少包含一行子项"; var childIds = dto.Items.Select(i => i.MaterialId).ToList(); if (childIds.Count != childIds.Distinct().Count()) return "同一 BOM 下子项物料不能重复"; if (dto.MaterialId.HasValue && childIds.Contains(dto.MaterialId.Value)) return "父项物料不能同时作为本子项出现"; foreach (var it in dto.Items) { if (it.QtyDenominator == 0) return "数量分母不能为 0"; } return null; } }