From 6c44fbb4096df891b153f87a1961e99a0fe6c4eb Mon Sep 17 00:00:00 2001 From: TangCheng <tangchengmail@163.com> Date: 星期四, 03 四月 2025 19:17:17 +0800 Subject: [PATCH] 完善脚本agent代码 --- JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/qwen/agent/script/SMTQwenAgentScriptScope.java | 177 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 170 insertions(+), 7 deletions(-) diff --git a/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/qwen/agent/script/SMTQwenAgentScriptScope.java b/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/qwen/agent/script/SMTQwenAgentScriptScope.java index a637ac4..53f31fd 100644 --- a/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/qwen/agent/script/SMTQwenAgentScriptScope.java +++ b/JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/qwen/agent/script/SMTQwenAgentScriptScope.java @@ -82,20 +82,183 @@ // 杩斿洖: // 灏嗘煡璇㈠悗鐨勭粨鏋滆繑鍥� // 鏍煎紡锛歔{瀛楁1:鍊�1, 瀛楁2:鍊�2},{瀛楁1:鍊�3, 瀛楁2:鍊�4}...] - public NativeArray queryRecord(String tableName, NativeArray arrColumns, NativeObject arrTimeGroup, NativeArray arrOrderColumns, NativeObject arrLimit, NativeArray arrFilters) throws Exception + public NativeArray queryRecord(String tableName, NativeArray arrColumns, NativeObject nvTimeGroup, NativeArray arrOrderColumns, NativeObject nvLimit, NativeArray arrFilters) throws Exception { - StringBuilder sbSQL = new StringBuilder(); - sbSQL.append("SELECT "); + // 鍔犲叆瀛楁 + StringBuilder sbColumn = new StringBuilder(); for(int i = 0; i < arrColumns.size(); i ++) { String colName = SMTStatic.toString(SMTAIServerApp.unwrapObject(arrColumns.get(i))); if(i > 0) - sbSQL.append(","); - sbSQL.append(colName); + sbColumn.append(","); + sbColumn.append(colName); + } + + // 鍔犲叆琛ㄥ悕 + StringBuilder sbTable = new StringBuilder(); + + boolean isDevice = false; + if("dev_names".equals(tableName)) + { + tableName = + " (SELECT\r\n" + + " N.title AS DEVICE_NAME,\r\n" + + " Q.otype AS QUOTA_TYPE,\r\n" + + " Q.oname AS QUOTA_NAME\r\n" + + " FROM\r\n" + + " (SELECT * FROM sd_names.sd_dev_pressure WHERE ver_timee = '5000-01-01'::timestamp) N\r\n" + + " INNER JOIN\r\n" + + " (SELECT * FROM sd_names.sd_quota_names WHERE ver_timee = '5000-01-01'::timestamp) Q\r\n" + + " ON\r\n" + + " N.otype = Q.ptype AND N.oname = Q.pname" + + ") T"; + isDevice = true; + } + else if("quota_values".equals(tableName)) + { + tableName = "(SELECT otime, sdval, otype as QUOTA_TYPE, oname as QUOTA_NAME FROM sd_values.sd_raws_match) T"; + } + + sbTable.append(tableName); + + // 鍔犲叆杩囨护鏉′欢 + StringBuilder sbWhere = new StringBuilder(); + if(arrFilters != null && arrFilters.size() > 0) + { + for(int i = 0; i < arrFilters.size(); i ++) + { + if(sbWhere.length() > 0) + sbWhere.append(" AND "); + + NativeObject nvFilter = (NativeObject) SMTAIServerApp.unwrapObject(arrFilters.get(i)); + String colName = (String)SMTAIServerApp.getJSValue(nvFilter, "col"); + String filterOP = (String)SMTAIServerApp.getJSValue(nvFilter, "op"); + if("BETWEEN".equalsIgnoreCase(filterOP)) + { + sbWhere.append(colName + " BETWEEN "); + NativeArray arrValues = (NativeArray)SMTAIServerApp.getJSValue(nvFilter, "value"); + sbWhere.append("'" + SMTStatic.toString(SMTAIServerApp.unwrapObject(arrValues.get(0))).replace("'", "''") + "'"); + sbWhere.append(" AND "); + sbWhere.append("'" + SMTStatic.toString(SMTAIServerApp.unwrapObject(arrValues.get(1))).replace("'", "''") + "'"); + } + else + { + if(isDevice) + { + if("DEVICE_NAME".equalsIgnoreCase(colName)) + { + sbWhere.append("DEVICE_NAME LIKE '%"); + sbWhere.append(SMTStatic.toString(SMTAIServerApp.unwrapObject(SMTAIServerApp.getJSValue(nvFilter, "value"))).replace("'", "''")); + sbWhere.append("%'"); + } + else if("QUOTA_TYPE".equalsIgnoreCase(colName)) + { + sbWhere.append("QUOTA_TYPE = 'SDVAL_PRESS_W'"); + } + else + { + sbWhere.append(colName + " " + filterOP + " "); + sbWhere.append("'" + SMTStatic.toString(SMTAIServerApp.unwrapObject(SMTAIServerApp.getJSValue(nvFilter, "value"))).replace("'", "''") + "'"); + } + } + else + { + sbWhere.append(colName + " " + filterOP + " "); + sbWhere.append("'" + SMTStatic.toString(SMTAIServerApp.unwrapObject(SMTAIServerApp.getJSValue(nvFilter, "value"))).replace("'", "''") + "'"); + } + } + sbWhere.append("\n"); + } } - - return null; + // 鍔犲叆鎺掑簭淇℃伅 + StringBuilder sbOrder = new StringBuilder(); + if(arrOrderColumns != null) + { + for(int i = 0; i < arrOrderColumns.size(); i ++) + { + if(sbOrder.length() > 0) + sbOrder.append(","); + + NativeObject nvOrderColumn = (NativeObject) SMTAIServerApp.unwrapObject(arrOrderColumns.get(i)); + String colName = (String) SMTAIServerApp.getJSValue(nvOrderColumn, "col"); + String orderDir= (String) SMTAIServerApp.getJSValue(nvOrderColumn, "order"); + + sbOrder.append(colName + " " + orderDir); + } + } + + // 鍔犲叆limit + StringBuilder sbLimit = new StringBuilder(); + if(nvLimit != null) + { + SMTAIServerApp.getApp(); + int limit = SMTStatic.toInt(SMTAIServerApp.getJSValue(nvLimit, "limit")); + sbLimit.append("LIMIT " + limit); + + Object oStart = SMTAIServerApp.getJSValue(nvLimit, "start", null); + if(oStart != null) + sbLimit.append(" OFFSET " + SMTStatic.toInt(oStart)); + } + + // 鏁村悎SQL + StringBuilder sbSQL = new StringBuilder(); + sbSQL.append("SELECT \n"); + sbSQL.append(sbColumn.toString() + "\n"); + sbSQL.append("FROM " + sbTable.toString() + "\n"); + if(sbWhere.length() > 0) + sbSQL.append("WHERE " + sbWhere.toString() + "\n"); + + if(sbOrder.length() > 0) + sbSQL.append("ORDER BY " + sbOrder.toString() + "\n"); + + if(sbLimit.length() > 0) + sbSQL.append(" " + sbLimit.toString()); + + String sql = sbSQL.toString(); + + // {"col":鏃堕棿瀛楁, "agg":鑱氬悎鏂瑰紡(渚嬪:AVG,SUM,MAX,MIN绛�), "time":鍒嗙粍鏃堕棿娈�(渚嬪:1 hours, 1 days锛屽鏋滈棶棰樹腑鏈彁鍒版椂闂存闀匡紝鍒欎笉璁剧疆銆傜姝㈡崗閫犱笉瀛樺湪鐨勬椂闂存闀�)}锛屽鏋滀笉瀛樺湪锛屽垯璁剧疆涓簄ull + if(nvTimeGroup != null) + { + String colTime = (String) SMTAIServerApp.getJSValue(nvTimeGroup, "col"); + String funcAgg = (String) SMTAIServerApp.getJSValue(nvTimeGroup, "agg_func"); + String colAgg = (String) SMTAIServerApp.getJSValue(nvTimeGroup, "agg_col"); + String timeStep = (String) SMTAIServerApp.getJSValue(nvTimeGroup, "time", null); + + if(SMTStatic.isNullOrEmpty(timeStep)) + { + sql = "SELECT " + funcAgg + "(" + colAgg + ") AS " + colAgg + " FROM (" + sql + ") T"; + } + else + { + sql = + " SELECT time_bucket('" + timeStep + "', " + colTime + ") AS " + colTime + "," + funcAgg + "(" + colAgg + ") AS " + colAgg + + " FROM (" + sql + ") T" + + " GROUP BY time_bucket('" + timeStep + "', " + colTime + ")" + ; + } + } + + + SMTDatabase db = _dbMap.getDatabase("DS_43"); + List<NativeObject> recList = new ArrayList<>(); + db.querySQLNotify(sql, null, new DBQueryNotify() { + @Override + public boolean onNextRecord(DBRecord rec) throws Exception + { + NativeObject nvRec = new NativeObject(); + recList.add(nvRec); + for(Entry<String, Integer> entry : rec.getFieldMap().entrySet()) + { + SMTAIServerApp.putJSNotNullValue(nvRec, + entry.getKey(), rec.getValue(entry.getValue())); + } + return true; + } + + }); + + return new NativeArray(recList.toArray(new NativeObject[recList.size()])); } public NativeArray queryRecord1(String tableName, NativeArray arrColumns, NativeObject arrTimeGroup, NativeArray arrOrderColumns, NativeObject arrLimit, NativeArray arrFilters) throws Exception -- Gitblit v1.9.3