unknown
2025-03-10 e2782dd256f228da065f4fef7db1e3aacf32dc23
指标接口、文件转txtdemo和文件下载
已修改9个文件
已添加8个文件
266 ■■■■■ 文件已修改
JAVA/SMTAIServer/pom.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/attach/SMTAIAttachMetricDef.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/attach/SMTAIAttachTableDef.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/attach/SMTAttachMetricSqlXml.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/attach/SMTAttachTableSqlXml.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTJavaAIControl.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/core/SMTAIServerApp.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/core/SMTAIServerRequest.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/src/main/resources/requestmap/java_ai.json 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServerBoot/.idea/.gitignore 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServerBoot/.idea/compiler.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServerBoot/.idea/encodings.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServerBoot/.idea/google-java-format.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServerBoot/.idea/inspectionProfiles/Project_Default.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServerBoot/.idea/jarRepositories.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServerBoot/.idea/misc.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServerBoot/.idea/vcs.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
JAVA/SMTAIServer/pom.xml
@@ -12,6 +12,23 @@
    <dependencies>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.27</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>5.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.2</version>
        </dependency>
        <dependency>
            <groupId>com.smtservlet</groupId>
            <artifactId>SMTServlet</artifactId>
            <version>0.0.1-SNAPSHOT</version>
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/attach/SMTAIAttachMetricDef.java
@@ -72,14 +72,15 @@
        }
    }
    
    public void queryValueToJson(Date startTime, Date endTime, Json jsonQuotaKey, SMTJsonWriter jsonWr) throws Exception
    public void queryValueToJson(Date startTime, Date endTime, Json jsonQuotaKey, SMTJsonWriter jsonWr,Integer limit) throws Exception
    {
        try(ASTDBMap dbMap = new ASTDBMap())
        {
            Map<String, String> mapArgs = new HashMap<>();
            mapArgs.put("start_time", SMTStatic.toString(startTime));
            mapArgs.put("end_time", SMTStatic.toString(endTime));
            mapArgs.put("limit", SMTStatic.toString(limit));
            for(Entry<String, Json> entry : jsonQuotaKey.asJsonMap().entrySet())
            {
                mapArgs.put(entry.getKey(), entry.getValue().asString());
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/attach/SMTAIAttachTableDef.java
@@ -107,11 +107,11 @@
        return _group;
    }    
    
    public void queryRecordsToJson(Json jsonFilter, Json jsonOrder, SMTJsonWriter jsonWr) throws Exception
    public void queryRecordsToJson(Json jsonFilter, Json jsonOrder, SMTJsonWriter jsonWr,Integer limit) throws Exception
    {
        try(ASTDBMap dbMap = new ASTDBMap())
        {
            _sqlXml.querySQLToJson(dbMap, jsonFilter, jsonOrder, this, jsonWr);
            _sqlXml.querySQLToJson(dbMap, jsonFilter, jsonOrder, this, jsonWr,limit);
        }
    }
}
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/attach/SMTAttachMetricSqlXml.java
@@ -132,13 +132,18 @@
        _SQLXMLNode = createSQLXMLNode(rootElement);
    }
    public String createSQL(Map<String, String> mapArgs) throws Exception
    public String createSQL(Map<String, String> mapArgs) throws Exception
    {
        // ç”ŸæˆåŽŸå§‹SQL
        SQLXMLExecArg execArg = new SQLXMLExecArg(mapArgs);
        _SQLXMLNode.execute(execArg);
        return execArg._sbSQLText.toString();
        String sql = execArg._sbSQLText.toString();
        if (mapArgs!=null){
        sql = sql.replace("LIMIT\n" +
                "      100", "LIMIT " + mapArgs.get("limit"));
        }
        return sql;
    }
}
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/attach/SMTAttachTableSqlXml.java
@@ -103,7 +103,7 @@
        _SQLXMLNode = createSQLXMLNode(rootElement);
    }
    public void querySQLToJson(ASTDBMap dbMap, Json jsonFilters, Json jsonOrders, SMTAIAttachTableDef attachTableDef, SMTJsonWriter jsonWr) throws Exception
    public void querySQLToJson(ASTDBMap dbMap, Json jsonFilters, Json jsonOrders, SMTAIAttachTableDef attachTableDef, SMTJsonWriter jsonWr,Integer limit) throws Exception
    {
        // ç”ŸæˆåŽŸå§‹SQL
        SQLXMLExecArg execArg = new SQLXMLExecArg();
@@ -159,9 +159,10 @@
        
        SMTDatabase db = dbMap.getDatabase(_dsId);
        DBRecords recs = db.querySQL(
            "SELECT * FROM (" + execArg._sbSQLText.toString() + ") T " + sbWHERE.toString() + " " + sbORDER.toString() + " LIMIT 100",
            execArg._sqlParams.size() == 0 ? null : execArg._sqlParams.toArray(new Object[] {execArg._sqlParams.size()})
                "SELECT * FROM (" + execArg._sbSQLText.toString() + ") T " + sbWHERE.toString() + " " + sbORDER.toString() + " LIMIT "+limit,
                        execArg._sqlParams.isEmpty() ? null : execArg._sqlParams.toArray()
        );
        
        jsonWr.beginArray("columns");
        for(SMTAIAttachTableColumn column : attachTableDef.getColumnList())
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/control/SMTJavaAIControl.java
@@ -13,6 +13,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
@@ -127,7 +128,13 @@
                tranReq.setAttachTables(jsonTables);
                _mustRawMode = true;
            }
            Json jsonMetrics = tranReq.convParamToJson("metrics", false);
            if(jsonMetrics != null)
            {
                tranReq.setJsonAttachMetrics(jsonMetrics);
                _mustRawMode = true;
            }
            _tranReq = tranReq;
            _tranReq.setChunkedMode(true);
        }
