Browse Source

1.切片图片上传 2.查询切片问题修复 3.知识库,文件大小计算,更新时间问题修复

huiqi 4 months ago
parent
commit
108f229c88

+ 29 - 11
takai-admin/src/main/java/com/takai/web/controller/takaiai/TakaiAiController.java

@@ -1,6 +1,7 @@
 package com.takai.web.controller.takaiai;
 
 import com.alibaba.fastjson2.JSONObject;
+import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
 import com.takai.ai.domain.dto.TakaiDialogReqDTO;
 import com.takai.ai.domain.dto.TakaiQuestionDTO;
@@ -186,10 +187,10 @@ public class TakaiAiController extends BaseController {
      */
     @PostMapping("/getKnowledgeList")
     public TableDataInfo getKnowledgeList(@RequestBody TakaiPageParams params) {
-        List<TakaiKnowledge> s = takaiAisService.queryKnowledgeList();
         PageHelper.startPage(params.getPageNumber(), params.getPageSize(), "").setReasonable(true);
         List<TakaiKnowledge> list = takaiAisService.queryKnowledgeList();
-        return getDataTableResultTotal(list, Long.valueOf(s.size()));
+        Page<TakaiKnowledge> page = (Page<TakaiKnowledge>) list;
+        return getDataTableResultTotal(list, page.getTotal());
     }
 
     /**
@@ -249,10 +250,10 @@ public class TakaiAiController extends BaseController {
      */
     @PostMapping("/documentList")
     public TableDataInfo documentList(@RequestBody TakaiDocumentParams params) {
-        List<TakaiDocument> sTotal = takaiAisService.documentList(params);
         PageHelper.startPage(params.getPage(), params.getSize(), "").setReasonable(true);
         List<TakaiDocument> list = takaiAisService.documentList(params);
-        return getDataTableResultTotal(list, Long.valueOf(sTotal.size()));
+        Page<TakaiDocument> page = (Page<TakaiDocument>) list;
+        return getDataTableResultTotal(list, page.getTotal());
 //        SysUser user = new SysUser();
 //        user.setUserId(Long.valueOf(params.getUserId()));
 //        // 角色集合
@@ -336,6 +337,27 @@ public class TakaiAiController extends BaseController {
         }
     }
 
+
+    /**
+     * 上传切片图片
+     *
+     * @param files
+     * @param knowledgeId
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/uploadSliceImage/{knowledgeId}/{documentId}")
+    public AjaxResult uploadSliceImage(@RequestParam("files") MultipartFile[] files,
+                                     @PathVariable String knowledgeId,
+                                     @PathVariable String documentId) throws Exception {
+        try {
+            List<String> originTextList = takaiAisService.uploadSliceImage(files, knowledgeId, documentId);
+            return success(originTextList);
+        } catch (Exception e) {
+            return error(e.getMessage());
+        }
+    }
+
     /**
      * 获取知识配置信息
      *
@@ -369,14 +391,10 @@ public class TakaiAiController extends BaseController {
      */
     @PostMapping("/getSliceList")
     public TableDataInfo getDialogDetail(@RequestBody TakaiSliceParams params) {
-
-        List<TakaiSliceInfo> s = takaiAisService.selectByDocumentId(params.getDocument_id());
         PageHelper.startPage(params.getPageNum(), params.getPageSize(), "").setReasonable(true);
-        List<TakaiSliceInfo> list = takaiAisService.selectByDocumentId(params.getDocument_id());
-        return getDataTableResultTotal(list, Long.valueOf(s.size()));
-
-//        JSONObject json = takaiAisService.getSliceList(params);
-//        return success(json);
+        List<TakaiSliceInfo> sliceList = takaiAisService.selectByDocumentId(params.getDocument_id(), params.getText());
+        Page<TakaiSliceInfo> page = (Page<TakaiSliceInfo>) sliceList;
+        return getDataTableResultTotal(sliceList, page.getTotal());
     }
 
     /**

+ 5 - 0
takai-ai/src/main/java/com/takai/ai/domain/TakaiSysOss.java

@@ -42,4 +42,9 @@ public class TakaiSysOss extends BaseEntity {
      */
     private String service;
 
+    /**
+     * 替换标签,如:【示意图序号_a2922647596732514304_5】
+     */
+    private String originText;
+
 }

