已修改7个文件
已添加3个文件
618 ■■■■■ 文件已修改
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTJavaAIControl.java 177 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTLightRAGController.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/core/SMTAIServerEncache.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/jsonflow/node/SMTJsonFlowNodeScript.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/qwen/agent/SMTQwenAgentLightRAG.java 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/lightrag/LightragServer.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/resources/requestmap/java_ai.json 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/resources/requestmap/lightrag.json 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/resources/spring-config-aiserver.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTServlet/src/main/java/com/smtservlet/exception/SMTControlExceptionResolver.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTJavaAIControl.java
@@ -421,6 +421,133 @@
    return tranReq.returnJsonState(true, null, null);
  }
    public ModelAndView updateOrder(SMTAIServerRequest tranReq) throws Exception {
        String title = tranReq.convParamToString("title", true);
        String orderId = tranReq.convParamToString("orderId", true);
        String wstypeid = tranReq.convParamToString("wstypeid", false);
        String wstypename = tranReq.convParamToString("wstypename", false);
        String urgencylevel = tranReq.convParamToString("urgencylevel", false);
        String shape = tranReq.convParamToString("shape", false);
        String deadline = tranReq.convParamToString("deadline", false);
        String stepstatus = tranReq.convParamToString("stepstatus", false);
        String originatetypetext = tranReq.convParamToString("originatetypetext", false);
        String content = tranReq.convParamToString("content", false);
        String address = tranReq.convParamToString("address", false);
        String stepid = tranReq.convParamToString("stepid", false);
        String org = tranReq.convParamToString("org", false);
        String deptname = tranReq.convParamToString("deptname", false);
        String dealtime = tranReq.convParamToString("dealtime", false);
        String username = tranReq.convParamToString("username", false);
        String contactname = tranReq.convParamToString("contactname", false);
        String contactphone = tranReq.convParamToString("contactphone", false);
        String acceptuserid = tranReq.convParamToString("acceptuserid", false);
        String acceptusername = tranReq.convParamToString("acceptusername", false);
        String acceptuseraccount = tranReq.convParamToString("acceptuseraccount", false);
        String dealuserid = tranReq.convParamToString("dealuserid", false);
        String dealusername = tranReq.convParamToString("dealusername", false);
        String dealuseraccount = tranReq.convParamToString("dealuseraccount", false);
        String flowstatus = tranReq.convParamToString("flowstatus", false);
        String attachment = tranReq.convParamToString("attachment", false);
        String creator = tranReq.convParamToString("creator", false);
        String isplan = tranReq.convParamToString("isplan", false);
        String originateid = tranReq.convParamToString("originateid", false);
        String appointstarttime = tranReq.convParamToString("appointstarttime", false);
        String appointendtime = tranReq.convParamToString("appointendtime", false);
        String parentid = tranReq.convParamToString("parentid", false);
        String relateids = tranReq.convParamToString("relateids", false);
        String oname = tranReq.convParamToString("oname", false);
        String otype = tranReq.convParamToString("otype", false);
        SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
        try {
            db.executeSQL(
                    "UPDATE work_order_list SET "
                            + "title = ?, "
                            + "wstypeid = ?, "
                            + "wstypename = ?, "
                            + "urgencylevel = ?, "
                            + "shape = ?, "
                            + "deadline = ?, "
                            + "stepstatus = ?, "
                            + "originatetypetext = ?, "
                            + "content = ?, "
                            + "address = ?, "
                            + "step_id = ?, "
                            + "org = ?, "
                            + "deptname = ?, "
                            + "dealtime = ?, "
                            + "username = ?, "
                            + "contactname = ?, "
                            + "contactphone = ?, "
                            + "acceptuserid = ?, "
                            + "acceptusername = ?, "
                            + "acceptuseraccount = ?, "
                            + "dealuserid = ?, "
                            + "dealusername = ?, "
                            + "dealuseraccount = ?, "
                            + "flowstatus = ?, "
                            + "attachment = ?, "
                            + "creator = ?, "
                            + "createtime = ?, "
                            + "isplan = ?, "
                            + "originateid = ?, "
                            + "appointstarttime = ?, "
                            + "appointendtime = ?, "
                            + "parentid = ?, "
                            + "relateids = ?, "
                            + "is_notify = ?, "
                            + "oname = ?, "
                            + "otype = ? "
                            + "WHERE order_id = ?",
                    new Object[]{
                            title,
                            wstypeid,
                            wstypename,
                            urgencylevel,
                            shape,
                            deadline,
                            stepstatus,
                            originatetypetext,
                            content,
                            address,
                            stepid,
                            org,
                            deptname,
                            dealtime,
                            username,
                            contactname,
                            contactphone,
                            acceptuserid,
                            acceptusername,
                            acceptuseraccount,
                            dealuserid,
                            dealusername,
                            dealuseraccount,
                            flowstatus,
                            attachment,
                            creator,
                            new Date(),
                            isplan,
                            originateid,
                            appointstarttime,
                            appointendtime,
                            parentid,
                            relateids,
                            "N",
                            oname,
                            otype,
                            orderId
                    });
        } finally {
            db.close();
        }
        return tranReq.returnJsonState(true, null, null);
    }
  /**
   * èŠ‚ç‚¹çŠ¶æ€æ›´æ–°
   *
@@ -445,33 +572,35 @@
    return tranReq.returnJsonState(true, null, null);
  }
    public ModelAndView getOrderList(SMTAIServerRequest tranReq) throws Exception {
        SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
        SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
        try {
            DBRecords recs = db.querySQL("SELECT * FROM work_order_list", null);
            if (recs.getRowCount() != 0) {
                jsonWr.beginArray("values");  // å¼€å§‹ä¸€ä¸ªæ•°ç»„,key为 "values"
  public ModelAndView getOrderList(SMTAIServerRequest tranReq) throws Exception {
    SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
    SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
    try {
      DBRecords recs =
          db.querySQL(
              "SELECT *,ST_AsText(address_shape) as address_shape_str  ,ST_AsText(shape) as shape_str FROM work_order_list",
              null);
      if (recs.getRowCount() != 0) {
        jsonWr.beginArray("values"); // å¼€å§‹ä¸€ä¸ªæ•°ç»„,key为 "values"
                for (DBRecord rec : recs.getRecords()) {
                    jsonWr.beginMap(null);  // æ¯æ¡è®°å½•是一个对象
                    for (String colName : rec.getColNames()) {
                        jsonWr.addKeyValue(colName, rec.getString(colName));  // æ·»åŠ æ¯ä¸ªå­—æ®µ
                    }
                    jsonWr.endMap();  // ç»“束一个对象
                }
        for (DBRecord rec : recs.getRecords()) {
          jsonWr.beginMap(null); // æ¯æ¡è®°å½•是一个对象
          for (String colName : rec.getColNames()) {
            jsonWr.addKeyValue(colName, rec.getString(colName)); // æ·»åŠ æ¯ä¸ªå­—æ®µ
          }
          jsonWr.endMap(); // ç»“束一个对象
        }
                jsonWr.endArray();  // ç»“束数组
        jsonWr.endArray(); // ç»“束数组
                return tranReq.returnJson(jsonWr);
            } else {
                return tranReq.returnJsonState(false, "未找到工单", null);
            }
        } catch (Exception e) {
            throw new Exception("查询工单失败", e);
        }
    }
        return tranReq.returnJson(jsonWr);
      } else {
        return tranReq.returnJsonState(false, "未找到工单", null);
      }
    } catch (Exception e) {
      throw new Exception("查询工单失败", e);
    }
  }
    public ModelAndView disconnectBroadcastChat(SMTAIServerRequest tranReq) throws Exception 
    {
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTLightRAGController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
package com.smtaiserver.smtaiserver.control;
import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
import com.smtaiserver.smtaiserver.database.SMTDatabase;
import com.smtservlet.core.SMTRequest;
import com.smtservlet.util.SMTJsonWriter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import java.util.HashMap;
import java.util.Map;
/** lightRag controller */
public class SMTLightRAGController {
  private static Logger _logger = LogManager.getLogger(SMTLightRAGController.class);
  /**
   * èŽ·å–lightrag服务的启动列表
   *
   * @param tranReq
   * @return
   * @throws Exception
   */
  public ModelAndView getLightragServerList(SMTRequest tranReq) throws Exception {
    SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
    try {
      SMTDatabase.DBRecords records = db.querySQL("SELECT * FROM lightrag_server_list", null);
      if (records.getRowCount() == 0) return tranReq.returnJsonState(true, null, null);
      SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
      for (int i = 0; i < records.getRowCount(); i++) {
        SMTDatabase.DBRecord record = records.getRecord(i);
        jsonWr.addKeyValue("server_id", record.getValue("server_id"));
        jsonWr.addKeyValue("server_title", record.getValue("server_title"));
        jsonWr.addKeyValue("server_port", record.getValue("server_port"));
        jsonWr.addKeyValue("is_enable", record.getValue("is_enable"));
      }
      return tranReq.returnJson(jsonWr);
    } catch (Exception e) {
      throw new Exception("getLightragServerList error" + e);
    } finally {
      db.close();
    }
  }
  public ModelAndView updateLightragServerEnable(SMTRequest tranReq) throws Exception {
    SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
    try {
      // ä»Žè¯·æ±‚中获取参数
      String serverId = tranReq.convParamToString("server_id", true);
      String isEnable = tranReq.convParamToString("is_enable", true);
      // å‚数校验
      if (serverId == null || isEnable == null) {
        return tranReq.returnJsonState(false, "参数缺失: server_id æˆ– is_enable ä¸èƒ½ä¸ºç©º", null);
      }
      // æ‰§è¡Œæ›´æ–°
      Map<String, Object> params = new HashMap<>();
      params.put("server_id", serverId);
      params.put("is_enable", isEnable);
      int affectedRows =
          db.executeSQL(
              "UPDATE lightrag_server_list SET is_enable = ? WHERE server_id = ?",
              new Object[] {isEnable, serverId});
      if (affectedRows == 0) {
        return tranReq.returnJsonState(false, "未找到对应的 server_id,更新失败", null);
      }
      // æˆåŠŸè¿”å›ž
      return tranReq.returnJsonState(true, null, null);
    } catch (Exception e) {
      throw new Exception("updateLightragServerEnable error: " + e);
    } finally {
      db.close();
    }
  }
  public ModelAndView addLightragServer(SMTRequest tranReq) throws Exception {
    SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
    try {
      // ä»Žè¯·æ±‚中获取参数
      String serverId = tranReq.convParamToString("server_id", true);
      String serverTitle = tranReq.convParamToString("server_title", true);
      String serverPort = tranReq.convParamToString("server_port", true);
      String isEnable = tranReq.convParamToString("is_enable", true);
      // å‚数校验
      if (serverId == null || serverTitle == null || serverPort == null || isEnable == null) {
        return tranReq.returnJsonState(
            false, "参数缺失: server_id、server_title、server_port、is_enable ä¸èƒ½ä¸ºç©º", null);
      }
      // å…ˆæŸ¥è¯¢ server_id æ˜¯å¦å·²å­˜åœ¨
      SMTDatabase.DBRecords existingRecords =
          db.querySQL(
              "SELECT server_id FROM lightrag_server_list WHERE server_id = ?",
              new Object[] {serverId});
      if (existingRecords.getRowCount() > 0) {
        return tranReq.returnJsonState(false, "server_id å·²å­˜åœ¨ï¼Œä¸èƒ½é‡å¤æ–°å¢ž", null);
      }
      // æ‰§è¡Œæ’å…¥
      int affectedRows =
          db.executeSQL(
              "INSERT INTO lightrag_server_list (server_id, server_title, server_port, is_enable) VALUES (?, ?, ?, ?)",
              new Object[] {serverId, serverTitle, serverPort, isEnable});
      if (affectedRows == 0) {
        return tranReq.returnJsonState(false, "新增失败", null);
      }
      // æˆåŠŸè¿”å›ž
      return tranReq.returnJsonState(true, null, null);
    } catch (Exception e) {
      throw new Exception("addLightragServer error: " + e);
    } finally {
      db.close();
    }
  }
}
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/core/SMTAIServerEncache.java
@@ -4,6 +4,8 @@
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.locationtech.proj4j.CRSFactory;
import org.locationtech.proj4j.CoordinateReferenceSystem;
import org.locationtech.proj4j.CoordinateTransform;
@@ -29,6 +31,7 @@
import com.smtaiserver.smtaiserver.javaai.metrics.base.SMTMetricsDef;
import com.smtaiserver.smtaiserver.javaai.querydetail.SMTAIQueryDetail;
import com.smtaiserver.smtaiserver.javaai.qwen.SMTQwenAgentManager;
import com.smtaiserver.smtaiserver.javaai.qwen.SMTQwenApp;
import com.smtaiserver.smtaiserver.javaai.qwen.agent.SMTQwenAgent;
import com.smtaiserver.smtaiserver.javaai.qwen.agent.SMTQwenAgentKnowlgFile;
import com.smtservlet.util.Json;
@@ -38,6 +41,8 @@
{
    @Value("${hswater.tables.global_config}")
    protected String                        _tableGlobalConfig;
    private static Logger                     _logger = LogManager.getLogger(SMTQwenApp.class);
    
    public static String makeQueryStringAllRegExp(String str)
    {
@@ -308,9 +313,16 @@
                    @Override
                    public boolean onNextRecord(DBRecord rec) throws Exception 
                    {
                        SMTQwenAgent agent = (SMTQwenAgent)Class.forName(rec.getString("clz_name")).newInstance();
                        agent.initInstance(rec);
                        manager.addAgent(agent);
                        try
                        {
                            SMTQwenAgent agent = (SMTQwenAgent)Class.forName(rec.getString("clz_name")).newInstance();
                            agent.initInstance(rec);
                            manager.addAgent(agent);
                        }
                        catch(Exception ex)
                        {
                            _logger.fatal("load agent error and skip it : " + rec.getString("agent_id"), ex);
                        }
                        
                        return true;
                    }
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/jsonflow/node/SMTJsonFlowNodeScript.java
@@ -93,6 +93,12 @@
            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)
        {
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/javaai/qwen/agent/SMTQwenAgentLightRAG.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,172 @@
package com.smtaiserver.smtaiserver.javaai.qwen.agent;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
import com.smtaiserver.smtaiserver.core.SMTAIServerRequest;
import com.smtaiserver.smtaiserver.database.SMTDatabase;
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord;
import com.smtaiserver.smtaiserver.javaai.SMTJavaAIError;
import com.smtaiserver.smtaiserver.javaai.llm.core.SMTLLMConnect;
import com.smtservlet.util.Json;
import com.smtservlet.util.SMTJsonWriter;
import com.smtservlet.util.SMTStatic;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletResponse;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
public class SMTQwenAgentLightRAG extends SMTQwenAgent
{
    public String port;
    public static class SMTQueryServerInfo {
        public String _serverId;
        public String _alias;
        public String _querySql;
        public SMTQueryServerInfo(Element element) {
            _serverId = element.attributeValue("server_id");
            _alias = element.attributeValue("alias");
            Element queryElement = element.element("QUERY_NAME");
            _querySql = queryElement.getText().trim();
        }
        public DBRecord queryServer(SMTDatabase db) throws Exception {
            SMTDatabase.DBRecords recs = db.querySQL(_querySql, null);
            if (recs.getRowCount() > 0) {
                return recs.getRecord(0);
            } else {
                throw new Exception("未找到 server_id=" + _serverId + " çš„记录");
            }
        }
    }
    @Override
    public void initInstance(DBRecord rec) throws Exception
    {
        super.initInstance(rec);
        try {
            SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
            try {
                // 1. åŠ è½½ XML
                Document doc = SMTStatic.convStrToXmlDoc("<ROOT>" + rec.getString("clz_arguments") + "</ROOT>");
                // 2. è§£æž SERVER_LIST
                for (Node node : doc.selectNodes("ROOT/SERVER_LIST/SERVER_SQL")) {
                    SMTQueryServerInfo server = new SMTQueryServerInfo((Element) node);
                    DBRecord serverRec = server.queryServer(db);
                    port= serverRec.getString("server_port");
                    System.out.println("Server æŸ¥è¯¢ç»“æžœ: " + serverRec);
                }
            } finally {
                db.close();
            }
        } catch (Exception ex) {
            throw new Exception("init server info error : " + this._agentId, ex);
        }
    }
    @Override
    public SMTJavaAIError callAgents(String jsonPath, Json jsonArgs, SMTLLMConnect llm, String question, SMTAIServerRequest tranReq) throws Exception
    {
        SMTJsonWriter jsonWrResult = tranReq.getResultJsonWr();
        StringBuilder sbAnswer = new StringBuilder();
        SMTJavaAIError error = callRAGServer(question, tranReq, sbAnswer);
        if(error != null)
            return error;
        jsonWrResult.addKeyValue("json_ok", true);
        jsonWrResult.addKeyValue("answer_type", "knowledge");
        jsonWrResult.beginArray("knowledge");
        {
            jsonWrResult.beginMap(null);
            jsonWrResult.addKeyValue("answer", sbAnswer.toString());
            jsonWrResult.endMap();
        }
        jsonWrResult.endArray();
        return null;
    }
    private SMTJavaAIError callRAGServer(String question, SMTAIServerRequest tranReq, StringBuilder sbAnswer) throws Exception {
    System.out.println("进入了light");
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .readTimeout(0, TimeUnit.SECONDS) // ä¸è¶…时,支持流
                .build();
        HttpServletResponse response = tranReq.getResponse();
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        SMTJsonWriter jsonWriter = new SMTJsonWriter(false);
        jsonWriter.addKeyValue("query",question);
        jsonWriter.addKeyValue("mode","global");
        jsonWriter.addKeyValue("response_type","Multiple Paragraphs");
        jsonWriter.addKeyValue("top_k",10);
        jsonWriter.addKeyValue("max_token_for_text_unit",4000);
        jsonWriter.addKeyValue("max_token_for_global_context",4000);
        jsonWriter.addKeyValue("max_token_for_local_context",4000);
        jsonWriter.addKeyValue("only_need_context",false);
        jsonWriter.addKeyValue("only_need_prompt",false);
        jsonWriter.addKeyValue("stream",true);
        jsonWriter.addKeyValue("history_turns",3);
        String json = jsonWriter.getRootJson().toString();
        RequestBody body = RequestBody.create(MediaType.parse("application/json"), json);
        String streamHook ="http://localhost:"+port;
        String lightragQueyStream = (String)SMTAIServerApp.getApp().getGlobalConfig("lightrag_quey_stream");
        Request request = new Request.Builder()
                .url(streamHook+lightragQueyStream)
                .post(body)
                .build();
        tranReq.sendChunkedBlock("begin_stream", "");
        ObjectMapper objectMapper = new ObjectMapper(); // ç”¨äºŽè§£æž JSON
        try (Response lightRagResp = okHttpClient.newCall(request).execute()) {
            if (lightRagResp.body() != null) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(lightRagResp.body().byteStream(), StandardCharsets.UTF_8));
                String line;
                while ((line = reader.readLine()) != null) {
                    try {
                        // æ¯è¡Œæ˜¯ {"response": "xxx"},我们只取出 "xxx"
                        JsonNode node = objectMapper.readTree(line);
                        String content = node.get("response").asText(); // è‡ªåŠ¨å¤„ç†ç¼–ç é—®é¢˜ï¼Œè¿”å›žçš„æ˜¯ä¸­æ–‡
                        // é€å­—符推送
                        for (char ch : content.toCharArray()) {
                            tranReq.sendChunkedStreamBlock(com.smtservlet.util.SMTStatic.toString(ch));
                            sbAnswer.append(ch);
                            Thread.sleep(50);
                        }
                    } catch (Exception e) {
                        System.err.println("解析失败:" + line);
                    }
                }
            }
        } catch (Exception e) {
            String errMsg = "调用 LightRAG å¤±è´¥: " + e.getMessage();
            for (char ch : errMsg.toCharArray()) {
                tranReq.sendChunkedStreamBlock(com.smtservlet.util.SMTStatic.toString(ch));
                sbAnswer.append(ch);
            }
        } finally {
            tranReq.sendChunkedBlock("end_stream", "");
        }
        return null;
    }
}
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/lightrag/LightragServer.java
@@ -1,8 +1,11 @@
package com.smtaiserver.smtaiserver.lightrag;
import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord;
import com.smtservlet.util.Json;
import com.smtservlet.util.SMTStatic;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.BindException;
@@ -11,15 +14,8 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
import com.smtaiserver.smtaiserver.database.SMTDatabase.DBRecord;
import com.smtservlet.util.Json;
import com.smtservlet.util.SMTStatic;
public class LightragServer
{
@@ -67,11 +63,16 @@
        
