浏览代码

20251031-技术交底书理解结果改

lrj 1 月之前
父节点
当前提交
50e605e7d8

+ 1 - 0
src/main/java/cn/cslg/pas/common/model/dify/ChatMessageDTO.java

@@ -14,4 +14,5 @@ public class ChatMessageDTO {
     private Integer projectId;
     private Integer confessionSessionId;
     private Integer type;
+    private List<String> fileGuids;
 }

+ 9 - 0
src/main/java/cn/cslg/pas/common/model/dify/generateDiscoveryResult/QueryDiscoveryPictureDTO.java

@@ -0,0 +1,9 @@
+package cn.cslg.pas.common.model.dify.generateDiscoveryResult;
+
+import cn.cslg.pas.common.model.cronModel.SystemFile;
+import lombok.Data;
+
+@Data
+public class QueryDiscoveryPictureDTO {
+    private Integer confessionSessionId;
+}

+ 12 - 0
src/main/java/cn/cslg/pas/common/model/dify/generateDiscoveryResult/UpdateDiscoveryPictureDTO.java

@@ -0,0 +1,12 @@
+package cn.cslg.pas.common.model.dify.generateDiscoveryResult;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdateDiscoveryPictureDTO {
+   private Integer confessionSessionId;
+   private List<String> fileGuids;
+
+}

+ 43 - 0
src/main/java/cn/cslg/pas/common/utils/FileUtils.java

@@ -490,4 +490,47 @@ public class FileUtils {
     public static String getConfigFilePath(String url) {
         return getStaticPath(COMMON_FILE) + url;
     }
+    public static String getFileType(String name){
+        Integer i= name.lastIndexOf(".");
+        String type =name.substring(i+1,name.length());
+        return type;
+    }
+    public static boolean deleteFolder(String path) {
+        File target = new File(path);
+        return delete(target);
+    }
+
+    /**
+     * 通用的删除方法,可针对文件或文件夹对象调用
+     * @param target 要删除的File对象(文件或文件夹)
+     * @return 删除成功返回 true,否则返回 false
+     */
+    public static boolean delete(File target) {
+        // 如果目标不存在,直接返回true[4,7](@ref)
+        if (!target.exists()) {
+            return true;
+        }
+
+        // 如果是文件,直接删除[4](@ref)
+        if (target.isFile()) {
+            return target.delete();
+        }
+
+        // 如果是目录,递归删除其内容[8](@ref)
+        if (target.isDirectory()) {
+            File[] files = target.listFiles();
+            // 确保目录列表非空,避免NullPointerException[7](@ref)
+            if (files != null) {
+                for (File file : files) {
+                    // 递归调用,删除子项(文件或文件夹)[6,8](@ref)
+                    if (!delete(file)) {
+                        return false; // 如果任何子项删除失败,则终止并返回失败
+                    }
+                }
+            }
+            // 目录内容清空后,删除空目录本身[1,7](@ref)
+            return target.delete();
+        }
+        return false;
+    }
 }

+ 22 - 2
src/main/java/cn/cslg/pas/controller/outApi/DifyController.java

@@ -1,9 +1,12 @@
 package cn.cslg.pas.controller.outApi;
 
 import cn.cslg.pas.common.core.base.Constants;
+import cn.cslg.pas.common.model.cronModel.SystemFile;
 import cn.cslg.pas.common.model.dify.*;
 import cn.cslg.pas.common.model.dify.confessionSession.ConfessionSessionDetailDTO;
 import cn.cslg.pas.common.model.dify.confessionSession.ConfessionSessionDetailVO;
+import cn.cslg.pas.common.model.dify.generateDiscoveryResult.QueryDiscoveryPictureDTO;
+import cn.cslg.pas.common.model.dify.generateDiscoveryResult.UpdateDiscoveryPictureDTO;
 import cn.cslg.pas.common.model.dify.generatePatentResult.GeneratePatentResultDTO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