+ 6 - 0
takai-ai/src/main/java/com/takai/ai/domain/entity/TakaiApplication.java

@@ -70,6 +70,12 @@ public class TakaiApplication extends BaseEntity
 
     private String projectId;
 
+    private String addOrderBy;
+
+    public String getAddOrderBy() { return addOrderBy; }
+
+    public void setAddOrderBy(String needOrderBy) { this.addOrderBy = needOrderBy; }
+
     public String getAppId() {
         return appId;
     }

+ 1 - 1
takai-ai/src/main/java/com/takai/ai/mapper/TakaiSliceInfoMapper.java

@@ -9,7 +9,7 @@ import java.util.List;
 
 public interface TakaiSliceInfoMapper {
 
-    List<TakaiSliceInfo> selectByDocumentId(@Param("documentId") String documentId);
+    List<TakaiSliceInfo> selectByDocumentId(@Param("documentId") String documentId,@Param("sliceText") String sliceText);
 
     TakaiSliceInfo selectBySliceId(@Param("sliceId") String sliceId);
 

+ 3 - 1
takai-ai/src/main/java/com/takai/ai/service/ITakaiAiService.java

@@ -84,13 +84,15 @@ public interface ITakaiAiService
 
     JSONObject getSliceDetail(String sliceId, String knowledgeId);
 
+    List<String> uploadSliceImage(MultipartFile[] files, String knowledgeId, String documentId);
+
     int updateSliceInfo(TakaiSliceUpdateParams params);
 
     TakaiMediaReplacement getTakaiMediaReplacement();
 
     int addSlice(TakaiSliceUpdateParams params);
 
-    List<TakaiSliceInfo> selectByDocumentId(String documentId);
+    List<TakaiSliceInfo> selectByDocumentId(String documentId,String sliceText);
 
     TakaiSliceInfo selectBySliceId(String sliceId);
 

+ 124 - 63
takai-ai/src/main/java/com/takai/ai/service/impl/TakaiAiServiceImpl.java

@@ -3,6 +3,7 @@ package com.takai.ai.service.impl;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import com.github.pagehelper.PageHelper;
 import com.takai.ai.domain.TakaiSysOss;
 import com.takai.ai.domain.dto.*;
 import com.takai.ai.domain.entity.*;
@@ -17,6 +18,7 @@ import com.takai.common.config.DeepseekConfig;
 import com.takai.common.core.domain.entity.SysDictData;
 import com.takai.common.core.redis.RedisCache;
 import com.takai.common.enums.DataSourceType;
+import com.takai.common.utils.SecurityUtils;
 import com.takai.common.utils.StringUtils;
 import com.takai.common.utils.uuid.IdUtils;
 import com.takai.framework.web.service.SysPermissionService;
@@ -42,12 +44,12 @@ import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 import javax.validation.constraints.NotNull;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -591,57 +593,48 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
 
             if (jsonObject != null && jsonObject.containsKey("code") && jsonObject.getInteger("code") == 200) {
                 for (UploadDocumentParams vo : params) {
-                    TakaiKnowledge info  = takaiKnowledgeMapper.selectTargetKnowledge(TakaiKnowledge.builder().knowledgeId(knowledgeId).build());
-                    if(info != null){
-                        // 更新知识库文件大小,总字符数, 文件总数
-                        JSONObject docInfo = jsonObject.getJSONObject("doc_info");
-                        if(docInfo != null){
-                            List<TakaiDocument> documentList = takaiDocumentMapper.selectDocumentList(TakaiDocument.builder().knowledgeId(knowledgeId).build());
-                            Integer fileLen = docInfo.getInteger("file_size");
-                            Integer wordNum = docInfo.getInteger("total_char_len");
-                            Integer sliceTotal = docInfo.getInteger("slice_num");
-                            TakaiKnowledge paramInfo = TakaiKnowledge.builder().knowledgeId(knowledgeId)
-                                    .length(info.getLength() == null ? fileLen : info.getLength() + fileLen )       // 文件大小
-                                    .wordNum(info.getWordNum() == null ? wordNum : info.getWordNum() + wordNum)      // 总字符数
-                                    .documentSize(documentList == null || documentList.size() == 0 ? 1 : documentList.size() + 1) // 文件总数
-                                    .build();
-                            takaiKnowledgeMapper.updateKnowledge(paramInfo);
-
-                            for (TakaiSysOss oss : result) {
-                                // oss保存到数据库
-                                takaiSysOssMapper.insertSysOss(oss);
-                            }
+                    // 更新知识库文件大小,总字符数, 文件总数
+                    JSONObject docInfo = jsonObject.getJSONObject("doc_info");
+                    if(docInfo != null){
+                        Integer fileLen = docInfo.getInteger("file_size");
+                        Integer wordNum = docInfo.getInteger("total_char_len");
+                        Integer sliceTotal = docInfo.getInteger("slice_num");
+
+                        for (TakaiSysOss oss : result) {
+                            // oss保存到数据库
+                            takaiSysOssMapper.insertSysOss(oss);
+                        }
 
-                            // 保存知识信息
-                            TakaiDocument document = TakaiDocument.builder()
-                                    .documentId(vo.getDocument_id())
-                                    .knowledgeId(knowledgeId)
-                                    .customSeparator(String.format("[\"%s\"", "\\n") + "]")
-                                    .sentenceSize("300")
-                                    .name(vo.getName())
-                                    .url(vo.getUrl())
-                                    .sliceTotal(sliceTotal)
-                                    .length(fileLen)
-                                    .wordNum(wordNum)
-                                    .build();
-                            int documentIdInsert = takaiDocumentMapper.insertDocument(document);
-
-                            if (documentIdInsert > 0) {
-                                // 保存知识设置信息
-                                SnowflakeDigitGenerator snowflakeDigitGenerator = new SnowflakeDigitGenerator(1, 1);
-                                long id = snowflakeDigitGenerator.nextId();
-                                TakaiDocumentSettings dSettings = new TakaiDocumentSettings();
-                                dSettings.setId(String.valueOf(id));
-                                dSettings.setKnowledgeId(knowledgeId);
-                                dSettings.setDocumentId(vo.getDocument_id());
-                                dSettings.setSetSlice("0");   // 默认 按标题段落切片
-                                dSettings.setSetAnalyze("1"); // 默认 图片转换成标识符
-                                dSettings.setSetTable("0");   // 默认 ttable转图片
-                                takaiDocumentSettingsMapper.insertDocumentSettings(dSettings);
-                            }
+                        // 保存知识信息
+                        TakaiDocument document = TakaiDocument.builder()
+                                .documentId(vo.getDocument_id())
+                                .knowledgeId(knowledgeId)
+                                .customSeparator(String.format("[\"%s\"", "\\n") + "]")
+                                .sentenceSize("300")
+                                .name(vo.getName())
+                                .url(vo.getUrl())
+                                .sliceTotal(sliceTotal)
+                                .length(fileLen)
+                                .wordNum(wordNum)
+                                .build();
+                        int documentIdInsert = takaiDocumentMapper.insertDocument(document);
+
+                        if (documentIdInsert > 0) {
+                            // 保存知识设置信息
+                            SnowflakeDigitGenerator snowflakeDigitGenerator = new SnowflakeDigitGenerator(1, 1);
+                            long id = snowflakeDigitGenerator.nextId();
+                            TakaiDocumentSettings dSettings = new TakaiDocumentSettings();
+                            dSettings.setId(String.valueOf(id));
+                            dSettings.setKnowledgeId(knowledgeId);
+                            dSettings.setDocumentId(vo.getDocument_id());
+                            dSettings.setSetSlice("0");   // 默认 按标题段落切片
+                            dSettings.setSetAnalyze("1"); // 默认 图片转换成标识符
+                            dSettings.setSetTable("0");   // 默认 ttable转图片
+                            takaiDocumentSettingsMapper.insertDocumentSettings(dSettings);
                         }
                     }
                 }
+                updateKnowledgeSize(knowledgeId);
                 setRedisCache(knowledgeId);
                 return 1;
             }
@@ -649,6 +642,46 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
         return 0;
     }
 
+    private void updateKnowledgeSize(String knowledgeId) {
+        TakaiKnowledge info  = takaiKnowledgeMapper.selectTargetKnowledge(TakaiKnowledge.builder().knowledgeId(knowledgeId).build());
+        List<TakaiDocument> documentList = takaiDocumentMapper.selectDocumentList(TakaiDocument.builder().knowledgeId(knowledgeId).build());
+        int totalLen = documentList.stream()
+                .mapToInt(doc -> doc.getLength() != null ? doc.getLength() : 0)
+                .sum();
+        int totalWordNum = documentList.stream()
+                .mapToInt(doc -> doc.getWordNum() != null ? doc.getWordNum() : 0)
+                .sum();
+        int docSize = documentList == null || documentList.size() == 0 ? 0 : documentList.size();
+        TakaiKnowledge paramInfo = TakaiKnowledge.builder().knowledgeId(knowledgeId)
+                .length(totalLen)       // 文件大小
+                .wordNum(totalWordNum)  // 总字符数
+                .documentSize(docSize) // 文件总数
+                .build();
+        takaiKnowledgeMapper.updateKnowledge(paramInfo);
+    }
+
+    private void updateDocumentSize(String knowledgeId,String documentId) {
+        List<TakaiSliceInfo> sliceList = selectByDocumentId(documentId,null);
+        //字符数
+        int totalLen = sliceList.stream()
+                .mapToInt(slice -> slice.getSliceText() != null ? slice.getSliceText().length() : 0)
+                .sum();
+        //文件大小
+        int totalSize = sliceList.stream()
+                .mapToInt(slice -> slice.getSliceText() != null ? slice.getSliceText().getBytes(StandardCharsets.UTF_8).length : 0)
+                .sum();
+        TakaiDocument doc = TakaiDocument.builder()
+                .documentId(documentId)
+                .length(totalSize)
+                .wordNum(totalLen)
+                .build();
+        String updateBy = SecurityUtils.getLoginUser() == null ? "":SecurityUtils.getLoginUser().getUsername();
+        doc.setUpdateBy(updateBy);
+        doc.setUpdateTime(new Date());
+        takaiDocumentMapper.updateDocument(doc);
+        updateKnowledgeSize(knowledgeId);
+    }
+
     @Override
     public int updateDocument(TakaiDocumentParams documentParams, String documentId) {
         int i = takaiDocumentMapper.updateDocument(TakaiDocument.builder()
@@ -692,17 +725,8 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
                         int i = takaiDocumentMapper.delDocument(documentId);
 
                         if(i > 0){
-                            TakaiKnowledge info  = takaiKnowledgeMapper.selectTargetKnowledge(TakaiKnowledge.builder().knowledgeId(vo.getKnowledgeId()).build());
-                            if(info != null){
-                                // 更新知识库文件大小,总字符数, 文件总数
-                                TakaiKnowledge paramInfo = TakaiKnowledge.builder().knowledgeId(vo.getKnowledgeId())
-                                        .length(vo.getLength() == null ? info.getLength() == null ? 0 : info.getLength() : info.getLength() - vo.getLength())       // 文件大小
-                                        .wordNum(vo.getWordNum() == null ? info.getWordNum() == null ? 0 : info.getWordNum() : info.getWordNum() - vo.getWordNum())      // 总字符数
-                                        .documentSize(info.getDocumentSize() == null ? 0 : info.getDocumentSize() - 1) // 文件总数
-                                        .build();
-                                takaiKnowledgeMapper.updateKnowledge(paramInfo);
-                            }
-
+                            //更新知识库
+                            updateKnowledgeSize(vo.getKnowledgeId());
                             // 删除minio文件
                             try {
                                 logger.info("删除minio文件");
@@ -970,12 +994,14 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
                 Integer code = obj.getInteger("code");
                 logger.info("删除切片调用python接口成功,返回结果:{}", body);
                 if (code == 200) {
+                    updateDocumentSize(knowledgeId,documentId);
                     return 1;
                 }
             }
         } catch (IOException e) {
             logger.error("删除切片调用python接口失败", e.getMessage());
         }
+
         return 0;
     }
 
@@ -1000,6 +1026,34 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
         return null;
     }
 
+    @Override
+    public List<String> uploadSliceImage(MultipartFile[] files, String knowledgeId, String documentId) {
+        List<TakaiSysOss> resultList = null;
+        try {
+            resultList = minioUtil.uploadSliceImages(files,knowledgeId,documentId);
+        } catch (Exception e) {
+            logger.error("上传文件失败", e.getMessage());
+        }
+        //保存图片信息
+        List<String> originTextList = new ArrayList<>();
+        for (TakaiSysOss  result : resultList) {
+            TakaiMediaReplacement  takaiMediaReplacement =
+                    TakaiMediaReplacement.builder()
+                            .knowledgeId(knowledgeId)
+                            .documentId(documentId)
+                            .originText(result.getOriginText())
+                            .mediaType("image")
+                            .mediaUrl(result.getUrl())
+                            .build();
+            Date currentDate = new Date();
+            takaiMediaReplacement.setCreateTime(currentDate);
+            takaiMediaReplacement.setUpdateTime(currentDate);
+            takaiMediaReplacementMapper.insertMedia(takaiMediaReplacement);
+            originTextList.add(result.getOriginText());
+        }
+        return originTextList;
+    }
+
     @Override
     public int updateSliceInfo(TakaiSliceUpdateParams params) {
         String url = deepseekConfig.getBaseurl() + deepseekConfig.getUpdateSlice();
@@ -1019,12 +1073,14 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
                 JSONObject obj = JSON.parseObject(body);
                 Integer code = obj.getInteger("code");
                 if (code == 200) {
+                    updateDocumentSize(params.getKnowledgeId(),params.getDocumentId());
                     return 1;
                 }
             }
         } catch (Exception e) {
             logger.error("更新切片信息调用python接口失败", e.getMessage());
         }
+
         return 0;
     }
 