        ProcessBuilder pbuilder=new ProcessBuilder(SMTStatic.convProcessArg(params)); 
        pbuilder.redirectErrorStream(true);
        // è®¾ç½® PYTHONIOENCODING çŽ¯å¢ƒå˜é‡ä¸º utf-8,确保 Python è¾“出使用 UTF-8 ç¼–码
        pbuilder.directory(new File(jsonConfig.getJson("path").asString()));
        Map<String, String> runEnv = pbuilder.environment();
        runEnv.put("PYTHONIOENCODING", "utf-8");
        SMTAIServerApp.getApp().setLightragServerDbEnv(runEnv);
        runEnv.put("POSTGRES_WORKSPACE", _id);
        runEnv.put("PORT", _port);
        runEnv.put("PYTHONIOENCODING", "utf-8");
        _process = pbuilder.start();
        
        _thread = new Thread() 
JAVA/SMTAIServer/src/main/resources/requestmap/java_ai.json
@@ -476,6 +476,51 @@
                ]
            }
        ]
    },
    "sys/update_order":{
        "map":{"class":"#SMTJavaAIControl", "method":"updateOrder"}, "no_shrio":false,
        "swaggers":[
            {
                "tags" : ["修改工单内容"],
                "title" : "修改工单内容",
                "parameters" : [
                    {"name": "title", "title": "标题", "required": false},
                    {"name": "wstypeid", "title": "类型编号", "required": false},
                    {"name": "wstypename", "title": "类型名称", "required": false},
                    {"name": "urgencylevel", "title": "紧急级别", "required": false},
                    {"name": "shape", "title": "派单坐标", "required": false},
                    {"name": "deadline", "title": "处理时限", "required": false},
                    {"name": "stepstatus", "title": "工单进度状态", "required": false},
                    {"name": "originatetypetext", "title": "来源类型", "required": false},
                    {"name": "content", "title": "内容", "required": false},
                    {"name": "address", "title": "地址", "required": false},
                    {"name": "stepid", "title": "工单步骤", "required": false},
                    {"name": "org", "title": "所属分公司", "required": false},
                    {"name": "deptname", "title": "工单所属部门名称", "required": false},
                    {"name": "dealtime", "title": "处理时间", "required": false},
                    {"name": "username", "title": "用户名称", "required": false},
                    {"name": "contactname", "title": "联系人", "required": false},
                    {"name": "contactphone", "title": "联系电话", "required": false},
                    {"name": "acceptuserid", "title": "接单人id", "required": false},
                    {"name": "acceptusername", "title": "接单人名称", "required": false},
                    {"name": "acceptuseraccount", "title": "接单人账号", "required": false},
                    {"name": "dealuserid", "title": "处理人id", "required": false},
                    {"name": "dealusername", "title": "处理人名称", "required": false},
                    {"name": "dealuseraccount", "title": "处理人账号", "required": false},
                    {"name": "flowstatus", "title": "工单状态", "required": false},
                    {"name": "attachment", "title": "附件", "required": false},
                    {"name": "creator", "title": "创建人", "required": false},
                    {"name": "createtime", "title": "创建时间", "required": false},
                    {"name": "isplan", "title": "是否计划工单", "required": false},
                    {"name": "originateid", "title": "来源编号", "required": false},
                    {"name": "appointstarttime", "title": "预约开始时间", "required": false},
                    {"name": "appointendtime", "title": "预约结束时间", "required": false},
                    {"name": "parentid", "title": "父级编号", "required": false},
                    {"name": "relateids", "title": "关联编号", "required": false},
                    {"name": "orderId", "title": "工单id", "required": true}
                ]
            }
        ]
    }
