TangCheng
6 天以前 47fc68b2894ee24d6b98675f98829e648b42ace8
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/jsonflow/node/SMTJsonFlowNodeScript.java
@@ -1,14 +1,5 @@
package com.smtaiserver.smtaiserver.javaai.jsonflow.node;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.NativeArray;
import org.mozilla.javascript.NativeObject;
import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
import com.smtaiserver.smtaiserver.database.SMTDatabase;
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBQueryNotify;
@@ -21,8 +12,17 @@
import com.smtaiserver.smtaiserver.javaai.jsonflow.core.SMTJsonFlowNodeOnlyOutput;
import com.smtaiserver.smtaiserver.javaai.jsonflow.core.SMTJsonFlowScriptJet;
import com.smtservlet.util.Json;
import com.smtservlet.util.SMTHttpClient;
import com.smtservlet.util.SMTJsonWriter;
import com.smtservlet.util.SMTStatic;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map.Entry;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.NativeArray;
import org.mozilla.javascript.NativeObject;
public class SMTJsonFlowNodeScript extends SMTJsonFlowNodeOnlyOutput 
{
@@ -34,7 +34,29 @@
      {
         _execArg = execArg;
      }
      public String getGlobalConfig(String key, String defaultValue) throws Exception {
        String globalConfig = (String) SMTAIServerApp.getApp().getGlobalConfig(key, defaultValue);
        return globalConfig;
      }
      public String getNowDate() throws Exception {
         return SMTStatic.toString(new Date());
      }
      public String getUUID() throws Exception {
         return  SMTStatic.newUUID();
      }
      public  void webSocketBroadcast(NativeObject nativeObject) throws Exception {
         SMTJsonWriter jsonWr = new SMTJsonWriter(false);
         SMTAIServerApp.convJSToJsonWriter(nativeObject, jsonWr);
         SMTAIServerApp.getApp().webSocketApp(jsonWr.getFullJson());
      }
      
      public Object llmAnswerToJson(String sJson)
      {
         Object object = SMTAIServerApp.convJsonToJS(SMTStatic.convLLMAnswerToJson(sJson, false));
         return object;
      }
      public Object getArg(String key)
      {
         Json jsonValue = _execArg._jsonArgs.safeGetJson(key);
@@ -50,6 +72,58 @@
      public void setArg(String key, String value)
      {
         _execArg._jsonArgs.set(key, value);
      }
      public String getGlobalConfig(String key) throws Exception
      {
         Object value = SMTAIServerApp.getApp().getGlobalConfig(key, null);
         if(value == null)
            return null;
         return SMTStatic.toString(value);
      }
      public Object queryWeb(NativeObject nvConfig) throws Exception
      {
         String url = (String) SMTAIServerApp.getJSValue(nvConfig, "url");
         String method = (String) SMTAIServerApp.getJSValue(nvConfig, "method", "GET");
         String resultType = (String) SMTAIServerApp.getJSValue(nvConfig, "result_type", "String");
         String result;
         if("GET".equalsIgnoreCase(method))
         {
            List<String> listArgs = new ArrayList<>();
            NativeObject nvArgs = (NativeObject) SMTAIServerApp.getJSValue(nvConfig, "args", null);
            if(nvArgs != null)
            {
               for(Entry<Object, Object> entry : nvArgs.entrySet())
               {
                  listArgs.add(SMTStatic.toString(entry.getKey()));
                  listArgs.add(SMTStatic.toString(SMTAIServerApp.unwrapObject(entry.getValue())));
               }
            }
            SMTHttpClient web = new SMTHttpClient();
            result = web.getHttpString(url, listArgs.toArray(new String[listArgs.size()]), null);
         }
         else
         {
            throw new Exception("unknow web method : " + method);
         }
         if("String".equalsIgnoreCase(resultType))
         {
            return result;
         }
         else if("Json".equalsIgnoreCase(resultType))
         {
            return SMTAIServerApp.convJsonToJS(Json.read(result));
         }
         else
         {
            throw new Exception("unknow result type : " + resultType);
         }
      }
      
      public NativeArray getMapLayerList() throws Exception
@@ -247,13 +321,98 @@
         SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
         return querySQL(db, sql, nvParams);
      }
      public NativeArray querySQL(String dsId, String sql, NativeObject nvParams) throws Exception
      {
         SMTDatabase db = SMTAIServerApp.getApp().getDataSource(dsId).allocDatabase();
         return querySQL(db, sql, nvParams);
      }
      
      public int executeSQL(String sql, NativeObject nvParams) throws Exception
      {
         SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
         return executeSQL(db, sql, nvParams);
      }
      public int executeSQL(String dsId, String sql, NativeObject nvParams) throws Exception
      {
         SMTDatabase db = SMTAIServerApp.getApp().getDataSource(dsId).allocDatabase();
         return executeSQL(db, sql, nvParams);
      }
      private int executeSQL(SMTDatabase db, String sql, NativeObject nvParams) throws Exception
      {
         List<Object> sqlParams = new ArrayList<>();
         try
         {
            // 解析出原始sql
            String rawSQL = SMTStatic.stringFormat(sql, new SMTStatic.StringNamedNotify()
            {
               @Override
               public Object getNamedValue(String name, Object[] args) throws Exception
               {
                  char type;
                  String value = SMTStatic.toString(SMTAIServerApp.getJSValue(nvParams, name));
                  if(value.length() == 1)
                  {
                     type = value.charAt(0);
                     value = "";
                  }
                  else
                  {
                     type = value.charAt(0);
                     value = value.substring(1);
                  }
                  Object ovalue;
                  switch(type)
                  {
                  case 'N':
                     ovalue = null;
                     break;
                  case 'I':
                     ovalue = SMTStatic.toInt(value);
                     break;
                  case 'D':
                     ovalue = SMTStatic.toDouble(value);
                     break;
                  case 'L':
                     ovalue = SMTStatic.toLong(value);
                     break;
                  case 'T':
                     ovalue = SMTStatic.toDate(value);
                     break;
                  default:
                     ovalue = value;
                     break;
                  }
                  sqlParams.add(ovalue);
                  return "?";
               }
            });
            // 执行查询
            int ret = db.executeSQL(rawSQL, sqlParams.toArray(new Object[sqlParams.size()]));
            return ret;
         }
         finally
         {
            db.close();
         }
      }
      private NativeArray querySQL(SMTDatabase db, String sql, NativeObject nvParams) throws Exception
      {
         List<Object> sqlParams = new ArrayList<>();