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