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<String> standards) {}
|
public record Request(Long productId, Long bomId, BigDecimal voltage,
|
String market, Set<String> 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<String> available = criteria.standards() == null ? Set.of() : criteria.standards();
|
Set<String> required = request.standards() == null ? Set.of() : request.standards();
|
return available.containsAll(required);
|
}
|
}
|