@@ -1060,6 +1116,7 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
                     JSONObject obj = JSON.parseObject(body);
                     Integer code = obj.getInteger("code");
                     if (code == 200) {
+                        updateDocumentSize(params.getKnowledgeId(),params.getDocumentId());
                         return 1;
                     }
                 }
@@ -1070,9 +1127,10 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
         return 0;
     }
 
+
     @Override
-    public List<TakaiSliceInfo> selectByDocumentId(String documentId) {
-        return takaiSliceInfoMapper.selectByDocumentId(documentId);
+    public List<TakaiSliceInfo> selectByDocumentId(String documentId,String sliceText) {
+        return takaiSliceInfoMapper.selectByDocumentId(documentId,sliceText);
     }
 
     @Override
@@ -1111,13 +1169,16 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
         List<Object> result =  new ArrayList();
         if (dictDataList!= null && dictDataList.size() > 0) {
             for (SysDictData dictData : dictDataList){
+                PageHelper.startPage(1, 3, "sort is null asc,sort");
                 Map<String, Object> map = new HashMap();
-                TakaiApplication paramsVo = TakaiApplication.builder().approver(userId).flag("0").build();
+                TakaiApplication paramsVo = TakaiApplication.builder().approver(userId).flag("0").addOrderBy("0").build();
+                //项目应用
                 if(dictData.getDictCode() == 41){
                     Map<String, Object> l = searchAppTypeGroupList(paramsVo, dictData);
                     if(!MapUtils.isEmpty(l)){
                         result.add(l);
                     }
+                //其他分类应用
                 }else{
                     paramsVo.setTypeId(Long.valueOf(dictData.getDictCode()));
                     List<TakaiApplicationResult> list = takaiApplicationMapper.selectApplicationList(paramsVo);
@@ -1443,7 +1504,7 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
         return new OkHttpClient.Builder()
                 .connectTimeout(10, TimeUnit.SECONDS)
                 .writeTimeout(50, TimeUnit.SECONDS)
-                .readTimeout(10, TimeUnit.MINUTES)
+                .readTimeout(20, TimeUnit.MINUTES)
                 .build();
     }
 

+ 63 - 10
takai-ai/src/main/java/com/takai/ai/utils/MinioUtil.java

@@ -2,6 +2,7 @@ package com.takai.ai.utils;
 
 import com.takai.ai.domain.TakaiSysOss;
 import com.takai.ai.domain.TakaiSysOssConfig;
+import com.takai.common.utils.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -44,20 +45,13 @@ public class MinioUtil {
      * @return 上传成功的文件URL列表
      */
     public List<TakaiSysOss> uploadMultiple(MultipartFile[] files) throws Exception {
-//        try {
-//            TakaiSysOss ossVo = upload(files);
-//            return ossVo;
-//        } catch (Exception e) {
-//            // 记录失败文件信息,但继续处理其他文件
-//            System.err.println("文件上传失败: " + files.getOriginalFilename() + ", 原因: " + e.getMessage());
-//        }
         List<TakaiSysOss> result = new ArrayList<>();
         for (MultipartFile file : files) {
             if (file.isEmpty()) {
                 continue;
             }
             try {
-                TakaiSysOss ossVo = upload(file);
+                TakaiSysOss ossVo = upload(file,null);
                 result.add(ossVo);
             } catch (Exception e) {
                 // 记录失败文件信息,但继续处理其他文件
@@ -67,6 +61,60 @@ public class MinioUtil {
         return result;
     }
 
+    /**
+     * 批量上传文件
+     * @param files      文件列表
+     * @return 上传成功的文件URL列表
+     */
+    public List<TakaiSysOss> uploadSliceImages(MultipartFile[] files,String knowledateId, String docId) throws Exception {
+        List<TakaiSysOss> result = new ArrayList<>();
+        int i = 1;
+        for (MultipartFile file : files) {
+            if (file.isEmpty()) {
+                continue;
+            }
+            try {
+                String replace_text = "【示意图序号_"+docId+"_"+System.currentTimeMillis()+"_"+i+"】" ;
+                String path = "/pdf/"+knowledateId+"/"+docId+"/"+replace_text + getFileExtension(file);
+                TakaiSysOss ossVo = upload(file,path);
+                ossVo.setOriginText(replace_text);
+                result.add(ossVo);
+            } catch (Exception e) {
+                // 记录失败文件信息,但继续处理其他文件
+                System.err.println("文件上传失败: " + file.getOriginalFilename() + ", 原因: " + e.getMessage());
+            }
+            i++;
+        }
+        return result;
+    }
+
+    public String getFileExtension(MultipartFile file) {
+        if (file == null || file.isEmpty()) {
+            return null; // 或抛出异常
+        }
+
+        String originalFilename = file.getOriginalFilename();
+        if (originalFilename == null) {
+            return null;
+        }
+
+        // 找到最后一个点的位置
+        int lastDotIndex = originalFilename.lastIndexOf(".");
+
+        // 如果没有点或者点是最后一个字符,则没有后缀
+        if (lastDotIndex == -1 || lastDotIndex == originalFilename.length() - 1) {
+            return "";
+        }
+
+        // 提取后缀(包含点)
+        String extension = originalFilename.substring(lastDotIndex);
+
+        // 如果需要不包含点的后缀,可以用:
+        // String extension = originalFilename.substring(lastDotIndex + 1);
+
+        return extension;
+    }
+
     /**
      * 检查存储桶是否存在
      */
@@ -95,16 +143,21 @@ public class MinioUtil {
      * @param file       文件对象
      * @return 文件访问URL
      */
-    public TakaiSysOss upload(MultipartFile file) throws Exception {
+    public TakaiSysOss upload(MultipartFile file,String newFileName) throws Exception {
         // 如果存储桶不存在则创建
         makeBucket(bucketName);
         // 生成日期目录路径 yyyy/MM/dd
         String dateDir = new SimpleDateFormat("yyyy/MM/dd").format(new Date());
         // 生成唯一文件名
         String originalFilename = file.getOriginalFilename();
+        String fileName = originalFilename;
+        if(!StringUtils.isEmpty(newFileName)){
+            fileName = newFileName;
+        }
+
 //        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
 //        String fileName = dateDir + "/" + originalFilename;
-        String fileName = originalFilename;
+
         // 上传文件
         try (InputStream inputStream = file.getInputStream()) {
             minioClient.putObject(

+ 19 - 8
takai-ai/src/main/resources/mapper/takaiai/TakaiApplicationMapper.xml

@@ -56,10 +56,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		from bm_application
     </sql>
 
-	<select id="selectApplicationList" parameterType="BmApplication" resultMap="BmApplicationListResult">
+	<select id="selectApplicationList" parameterType="com.takai.ai.domain.entity.TakaiApplication" resultMap="BmApplicationListResult">
 		<!-- 用户所属项目下的应用 -->
 		SELECT DISTINCT
 			bm.appId,
+
 			bm.name,
 			bm.description,
 			bm.type_id,
@@ -72,7 +73,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			ORDER BY dai.create_time DESC
 			LIMIT 1) AS auditStatus,
 			sp.project_name as projectName,
-			bm.update_time
+			bm.update_time,
+			bm.sort
 		FROM
 		bm_application bm
 		LEFT JOIN sys_project_app pa ON pa.app_id = bm.appId
@@ -119,7 +121,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 				ORDER BY dai.create_time DESC
 				LIMIT 1) AS auditStatus,
 			    '' AS projectName,
-				ba.update_time
+				ba.update_time,
+			    ba.sort
 			FROM
 				bm_application ba
 			LEFT JOIN sys_dict_data sdd on sdd.dict_code = ba.type_id
@@ -155,7 +158,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 				ORDER BY dai.create_time DESC
 				LIMIT 1) AS auditStatus,
 				'' AS projectName,
-				bl.update_time
+				bl.update_time,
+				bl.sort
 			FROM
 				bm_application bl
 			WHERE
@@ -182,7 +186,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 				AND bl.type_id = #{typeId}
 			</if>
 		</if>
-		ORDER BY create_time, update_time DESC
+		<if test="addOrderBy == null or addOrderBy == 'Y'">
+			ORDER BY update_time DESC, create_time DESC
+		</if>
+
+
 	</select>
 
 	<select id="selectTargetApplication" parameterType="BmApplication" resultMap="BmApplicationResult">
@@ -212,7 +220,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			<if test="nodeOrder != null and nodeOrder != ''">node_order,</if>
 			<if test="approver != null and approver != ''">approver,</if>
 			<if test="comment != null and comment != ''">comment,</if>
- 			create_time
+ 			create_time,
+		    update_time
  		)values(
 			<if test="appId != null">#{appId},</if>
 			<if test="name != null and name != ''">#{name},</if>
@@ -234,7 +243,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			<if test="nodeOrder != null and nodeOrder != ''">#{nodeOrder},</if>
 			<if test="approver != null and approver != ''">#{approver},</if>
 			<if test="comment != null and comment != ''">#{comment},</if>
- 			sysdate()
+ 			sysdate(),
+		    sysdate()
  		)
 	</insert>
 
@@ -255,7 +265,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			<if test="remark != null">remark = #{remark},</if>
 			<if test="knowledgeInfo != null and knowledgeInfo != ''">knowledge_info = #{knowledgeInfo},</if>
 			<if test="maxToken != null and maxToken != ''">max_token = #{maxToken},</if>
-			<if test="typeId != null and typeId != ''">type_id = #{typeId},</if>
+<!--			<if test="typeId != null and typeId != ''">type_id = #{typeId},</if>-->
+			type_id = #{typeId},
 			<if test="status != null and status != ''">status = #{status},</if>
 			node_order = #{nodeOrder},
 			comment = #{comment},

+ 6 - 4
takai-ai/src/main/resources/mapper/takaiai/TakaiMediaReplacementMapper.xml

@@ -23,7 +23,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		from bm_media_replacement
     </sql>
 
-	<select id="selectMediaList" parameterType="BmMediaReplacement" resultMap="BmMediaReplacementResult">
+	<select id="selectMediaList" parameterType="TakaiMediaReplacement" resultMap="BmMediaReplacementResult">
 	    <include refid="selectSql"/>
 		<where>
 		    <if test="documentId != null and documentId != ''">
@@ -39,15 +39,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		order by create_time asc
 	</select>
 	
-	<select id="selectTargetMedia" parameterType="BmMediaReplacement" resultMap="BmMediaReplacementResult">
+	<select id="selectTargetMedia" parameterType="TakaiMediaReplacement" resultMap="BmMediaReplacementResult">
 		<include refid="selectSql"/>
 		where document_id = #{documentId}
 		and origin_text = #{originText}
  		and media_type = #{mediaType}
 	</select>
  	
- 	<insert id="insertMedia" parameterType="BmMediaReplacement">
+ 	<insert id="insertMedia" parameterType="TakaiMediaReplacement">
  		insert into bm_media_replacement(
+		    <if test="knowledgeId != null">knowledge_id,</if>
  			<if test="documentId != null">document_id,</if>
  			<if test="originText != null and originText != ''">origin_text,</if>
  			<if test="mediaType != null and mediaType != ''">media_type,</if>
@@ -57,6 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="createBy != null and createBy != ''">create_by,</if>
  			create_time
  		)values(
+		    <if test="knowledgeId != null">#{knowledgeId},</if>
  		    <if test="documentId != null">#{documentId},</if>
  		    <if test="originText != null and originText != ''">#{originText},</if>
  			<if test="mediaType != null and mediaType != ''">#{mediaType},</if>
@@ -68,7 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  		)
 	</insert>
 
-	<update id="updateMedia" parameterType="BmMediaReplacement">
+	<update id="updateMedia" parameterType="TakaiMediaReplacement">
 		update bm_media_replacement
 		<set>
 			<if test="documentId != null">document_id = #{documentId},</if>

+ 3 - 0
takai-ai/src/main/resources/mapper/takaiai/TakaiSliceInfoMapper.xml

@@ -39,6 +39,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<include refid="Base_Column"/>
 		from slice_info
 		where document_id = #{documentId}
+		<if test="sliceText != null and sliceText != ''">
+			AND slice_text LIKE CONCAT('%', #{sliceText}, '%')
+		</if>
 		order by slice_index asc
 	</select>