JAVA/SMTAIServer/src/main/resources/requestmap/lightrag.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
{
    "lightrag/get_lightrag_server_list":{"map":{"class":"#SMTLightRAGController", "method":"getLightragServerList"},
            "swaggers":[
            {    "tags" : ["获取lightrag服务的启动列表"],
                "title" : "获取lightrag服务的启动列表",
                "parameters" : [
                ]
            }
        ]
    },
    "lightrag/update_lightrag_server_enable":{"map":{"class":"#SMTLightRAGController", "method":"updateLightragServerEnable"},
        "swaggers":[
            {    "tags" : ["修改lightrag服务是否发布状态"],
                "title" : "获取lightrag服务的启动列表",
                "parameters" : [
                    {"name":"server_id", "title":"服务id", "required":true},
                    {"name":"is_enable", "title":"是否发布", "required":true}
                ]
            }
        ]
    },
    "lightrag/add_lightrag_server": {
        "map": {
            "class": "#SMTLightRAGController",
            "method": "addLightragServer"
        },
        "swaggers": [
            {
                "tags": ["新增lightrag服务"],
                "title": "新增lightrag服务信息",
                "parameters": [
                    {"name": "server_id", "title": "服务id(唯一)", "required": true},
                    {"name": "server_title", "title": "服务名称", "required": true},
                    {"name": "server_port", "title": "服务端口", "required": true},
                    {"name": "is_enable", "title": "是否发布(0-否 1-是)", "required": true}
                ]
            }
        ]
    }
}
JAVA/SMTAIServer/src/main/resources/spring-config-aiserver.xml
@@ -31,6 +31,7 @@
     <bean id="SMTSupervisorManagerControl" class="com.smtaiserver.smtaiserver.control.SMTSupervisorManagerControl"/>
     <bean id="SMTMetricsManagerControl" class="com.smtaiserver.smtaiserver.control.SMTMetricsManagerControl"/>
     <bean id="SMTSystemManagerControl" class="com.smtaiserver.smtaiserver.control.SMTSystemManagerControl"/>
     <bean id="SMTLightRAGController" class="com.smtaiserver.smtaiserver.control.SMTLightRAGController"/>
     <bean id="SMTWorkflowManagerControl" class="com.smtaiserver.smtaiserver.control.SMTWorkflowManagerControl"/>
     <bean id="SMTAIMapControl" class="com.smtaiserver.smtaiserver.control.SMTAIMapControl"/>
     <bean id="SMTAIWeixinControl" class="com.smtaiserver.smtaiserver.control.SMTAIWeixinControl"/>
JAVA/SMTServlet/src/main/java/com/smtservlet/exception/SMTControlExceptionResolver.java
@@ -45,13 +45,13 @@
                HttpServletRequest request,
                HttpServletResponse response) throws Exception {
            
            if(request.getMethod().equalsIgnoreCase("GET"))
            {
                response.setCharacterEncoding("UTF-8");
                response.setContentType("text/html;charset=UTF-8");
                response.getOutputStream().write(_msg.getBytes("UTF-8"));
            }
            else
//            if(request.getMethod().equalsIgnoreCase("GET"))
//            {
//                response.setCharacterEncoding("UTF-8");
//                response.setContentType("text/html;charset=UTF-8");
//                response.getOutputStream().write(_msg.getBytes("UTF-8"));
//            }
//            else
            {
                if(_url != null)
                {