@@ -1239,10 +1246,12 @@
        String attachTableId = tranReq.convParamToString("id", true);
        Json jsonFilters = tranReq.convParamToJson("filter", false);
        Json jsonOrders = tranReq.convParamToJson("order", false);
        Integer limit = tranReq.convParamToInteger("limit", false);
        SMTAIAttachTableDef attachTableDef = (SMTAIAttachTableDef) SMTAIServerApp.getApp().getAttachTableDef(attachTableId);
        if (limit==null)
            limit=100;
        SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
        attachTableDef.queryRecordsToJson(jsonFilters, jsonOrders, jsonWr);
        attachTableDef.queryRecordsToJson(jsonFilters, jsonOrders, jsonWr,limit);
        
        return tranReq.returnJson(jsonWr);
        
@@ -1288,11 +1297,13 @@
        Date startTime = tranReq.convParamToDate("start_time", true);
           Date endTime = tranReq.convParamToDate("end_time", true);
        Json jsonQuotaKeys = tranReq.convParamToJson("quota_keys", true);
        Integer limit = tranReq.convParamToInteger("limit", false);
        if (limit==null)
            limit=100;
        SMTAIAttachMetricDef attachMetricDef = SMTAIServerApp.getApp().getAttachMetricDef(attachMetricId);
        
        SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
        attachMetricDef.queryValueToJson(startTime, endTime, jsonQuotaKeys, jsonWr);
        attachMetricDef.queryValueToJson(startTime, endTime, jsonQuotaKeys, jsonWr,limit);
        
        return tranReq.returnJson(jsonWr);
    }
