package com.smtaiserver.smtaiserver.javaai.duckdb; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.smtaiserver.smtaiserver.core.SMTAIServerRequest; import com.smtaiserver.smtaiserver.database.SMTDatabase; import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord; import com.smtservlet.util.SMTJsonWriter; import com.smtservlet.util.SMTStatic; public class DuckMergeGroupChart extends DuckMergeGroup { public List _listRecsValue = new ArrayList<>(); public Map _mapId2filterJson = new LinkedHashMap<>(); public SMTJsonWriter prepareFilterJson(String id) { SMTJsonWriter jsonWr = _mapId2filterJson.get(id); if(jsonWr == null) { jsonWr = new SMTJsonWriter(false); _mapId2filterJson.put(id, jsonWr); } return jsonWr; } @SuppressWarnings("unused") private String getStartDate() { for(DuckMergeChart mergeChart : _listRecsValue) { if(mergeChart._startTime != null) return SMTStatic.toString(mergeChart._startTime).substring(0, 11); } return ""; } private String getChartType() { for(DuckMergeChart mergeChart : _listRecsValue) { if(mergeChart._chartType != null) return mergeChart._chartType; } return null; } protected void outputDetailHeadJson(String agentKey, SMTJsonWriter jsonWr) { jsonWr.addKeyValue("type", "recordset"); jsonWr.addKeyValue("agent_key", agentKey); jsonWr.addKeyValue("chart", "muli_line"); jsonWr.addKeyValue("title", _title); String chartType = getChartType(); if(!SMTStatic.isNullOrEmpty(chartType)) jsonWr.addKeyValue("chart_type", chartType); // 生成字段 jsonWr.beginArray("cols"); { jsonWr.beginMap(null); { jsonWr.addKeyValue("title", "时间"); jsonWr.addKeyValue("type", "time"); } jsonWr.endMap(); jsonWr.beginMap(null); { jsonWr.addKeyValue("title", "名称"); jsonWr.addKeyValue("type", "name"); } jsonWr.endMap(); jsonWr.beginMap(null); { jsonWr.addKeyValue("title", "值"); jsonWr.addKeyValue("type", "value"); } jsonWr.endMap(); } jsonWr.endArray(); // 生成过滤条件 if(_mapId2filterJson.size() > 0) { jsonWr.beginArray("filter"); for(SMTJsonWriter jsonFilter : _mapId2filterJson.values()) { jsonWr.addKeyRaw(null, jsonFilter.getRootJson()); } jsonWr.endArray(); } } @Override public void outputGroupToJson(String agentKey, SMTAIServerRequest tranReq) throws Exception { SMTJsonWriter jsonWrResult = tranReq.getResultJsonWr(); jsonWrResult.beginMap(null); { // 输出明细定义 outputDetailHeadJson(agentKey, jsonWrResult); String chatUnit = _listRecsValue.get(0)._listCubeRecs.get(0)._chartUnit; if(!SMTStatic.isNullOrEmpty(chatUnit)) jsonWrResult.addKeyValue("unit", chatUnit); SMTDatabase dbResult = tranReq.getResultDB(); // 查询数据 jsonWrResult.beginArray("values"); for(DuckMergeChart mergeChart : _listRecsValue) { for(DuckCubeRecs cubeRecs : mergeChart._listCubeRecs) { String sql = " SELECT " + cubeRecs._timeRange._timeField + "," + cubeRecs._timeRange._valueField + " FROM " + cubeRecs._tableName + " ORDER BY " + cubeRecs._timeRange._timeField ; dbResult.querySQLNotify(sql, null, new SMTDatabase.DBQueryNotify() { @Override public boolean onNextRecord(DBRecord rec) throws Exception { jsonWrResult.beginArray(null); { jsonWrResult.addKeyValue(null, rec.getString(cubeRecs._timeRange._timeField)); jsonWrResult.addKeyValue(null, cubeRecs._chartTitle); jsonWrResult.addKeyValue(null, rec.getString(cubeRecs._timeRange._valueField)); } jsonWrResult.endArray(); return true; } }); } } jsonWrResult.endArray(); } jsonWrResult.endMap(); } }