TangCheng
2025-02-28 d787e447e95c7b897c2cc9c0e832f8d2e5084934
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package com.smtaiserver.smtaiserver.javaai.metrics.base;
 
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
 
import org.apache.commons.text.similarity.JaccardSimilarity;
import com.smtaiserver.smtaiserver.core.SMTAIServerRequest;
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord;
import com.smtaiserver.smtaiserver.javaai.SMTJavaAIError;
import com.smtaiserver.smtaiserver.javaai.ast.ASTDBMap;
import com.smtaiserver.smtaiserver.javaai.ast.ASTResult;
import com.smtaiserver.smtaiserver.javaai.duckdb.DuckResult;
import com.smtservlet.util.Json;
import com.smtservlet.util.SMTStatic;
 
public abstract class SMTMetricsDef
{
    protected String        _id;
    protected String        _title;
    protected String        _unit;
    protected Set<String>    _setMatch;
    
    public abstract Map<String, SMTDimensionDef> getDimensionMap();
    
    public void initInstance(DBRecord rec) throws Exception
    {
        _id = rec.getString("metrics_id");
        _title = rec.getString("metrics_title");
        _unit = rec.getString("metrics_unit");
        String sMatch = rec.getString("metrics_match");
        
        if(SMTStatic.isNullOrEmpty(_unit))
        {
            _unit = "";
        }
        _setMatch = new HashSet<>();
        if(!SMTStatic.isNullOrEmpty(sMatch))
        {
            for(Json jsonMatch : Json.read(sMatch).asJsonList())
            {
                _setMatch.add(jsonMatch.asString());
            }
            
        }
    }
    
    public String getUnitName()
    {
        return _unit;
    }
    
    public Set<String> getMetricsAliasSet()
    {
        return _setMatch;
    }
    
    public void addMetricsAliasToSet(Set<String> r_set)
    {
        for(String alias : _setMatch)
        {
            r_set.add(alias);
        }
        
    }
    
    public double matchMetrics(String value, JaccardSimilarity jaccardSimilarity)
    {
        if(_setMatch == null)
            return -1;
        
        if(_setMatch.contains(value))
            return 1;
        
        double maxSim = 0;
        for(String str : _setMatch)
        {
            double curSim = jaccardSimilarity.apply(value, str);
            if(curSim >= 0.8 && maxSim < curSim)
                maxSim = curSim;
        }
        
        return maxSim;
    }
    
    public void afterLoading(Map<String, SMTMetricsDef> mapMetrics) throws Exception
    {
    }
    
    public String getId()
    {
        return _id;
    }
    
    public String getTitle()
    {
        return _title;
    }
    
    public boolean  isTimeValues()
    {
        return true;
    }
    
    public boolean  isChartValues()
    {
        return false;
    }
    
    public void queryUnknowQuestionList(JaccardSimilarity jaccardSimilarity, String keyword, SMTAIServerRequest tranReq) throws Exception
    {
    }
    
    // TODO 去掉旧版函数
    public SMTJavaAIError queryMetrics(String jsonPath, ASTDBMap dbMap, Json jsonAST, Map<String, String> extArg, SMTAIServerRequest tranReq, ASTResult r_parentResult) throws Exception
    {
        throw new Exception("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    }
    
    // TODO 新版函数做成抽象函数
    public SMTJavaAIError queryMetrics(String jsonPath, ASTDBMap dbMap, Json jsonAST, Map<String, String> extArg, SMTAIServerRequest tranReq, DuckResult r_parentResult) throws Exception
    {
        throw new Exception("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    }
}