AdoS0MfgBomRules.cs 987 B

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