@@ -25,6 +28,7 @@ import org.springframework.web.bind.annotation.RestController;
 import reactor.core.publisher.Flux;
 
 import java.io.IOException;
+import java.util.List;
 
 
 @SuppressWarnings({"all"})
@@ -44,6 +48,7 @@ public class DifyController {
     @Autowired
     private LoginUtils loginUtils;
     private final PatentResultService patentResultService;
+
     @RequestMapping(value = "/chatMessage", method = RequestMethod.POST, produces = MediaType.TEXT_EVENT_STREAM_VALUE)
     @Operation(summary = "发送对话")
     public Flux<String> chatMessage(@RequestBody ChatMessageDTO chatMessageDTO) throws IOException {
@@ -68,8 +73,8 @@ public class DifyController {
 
     @RequestMapping(value = "/stopMessage", method = RequestMethod.GET)
     @Operation(summary = "停止会话")
-    public Response stopMessage(String taskId,Integer type) throws IOException {
-        return Response.success(difyService.stopMessage(taskId,type));
+    public Response stopMessage(String taskId, Integer type) throws IOException {
+        return Response.success(difyService.stopMessage(taskId, type));
     }
 
     @RequestMapping(value = "/generateInventionPoint", method = RequestMethod.POST)
@@ -108,6 +113,7 @@ public class DifyController {
         ConfessionSessionDetailVO confessionSessionDetailVO = confessionSessionService.getConfessionSessionDetail(confessionSessionDetailDTO);
         return Response.success(confessionSessionDetailVO);
     }
+
     @RequestMapping(value = "/generateDiscoveryResult/dialogue", method = RequestMethod.POST, produces = MediaType.TEXT_EVENT_STREAM_VALUE)
     @Operation(summary = "ai对话")
     public Flux<String> discoveryResultDialogue(@RequestBody ChatMessageDTO chatMessageDTO) throws Exception {
@@ -119,4 +125,18 @@ public class DifyController {
     public Flux<String> generatePatentResult(@RequestBody GeneratePatentResultDTO generatePatentResultDTO) throws Exception {
         return patentResultService.aiGeneratePatentResult(generatePatentResultDTO);
     }
+
+    @RequestMapping(value = "/generateDiscoveryResult/queryPicture", method = RequestMethod.POST)
+    @Operation(summary = "获取技术交底书理解结果的附图列表")
+    public Response queryPicture(@RequestBody QueryDiscoveryPictureDTO queryDiscoveryPictureDTO) throws IOException {
+        List<SystemFile> systemFileList = generateDiscoveryResultService.getDiscoveryPictures(queryDiscoveryPictureDTO);
+        return Response.success(systemFileList);
+    }
+    @RequestMapping(value = "/generateDiscoveryResult/uploadPicture", method = RequestMethod.POST)
+    @Operation(summary = "上传技术交底书附图")
+    public Response uploadPicture(@RequestBody UpdateDiscoveryPictureDTO updateDiscoveryPictureDTO) throws IOException {
+ generateDiscoveryResultService.uploadDiscoveryPictures(updateDiscoveryPictureDTO);
+        return Response.success("上传成功");
+    }
+
 }

+ 48 - 21
src/main/java/cn/cslg/pas/service/common/DifyService.java

@@ -1,6 +1,7 @@
 package cn.cslg.pas.service.common;
 
 
+import cn.cslg.pas.common.model.cronModel.SystemFile;
 import cn.cslg.pas.common.model.dify.*;
 
 import cn.cslg.pas.common.model.dify.GenerateClaimDTO;
@@ -137,14 +138,14 @@ public class DifyService {
                 .writeTimeout(600, TimeUnit.SECONDS)
                 .readTimeout(600, TimeUnit.SECONDS)
                 .build();
-        Integer type =difyChatMessageDTO.getType();
+        Integer type = difyChatMessageDTO.getType();
         String path = "messages?conversation_id=" + difyChatMessageDTO.getConversationId() + "&user=" + difyChatMessageDTO.getUser() + "&limit=" + difyChatMessageDTO.getLimit();
         if (difyChatMessageDTO.getFirstId() != null) {
             path += "&first_id=" + difyChatMessageDTO.getFirstId();
         }
-        String key =apiKey;
-        if(type!=null&&type.equals(4)){
-            key=discoveryResultKey;
+        String key = apiKey;
+        if (type != null && type.equals(4)) {
+            key = discoveryResultKey;
         }
         Request request = new Request.Builder()
                 .url(url + path)
@@ -196,7 +197,7 @@ public class DifyService {
 
         String param = new Gson().toJson(difyChatMessageDTO);
         RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
-        Request request = this.getChatMessageRequest(requestBody,apiKey);
+        Request request = this.getChatMessageRequest(requestBody, apiKey);
         return Flux.create(emitter -> {
             client.newCall(request).enqueue(new Callback() {
                 @Override
@@ -275,7 +276,7 @@ public class DifyService {
         return url;
     }
 
-    public Request getChatMessageRequest(RequestBody requestBody,String key) {
+    public Request getChatMessageRequest(RequestBody requestBody, String key) {
         Request request = new Request.Builder()
                 .url(url + "chat-messages")
                 .addHeader("Authorization", "Bearer " + key).addHeader(HttpHeaders.CONTENT_TYPE, "application/json")
@@ -284,7 +285,7 @@ public class DifyService {
         return request;
     }
 
-    public JSONObject stopMessage(String taskId,Integer type) throws IOException {
+    public JSONObject stopMessage(String taskId, Integer type) throws IOException {
         OkHttpClient client = new OkHttpClient.Builder()
                 .connectTimeout(60, TimeUnit.SECONDS)
                 .writeTimeout(60, TimeUnit.SECONDS)
@@ -294,9 +295,9 @@ public class DifyService {
         difyChatMessageDTO.setUser("1");
         String param = new Gson().toJson(difyChatMessageDTO);
         RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
-        String key =apiKey;
-        if(type!=null&&type.equals(4)){
-            key=discoveryResultKey;
+        String key = apiKey;
+        if (type != null && type.equals(4)) {
+            key = discoveryResultKey;
         }
         Request request = new Request.Builder()
                 .url(url + "chat-messages/" + taskId + "/stop")
@@ -340,7 +341,7 @@ public class DifyService {
                 .build();
         String param = new Gson().toJson(difyChatMessageDTO);
         RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
-        Request request = this.getChatMessageRequest(requestBody,apiKey);
+        Request request = this.getChatMessageRequest(requestBody, apiKey);
         String res = Objects.requireNonNull(client.newCall(request).execute().body()).string();
         JSONObject jsonObject = JSONObject.parseObject(res);
         String inventionPoint = jsonObject.get("answer").toString();
@@ -806,6 +807,7 @@ public class DifyService {
         String userId = loginUtils.getId().toString();
         String query = chatMessageDTO.getQuery();
         Integer type = chatMessageDTO.getType();
+        List<String> fileGuids = chatMessageDTO.getFileGuids();
         if (type == null || query == null || query.trim().equals("")) {
             throw new XiaoShiException(ExceptionEnum.BUSINESS_CHECK, "请按要求输入参数");
         }
@@ -815,7 +817,7 @@ public class DifyService {
 
 
         String temConversationId = conversationId;
-        String temConversationId3=conversationId;
+        String temConversationId3 = conversationId;
         OkHttpClient client = new OkHttpClient.Builder()
                 .connectTimeout(600, TimeUnit.SECONDS)
                 .writeTimeout(600, TimeUnit.SECONDS)
@@ -828,15 +830,19 @@ public class DifyService {
 
         ConfessionSession confessionSession = confessionSessionService.getById(confessionSessionId);
 
-            List<String> guids = assoConfessionSessionFileService.getFileGuid(confessionSessionId, 0);
-            if (guids == null || guids.size() == 0) {
-                throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "数据错误,未检测到交底书");
-            }
-            fileContent = fileDownloadUrl + guids.get(0);
-            map.put("file_path", fileContent);
+        List<String> guids = assoConfessionSessionFileService.getFileGuid(confessionSessionId, 0);
+        if (guids == null || guids.size() == 0) {
+            throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "数据错误,未检测到交底书");
+        }
+        fileContent = fileDownloadUrl + guids.get(0);
+        map.put("file_path", fileContent);
 
         map.put("data_Result", confessionSession.getResultContent());
         map.put("ask_type", type.toString());
+        if (fileGuids != null && fileGuids.size() > 0) {
+            String pictureJson = this.getDiscoveryResultDialoguePicture(fileGuids);
+            map.put("pictures", pictureJson);
+        }
         difyChatMessageDTO.setInputs(map);
         difyChatMessageDTO.setConversationId(conversationId);
         difyChatMessageDTO.setResponseMode("streaming");
@@ -846,7 +852,7 @@ public class DifyService {
 
         String param = new Gson().toJson(difyChatMessageDTO);
         RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
-        Request request = this.getChatMessageRequest(requestBody,discoveryResultKey);
+        Request request = this.getChatMessageRequest(requestBody, discoveryResultKey);
 
         return Flux.create(emitter -> {
             client.newCall(request).enqueue(new Callback() {
@@ -900,10 +906,31 @@ public class DifyService {
         });
     }
 
-    public Request getGeneratePatentResultResultRequest(Integer confessionSessionId,DifyChatMessageDTO difyChatMessageDTO,String aiKey){
+    public Request getGeneratePatentResultResultRequest(Integer confessionSessionId, DifyChatMessageDTO difyChatMessageDTO, String aiKey) {
         String param = new Gson().toJson(difyChatMessageDTO);
         RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
-        Request request = this.getChatMessageRequest(requestBody,aiKey);
+        Request request = this.getChatMessageRequest(requestBody, aiKey);
         return request;
     }
+
+    public String getDiscoveryResultDialoguePicture(List<String> fileGuids) {
+        List<SystemFile> systemFiles = new ArrayList<>();
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (fileGuids != null && fileGuids.size() > 0) {
+            systemFiles = fileManagerService.getSystemFileByGuids(fileGuids);
+            if (systemFiles != null) {
+                systemFiles.forEach(item -> {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("path", fileDownloadUrl + item.getGuid());
+                    map.put("guid", item.getGuid());
+                    map.put("name", item.getOriginalName());
+                    map.put("desc", "");
+                    list.add(map);
+                });
+            }
+        }
+        String re = JSON.toJSONString(list);
+        return re;
+    }
 }

+ 24 - 5
src/main/java/cn/cslg/pas/service/common/FileManagerService.java

@@ -3,6 +3,7 @@ package cn.cslg.pas.service.common;
 import cn.cslg.pas.common.dto.FMSDeleteFileDTO;
 import cn.cslg.pas.common.model.cronModel.SystemFile;
 import cn.cslg.pas.common.utils.CustomizeFileUtils;
+import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.business.TechnicalCaseService;
 import cn.hutool.core.io.FileUtil;
 import com.alibaba.fastjson.JSONArray;
@@ -41,7 +42,9 @@ public class FileManagerService {
     private String FMSUrl;
     @Value("${FileSource}")
     private String FileSource;
-    private TechnicalCaseService technicalCaseService;;
+    private TechnicalCaseService technicalCaseService;
+    ;
+
     /**
      * 调用文件系统上传文件接口
      *
@@ -91,6 +94,7 @@ public class FileManagerService {
 
     /**
      * 调用文件系统取出文件接口(获得文件流)
+     *
      * @param fieldId 文件id
      */
     public byte[] downloadSystemFileFromFMS(String fieldId) throws IOException {
@@ -234,7 +238,7 @@ public class FileManagerService {
         return Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
     }
 
-    public  File getTempFileByGuid(String guid)throws IOException{
+    public File getTempFileByGuid(String guid) throws IOException {
         String res = this.getSystemFileFromFMS(Arrays.asList(guid));
         List<SystemFile> systemFiles = JSONArray.parseArray(res, SystemFile.class);
         SystemFile systemFile = systemFiles.get(0);
@@ -249,9 +253,10 @@ public class FileManagerService {
         ) {
             IOUtils.copy(inputStream, outputStream); // 将输入流复制到临时文件
         }
-        return  tempFile;
+        return tempFile;
     }
-    public  File getOrgTempFileByGuid(String guid)throws IOException{
+
+    public File getOrgTempFileByGuid(String guid) throws IOException {
         String res = this.getSystemFileFromFMS(Arrays.asList(guid));
         List<SystemFile> systemFiles = JSONArray.parseArray(res, SystemFile.class);
         SystemFile systemFile = systemFiles.get(0);
@@ -267,6 +272,20 @@ public class FileManagerService {
         ) {
             IOUtils.copy(inputStream, outputStream); // 将输入流复制到临时文件
         }
-        return  tempFile;
+        return tempFile;
+    }
+
+    public List<SystemFile> getSystemFileByGuids(List<String> guids) {
+        List<SystemFile> systemFiles = new ArrayList<>();
+        if (guids == null || guids.size() == 0) {
+            return systemFiles;
+        }
+        try {
+            String res = this.getSystemFileFromFMS(guids);
+            systemFiles = com.alibaba.fastjson.JSONObject.parseArray(res, SystemFile.class);
+        } catch (Exception e) {
+            throw new XiaoShiException("查询文件详细信息错误" + e);
+        }
+        return systemFiles;
     }
 }

+ 31 - 10
src/main/java/cn/cslg/pas/service/common/WordService.java

@@ -1,5 +1,6 @@
 package cn.cslg.pas.service.common;
 
+import cn.cslg.pas.common.utils.FileUtils;
 import cn.cslg.pas.common.utils.commonUtils.PictureUtils;
 import org.apache.poi.hwpf.HWPFDocument;
 import org.apache.poi.hwpf.extractor.WordExtractor;
@@ -61,12 +62,16 @@ public class WordService {
         return stringBuilder.toString();
     }
 
-    public List<File> getDocxPictures(InputStream fis) {
+    public List<File> getDocxPictures(InputStream fis, File dir) {
         List<File> files = new ArrayList<>();
         try (
                 XWPFDocument document = new XWPFDocument(fis)) {
 // 获取所有图片数据
             List<XWPFPictureData> pictures = document.getAllPictures();
+            String dirName = dir.getName();
+            if (!dir.exists()) {
+                dir.mkdir();
+            }
             int imageIndex = 1;
             for (XWPFPictureData picture : pictures) {
                 String suggestFileExtension = picture.suggestFileExtension();
@@ -74,14 +79,19 @@ public class WordService {
                     suggestFileExtension = "png";
 
                 }
+
 // 获取图片数据和文件名
                 byte[] bytes = picture.getData();
-                String fileName = UUID.randomUUID() + "_" + imageIndex + "." + suggestFileExtension;
+                String pictureName = picture.getFileName();
+                String[] tem = pictureName.split("\\.");
+                String truePictureName = tem[0];
+                String refx = dirName + FileUtils.FILE_SEPARATOR;
+
+                String fileName = refx + truePictureName + "." + suggestFileExtension;
                 File file = new File(fileName);
 // 保存图片到本地
                 try (FileOutputStream fos = new FileOutputStream(file)) {
                     fos.write(bytes);
-
                 }
                 files.add(file);
                 imageIndex++;
@@ -93,31 +103,42 @@ public class WordService {
         return files;
     }
 
-    public List<File> getDocPictures(InputStream fis) throws IOException {
+    public List<File> getDocPictures(InputStream fis, File dir) throws IOException {
         String picStr = "";
         List<File> files = new ArrayList<>();
         HWPFDocument doc = null;
         try {
+            String dirName = dir.getName();
             doc = new HWPFDocument(fis);
 // 获取所有图片数据
             int length = doc.characterLength();
             PicturesTable pTable = doc.getPicturesTable();
+            int imageIndex = 1;
             for (Picture picture : pTable.getAllPictures()) {
                 String suggestFileExtension = picture.suggestFileExtension();
-                String fileName = "image." + suggestFileExtension;
-                File file = new File(UUID.randomUUID() + fileName);
+                String suggestFullFileName = picture.suggestFullFileName();
+                String[] suggestFullFileNames = suggestFullFileName.split("\\.");
+                String trueName = "图"+imageIndex;
+                String fullTrueName = dirName + FileUtils.FILE_SEPARATOR + trueName;
+                String fileName = fullTrueName + "." + suggestFileExtension;
+
+                File file = new File(fileName);
+                byte[] bytes = picture.getContent();
 
-                OutputStream out = new FileOutputStream(file);
-                picture.writeImageContent(out);
+                try (FileOutputStream fos = new FileOutputStream(file)) {
+                    fos.write(bytes);
+                }
+//                OutputStream out = new FileOutputStream(file);
+//                picture.writeImageContent(out);
 
                 if (!images.contains(suggestFileExtension)) {
-                    File newFile = new File(UUID.randomUUID() + ".png");
+                    File newFile = new File(fullTrueName + ".png");
                     if (suggestFileExtension.equals("emf")) {
                         file = PictureUtils.convertEmfToPng(file, newFile);
                     }
                 }
                 files.add(file);
-
+                imageIndex++;
 
             }
 

+ 16 - 0
src/main/java/cn/cslg/pas/service/dify/AssoConfessionSessionFileService.java

@@ -74,4 +74,20 @@ public class AssoConfessionSessionFileService extends ServiceImpl<AssoConfession
         this.saveBatch(assoConfessionSessionFiles);
         return assoConfessionSessionFiles;
     }
+    public List<AssoConfessionSessionFile> addDiscoveryPicturesByGuid(List<String> guids , Integer confessionSessionId) {
+        Integer type = 2;
+        List<AssoConfessionSessionFile> assoConfessionSessionFiles = new ArrayList<>();
+        if (guids == null || guids.size() == 0) {
+            return assoConfessionSessionFiles;
+        }
+        guids.forEach(item -> {
+            AssoConfessionSessionFile assoConfessionSessionFile = new AssoConfessionSessionFile();
+            assoConfessionSessionFile.setConfessionSessionId(confessionSessionId);
+            assoConfessionSessionFile.setType(type);
+            assoConfessionSessionFile.setGuid(item);
+            assoConfessionSessionFiles.add(assoConfessionSessionFile);
+        });
+        this.saveBatch(assoConfessionSessionFiles);
+        return assoConfessionSessionFiles;
+    }
 }

+ 63 - 13
src/main/java/cn/cslg/pas/service/dify/GenerateDiscoveryResultService.java

@@ -1,10 +1,15 @@
 package cn.cslg.pas.service.dify;
 
+import cn.cslg.pas.common.model.cronModel.SystemFile;
 import cn.cslg.pas.common.model.dify.ChatMessageDTO;
 import cn.cslg.pas.common.model.dify.DifyChatMessageDTO;
 import cn.cslg.pas.common.model.dify.generateDiscoveryResult.DiscoryResultVO;
+import cn.cslg.pas.common.model.dify.generateDiscoveryResult.QueryDiscoveryPictureDTO;
+import cn.cslg.pas.common.model.dify.generateDiscoveryResult.UpdateDiscoveryPictureDTO;
+import cn.cslg.pas.common.utils.FileUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.domain.dify.ConfessionSession;
+import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.service.common.DifyService;
 import cn.cslg.pas.service.common.FileManagerService;
 import cn.cslg.pas.service.common.WordService;
@@ -17,10 +22,7 @@ import org.springframework.stereotype.Service;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Service
 public class GenerateDiscoveryResultService {
@@ -38,6 +40,9 @@ public class GenerateDiscoveryResultService {
     private FileManagerService fileManagerService;
     @Autowired
     private WordService wordService;
+    @Autowired
+    private AssoConfessionSessionFileService assoConfessionSessionFileService;
+
     public DiscoryResultVO generateResult(ChatMessageDTO chatMessageDTO) throws Exception {
         DiscoryResultVO discoryResultVO = null;
         Integer confessionSessionId = chatMessageDTO.getConfessionSessionId();
@@ -45,7 +50,7 @@ public class GenerateDiscoveryResultService {
         ConfessionSession confessionSession = confessionSessionService.getById(confessionSessionId);
         String fileId = confessionSession.getGuid();
         String path = fileDownloadUrl + fileId;
-
+        this.addDiscoveryPictures(fileId, confessionSessionId);
         DifyChatMessageDTO difyChatMessageDTO = new DifyChatMessageDTO();
         difyChatMessageDTO.setUser(loginUtils.getId().toString());
         difyChatMessageDTO.setResponseMode("blocking");
@@ -87,18 +92,63 @@ public class GenerateDiscoveryResultService {
         return discoryResultVO;
 
     }
-    private  void addDiscoveryPictures(String fileId) throws Exception{
-       File file= fileManagerService.getOrgTempFileByGuid(fileId);
+
+    private void addDiscoveryPictures(String fileId, Integer confessionSessionId) throws Exception {
+        File file = fileManagerService.getOrgTempFileByGuid(fileId);
         //保存交底书附图
-        List<File> fileList =new ArrayList<>();
+        List<File> fileList = new ArrayList<>();
+        String dirName = UUID.randomUUID() + "";
         try {
-            InputStream inputStream =new FileInputStream(file);
-        }
-        catch (Exception e){
+            InputStream inputStream = new FileInputStream(file);
+            String orgName = file.getName();
+            String fileType = FileUtils.getFileType(orgName);
+
+            File dir = new File(dirName);
+            if (!dir.exists()) {
+                dir.mkdir();
+            }
+            switch (fileType) {
+                case "doc":
+                    fileList = wordService.getDocPictures(inputStream, dir);
+
+                    break;
+                case "docx":
+                    fileList = wordService.getDocxPictures(inputStream, dir);
+
+                    break;
+            }
+            if (fileList.size() > 0) {
+                assoConfessionSessionFileService.addDiscoveryPictures(fileList, confessionSessionId);
+            }
+        } catch (Exception e) {
             e.printStackTrace();
-        }finally {
-            fileList.forEach(item->item.delete());
+        } finally {
+            FileUtils.deleteFolder(dirName);
             file.delete();
         }
     }
+
+    public List<SystemFile> getDiscoveryPictures(QueryDiscoveryPictureDTO queryDiscoveryPictureDTO) {
+        Integer confessionSessionId = queryDiscoveryPictureDTO.getConfessionSessionId();
+        List<String> guids = assoConfessionSessionFileService.getFileGuid(confessionSessionId, 2);
+        List<SystemFile> systemFiles = new ArrayList<>();
+        if (guids != null && guids.size() > 0) {
+            try {
+                String res = fileManagerService.getSystemFileFromFMS(guids);
+                systemFiles = com.alibaba.fastjson.JSONObject.parseArray(res, SystemFile.class);
+            } catch (Exception e) {
+                throw new XiaoShiException("查询文件详细信息错误" + e);
+            }
+        }
+        return systemFiles;
+    }
+
+    public void uploadDiscoveryPictures(UpdateDiscoveryPictureDTO updateDiscoveryPictureDTO) {
+        Integer confessionSessionId = updateDiscoveryPictureDTO.getConfessionSessionId();
+        List<String> guids = updateDiscoveryPictureDTO.getFileGuids();
+        if (guids == null || guids.size() == 0) {
+            return;
+        }
+        assoConfessionSessionFileService.addDiscoveryPicturesByGuid(guids, confessionSessionId);
+    }
 }