@@ -1330,4 +1341,31 @@
        return tranReq.returnJson(jsonWr);
    }
    public void downloadFileByFileId(SMTAIServerRequest tranReq, HttpServletResponse response) throws Exception {
        String fileId = tranReq.convParamToString("file_id", true);  // èŽ·å–è¯·æ±‚ä¸­çš„file_id
        SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
        try {
            // æŸ¥è¯¢æŒ‡å®šfile_id的文件记录
            DBRecords dbRecords = db.querySQL("SELECT * FROM ai_times.chat_history_attach WHERE attach_id=?", new Object[]{fileId});
            if (dbRecords.getRecords().isEmpty()) {
                throw new Exception("文件不存在");
            }
            // èŽ·å–æ–‡ä»¶ä¿¡æ¯
            DBRecord fileRecord = dbRecords.getRecords().get(0);
            String attachTitle = fileRecord.getString("attach_title");  // èŽ·å–æ–‡ä»¶æ ‡é¢˜
            String attachBytes = fileRecord.getString("attach_bytes");
            byte[] bytes = attachBytes.getBytes();
            // è®¾ç½®å“åº”头和文件名
            String fileName = attachTitle != null ? attachTitle : "downloaded_file";
            response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
            response.setContentType("application/octet-stream");
            response.getOutputStream().write(bytes);
            response.getOutputStream().flush();
        } catch (Exception e) {
            throw new Exception("Error processing file download: " + e.getMessage());
        }
    }
}
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/core/SMTAIServerApp.java
@@ -1,7 +1,6 @@
package com.smtaiserver.smtaiserver.core;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ArrayList;
@@ -19,6 +18,13 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.poifs.filesystem.FileMagic;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
@@ -67,6 +73,7 @@
import net.sf.ehcache.CacheManager;
import com.smtservlet.core.SMTApp.SMTEhCacheManagerInitialize;
import org.springframework.web.multipart.MultipartFile;
public class SMTAIServerApp extends SMTApp implements SMTEhCacheManagerInitialize,SMTApp.SMTSessionListenerEvent
@@ -1238,4 +1245,45 @@
        
        return attachMetricDef;
    }
    /**
     * æ–‡ä»¶(word、pdf)转txt
     */
    public String fileTranslTxt(MultipartFile file) throws Exception {
        InputStream inputStream = file.getInputStream();
        try (BufferedInputStream bis = new BufferedInputStream(file.getInputStream())) {
            String mimeType = file.getContentType();
            if (mimeType != null) {
                switch (mimeType) {
                    case "application/pdf":
                        _logger.info("文件类型是 PDF");
                        PDDocument document = PDDocument.load(inputStream);
                        PDFTextStripper stripper = new PDFTextStripper();
                        return stripper.getText(document);
                    case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
                        _logger.info("文件类型是 Word (DOCX)");
                        try (XWPFDocument docx = new XWPFDocument(bis)) {
                            XWPFWordExtractor docxExtractor = new XWPFWordExtractor(docx);
                            return docxExtractor.getText();
                        }
                    case "application/msword":
                        _logger.info("文件类型是 Word (DOC)");
                        try (HWPFDocument doc = new HWPFDocument(bis)) {
                            WordExtractor wordExtractor = new WordExtractor(doc);
                            return wordExtractor.getText();
                        }
                    default:
                        _logger.info("未知文件类型: " + mimeType);
                        break;
                }
            } else {
                _logger.info("无法获取文件类型");
            }
        } catch (Exception e) {
            _logger.error("文件处理失败: " + e.getMessage());
            throw new Exception("文件处理失败: " + e.getMessage());
        }
        return null;
    }
}
JAVA/SMTAIServer/src/main/java/com/smtaiserver/smtaiserver/core/SMTAIServerRequest.java
@@ -96,6 +96,7 @@
    private boolean                    _disableConclusion = false;
    private List<AIAttachFile>        _listAttchFile = null;
    private Json                    _jsonAttachTables = null;
    private Json                    _jsonAttachMetrics = null;
    private boolean                    _sendStarStream = false; // å°†è¾“出文字变成*
@@ -133,7 +134,11 @@
    {
        _jsonAttachTables = jsonTables;
    }
    public void setJsonAttachMetrics(Json attachMetrics)
    {
        _jsonAttachMetrics = attachMetrics;
    }
    public String[] getAttachMessage()
    {
        List<String> list = new ArrayList<>();
@@ -201,6 +206,10 @@
        {
            jsonResult.set("attach_tables", _jsonAttachTables);
        }
        if(_jsonAttachMetrics != null)
        {
            jsonResult.set("attach_metrics", _jsonAttachMetrics);
        }
    }
    
    public void addAttachFile(AIAttachFile attachFile)
JAVA/SMTAIServer/src/main/resources/requestmap/java_ai.json
@@ -166,7 +166,8 @@
                    {"name":"group_type", "title":"问题分类", "default":"业务场景", "required":false},
                    {"name":"cur_pos", "title":"当前位置", "required":false},
                    {"name":"files", "title":"附件文件", "required":false, "type":"file"},
                    {"name":"tables", "title":"附件表记录[{title:中文名, columns:[字段1,字段2...],values:[[值1,值2...]]}]", "required":false}
                    {"name":"tables", "title":"附件表记录[{title:中文名, columns:[字段1,字段2...],values:[[值1,值2...]]}]", "required":false},
                    {"name":"metrics", "title":"附件指标记录[{title:中文名, columns:[字段1,字段2...],values:[[值1,值2...]]}]", "required":false}
                ]
            }
        ]
