xiaoyi
3 天以前 fae95228037f0c1304c1917ae5fff452f2160c5a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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);
    }
}