package cn.iocoder.yudao.module.mes.service.pd.knowledge; import java.math.BigDecimal; import java.util.Objects; import java.util.Set; /** 匹配已发布工艺知识的适用范围;未知条件不能满足有约束的知识。 */ public final class KnowledgeMatch { private KnowledgeMatch() {} public record Criteria(Long productId, Long bomId, BigDecimal minVoltage, BigDecimal maxVoltage, String market, Set standards) {} public record Request(Long productId, Long bomId, BigDecimal voltage, String market, Set standards) {} public static boolean matches(Criteria criteria, Request request) { Objects.requireNonNull(criteria, "criteria"); Objects.requireNonNull(request, "request"); if (criteria.productId() != null && !criteria.productId().equals(request.productId())) return false; if (criteria.bomId() != null && !criteria.bomId().equals(request.bomId())) return false; if (criteria.minVoltage() != null || criteria.maxVoltage() != null) { if (request.voltage() == null) return false; if (criteria.minVoltage() != null && request.voltage().compareTo(criteria.minVoltage()) < 0) return false; if (criteria.maxVoltage() != null && request.voltage().compareTo(criteria.maxVoltage()) > 0) return false; } if (!"ALL".equals(criteria.market()) && !Objects.equals(criteria.market(), request.market())) return false; Set available = criteria.standards() == null ? Set.of() : criteria.standards(); Set required = request.standards() == null ? Set.of() : request.standards(); return available.containsAll(required); } }