@@ -304,7 +305,8 @@
                "parameters" : [
                    {"name":"id", "title":"查询表id", "required":true},
                    {"name":"filter", "title":"过滤条件[{col:字段名, filter:过滤条件, values:[值1,值2...]},...]", "required":false},
                    {"name":"order", "title":"排序条件[{col:字段名, order:ASC/DESC", "required":false}
                    {"name":"order", "title":"排序条件[{col:字段名, order:ASC/DESC", "required":false},
                    {"name":"limit", "title":"查询页数,默认100", "required":false}
                ]
            }
        ]
@@ -340,7 +342,18 @@
                    {"name":"id", "title":"查询指标id", "required":true},
                    {"name":"start_time", "title":"起始时间", "required":true},
                    {"name":"end_time", "title":"结束时间", "required":true},
                    {"name":"quota_keys", "title":"query_attach_metric_names返回前端的json", "required":true}
                    {"name":"quota_keys", "title":"query_attach_metric_names返回前端的json", "required":true},
                    {"name":"limit", "title":"查询页数,默认100", "required":false}
                ]
            }
        ]
    },
    "file/download_file":{"map":{"class":"#SMTJavaAIControl", "method":"downloadFileByFileId"},
        "swaggers":[
            {    "tags" : ["文件下载"],
                "title" : "文件下载",
                "parameters" : [
                    {"name":"file_id", "title":"文件id", "required":true}
                ]
            }
        ]
JAVA/SMTAIServerBoot/.idea/.gitignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
# é»˜è®¤å¿½ç•¥çš„æ–‡ä»¶
/shelf/
/workspace.xml
# åŸºäºŽç¼–辑器的 HTTP å®¢æˆ·ç«¯è¯·æ±‚
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
JAVA/SMTAIServerBoot/.idea/compiler.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CompilerConfiguration">
    <annotationProcessing>
      <profile default="true" name="Default" enabled="true" />
      <profile name="Maven default annotation processors profile" enabled="true">
        <sourceOutputDir name="target/generated-sources/annotations" />
        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
        <outputRelativeToContentRoot value="true" />
        <module name="SMTAIServerVer" />
        <module name="SMTAIServer" />
        <module name="SMTServlet" />
      </profile>
    </annotationProcessing>
  </component>
  <component name="JavacSettings">
    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
      <module name="SMTAIServer" options="-parameters" />
      <module name="SMTServlet" options="-parameters" />
    </option>
  </component>
</project>
JAVA/SMTAIServerBoot/.idea/encodings.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding">
    <file url="file://$PROJECT_DIR$/../SMTAIServer/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
    <file url="file://$PROJECT_DIR$/../SMTServlet/src/main/java" charset="UTF-8" />
  </component>
</project>
JAVA/SMTAIServerBoot/.idea/google-java-format.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="GoogleJavaFormatSettings">
    <option name="enabled" value="true" />
  </component>
</project>
JAVA/SMTAIServerBoot/.idea/inspectionProfiles/Project_Default.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
<component name="InspectionProjectProfileManager">
  <profile version="1.0">
    <option name="myName" value="Project Default" />
    <inspection_tool class="AutoCloseableResource" enabled="true" level="WARNING" enabled_by_default="true">
      <option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,com.smtaiserver.smtaiserver.core.SMTAIServerApp,allocDatabase" />
    </inspection_tool>
  </profile>
</component>
JAVA/SMTAIServerBoot/.idea/jarRepositories.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RemoteRepositoriesConfiguration">
    <remote-repository>
      <option name="id" value="central" />
      <option name="name" value="Central Repository" />
      <option name="url" value="https://repo.maven.apache.org/maven2" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="central" />
      <option name="name" value="Maven Central repository" />
      <option name="url" value="https://repo1.maven.org/maven2" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="jboss.community" />
      <option name="name" value="JBoss Community repository" />
      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
    </remote-repository>
  </component>
</project>
JAVA/SMTAIServerBoot/.idea/misc.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ExternalStorageConfigurationManager" enabled="true" />
  <component name="MavenProjectsManager">
    <option name="originalFiles">
      <list>
        <option value="$PROJECT_DIR$/pom.xml" />
        <option value="$PROJECT_DIR$/../SMTAIServer/pom.xml" />
      </list>
    </option>
  </component>
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="corretto-1.8" project-jdk-type="JavaSDK" />
</project>
JAVA/SMTAIServerBoot/.idea/vcs.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
  </component>
</project>