Selaa lähdekoodia

Merge remote-tracking branch 'origin/master_oa'

# Conflicts:
#	src/main/java/cn/cslg/pas/controller/outApi/DifyController.java
#	src/main/java/cn/cslg/pas/service/common/DifyService.java
#	src/main/resources/application-dev.yml
#	src/main/resources/application-testNetIn.yml
zero 4 kuukautta sitten
vanhempi
commit
7ce18b570d
19 muutettua tiedostoa jossa 330 lisäystä ja 5 poistoa
  1. 3 1
      src/main/java/cn/cslg/pas/common/model/dify/DifyFile.java
  2. 19 0
      src/main/java/cn/cslg/pas/common/model/dify/OAMessageDTO.java
  3. 11 0
      src/main/java/cn/cslg/pas/common/model/dify/confessionSession/AddConfessionSessionFileDTO.java
  4. 17 0
      src/main/java/cn/cslg/pas/common/model/dify/confessionSession/QueryAssoConfessionSessionFileDTO.java
  5. 2 0
      src/main/java/cn/cslg/pas/common/model/dify/confessionSession/QueryConfessionSessionVO.java
  6. 2 0
      src/main/java/cn/cslg/pas/common/utils/DataUtils.java
  7. 15 0
      src/main/java/cn/cslg/pas/controller/common/AssoConfessionSessionFileController.java
  8. 7 0
      src/main/java/cn/cslg/pas/controller/common/ConfessionSessionController.java
  9. 7 0
      src/main/java/cn/cslg/pas/controller/outApi/DifyController.java
  10. 17 0
      src/main/java/cn/cslg/pas/domain/dify/AssoConfessionSessionFile.java
  11. 7 0
      src/main/java/cn/cslg/pas/mapper/dify/AssoConfessionSessionFileMapper.java
  12. 5 0
      src/main/java/cn/cslg/pas/mapper/dify/ConfessionSessionMapper.java
  13. 110 3
      src/main/java/cn/cslg/pas/service/common/DifyService.java
  14. 12 0
      src/main/java/cn/cslg/pas/service/dify/AssoConfessionSessionFileService.java
  15. 59 0
      src/main/java/cn/cslg/pas/service/dify/ConfessionSessionService.java
  16. 1 0
      src/main/resources/application-dev.yml
  17. 2 1
      src/main/resources/application-testNetIn.yml
  18. 13 0
      src/main/resources/mapper/ConfessionSessionMapper.xml
  19. 21 0
      src/test/java/cn/cslg/pas/service/EventServiceTests.java

+ 3 - 1
src/main/java/cn/cslg/pas/common/model/dify/DifyFile.java

@@ -1,12 +1,14 @@
 package cn.cslg.pas.common.model.dify;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.gson.annotations.SerializedName;
 import lombok.Data;
 
 @Data
 public class DifyFile {
     private String type;
-    @JsonProperty("transfer_method")
+//    @JsonProperty("transfer_method")
+    @SerializedName("transfer_method")
     private String transferMethod;
     private String url;
     @JsonProperty("upload_file_id")

+ 19 - 0
src/main/java/cn/cslg/pas/common/model/dify/OAMessageDTO.java

@@ -0,0 +1,19 @@
+package cn.cslg.pas.common.model.dify;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class OAMessageDTO {
+    @SerializedName("response_mode")
+    private String responseMode;
+    @JsonProperty("user")
+    private String user;
+
+    private Map<String,Object> inputs;
+    private List<DifyFile> files;
+}

+ 11 - 0
src/main/java/cn/cslg/pas/common/model/dify/confessionSession/AddConfessionSessionFileDTO.java

@@ -0,0 +1,11 @@
+package cn.cslg.pas.common.model.dify.confessionSession;
+
+import lombok.Data;
+
+@Data
+public class AddConfessionSessionFileDTO {
+
+    private Integer confessionSessionId;
+
+    private String guid;
+}

+ 17 - 0
src/main/java/cn/cslg/pas/common/model/dify/confessionSession/QueryAssoConfessionSessionFileDTO.java

@@ -0,0 +1,17 @@
+package cn.cslg.pas.common.model.dify.confessionSession;
+
+import cn.cslg.pas.common.model.cronModel.SystemFile;
+import lombok.Data;
+
+@Data
+public class QueryAssoConfessionSessionFileDTO {
+
+    private Integer assoConfessionSessionFileId;
+
+    private Integer confessionSessionId;
+
+    private String guid;
+
+    private SystemFile systemFile;
+
+}

+ 2 - 0
src/main/java/cn/cslg/pas/common/model/dify/confessionSession/QueryConfessionSessionVO.java

@@ -15,4 +15,6 @@ public class QueryConfessionSessionVO {
     private String createId;
     private Date createTime;
     private String content;
+    private Integer type;
+    private SystemFile assoSystemFile;
 }

+ 2 - 0
src/main/java/cn/cslg/pas/common/utils/DataUtils.java

@@ -243,6 +243,8 @@ public class DataUtils {
         }
         return result;
     }
+
+    //将Unicode代码转为字符
     public static String unicodeDecode(String string) {
         Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
         Matcher matcher = pattern.matcher(string);

+ 15 - 0
src/main/java/cn/cslg/pas/controller/common/AssoConfessionSessionFileController.java

@@ -0,0 +1,15 @@
+package cn.cslg.pas.controller.common;
+
+import cn.cslg.pas.common.core.base.Constants;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Tag(name = "外部人员调用接口")
+@RestController
+@RequestMapping(Constants.API_XiaoSHI + "/assoConfessionSessionFile")
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class AssoConfessionSessionFileController {
+}

+ 7 - 0
src/main/java/cn/cslg/pas/controller/common/ConfessionSessionController.java

@@ -78,4 +78,11 @@ public class ConfessionSessionController {
         return Response.success(id);
     }
 
+    @RequestMapping(value = "/addConfessionSessionFile", method = RequestMethod.POST)
+    @Operation(summary = "添加会话记录关联文件")
+    public Response addConfessionSessionFile(@RequestBody AddConfessionSessionFileDTO addConfessionSessionDTO) throws IOException {
+        Integer id = confessionSessionService.addConfessionSessionFile(addConfessionSessionDTO);
+        return Response.success(id);
+    }
+
 }

+ 7 - 0
src/main/java/cn/cslg/pas/controller/outApi/DifyController.java

@@ -4,6 +4,7 @@ import cn.cslg.pas.common.core.base.Constants;
 import cn.cslg.pas.common.model.dify.ChatMessageDTO;
 import cn.cslg.pas.common.model.dify.DifyChatMessageDTO;
 import cn.cslg.pas.common.model.dify.DifyHistoryMessageDTO;
+import cn.cslg.pas.common.model.dify.OAMessageDTO;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.common.utils.Response;
@@ -91,4 +92,10 @@ public class DifyController {
     public Response generateClaimExplain(@RequestBody ChatMessageDTO chatMessageDTO) throws IOException {
         return Response.success(difyService.ge(chatMessageDTO));
     }
+
+    @RequestMapping(value = "/sendOADefense", method = RequestMethod.GET, produces = MediaType.TEXT_EVENT_STREAM_VALUE)
+    @Operation(summary = "OA答辩")
+    public Flux<String> sendOADefense(Integer confessionSessionId) throws IOException {
+        return difyService.successGetOAHttp(confessionSessionId);
+    }
 }

+ 17 - 0
src/main/java/cn/cslg/pas/domain/dify/AssoConfessionSessionFile.java

@@ -0,0 +1,17 @@
+package cn.cslg.pas.domain.dify;
+
+import cn.cslg.pas.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@TableName(value = "asso_confession_session_file")
+@Data
+public class AssoConfessionSessionFile extends BaseEntity<AssoConfessionSessionFile> {
+
+    @TableField(value = "confession_session_id")
+    private Integer confessionSessionId;
+
+    @TableField(value = "guid")
+    private String guid;
+}

+ 7 - 0
src/main/java/cn/cslg/pas/mapper/dify/AssoConfessionSessionFileMapper.java

@@ -0,0 +1,7 @@
+package cn.cslg.pas.mapper.dify;
+
+import cn.cslg.pas.domain.dify.AssoConfessionSessionFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface AssoConfessionSessionFileMapper extends BaseMapper<AssoConfessionSessionFile> {
+}

+ 5 - 0
src/main/java/cn/cslg/pas/mapper/dify/ConfessionSessionMapper.java

@@ -2,6 +2,8 @@ package cn.cslg.pas.mapper.dify;
 
 import cn.cslg.pas.domain.dify.ConfessionSession;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
 
 /**
 * @author admin
@@ -9,8 +11,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 * @createDate 2025-04-16 15:48:57
 * @Entity cn.cslg.pas.domain.novelty.domain.ConfessionSession
 */
+@Repository
 public interface ConfessionSessionMapper extends BaseMapper<ConfessionSession> {
 
+    public int updateSingleField(@Param("id") Integer id, @Param("field") String field,
+                                 @Param("value") Object value);
 }
 
 

+ 110 - 3
src/main/java/cn/cslg/pas/service/common/DifyService.java

@@ -1,9 +1,7 @@
 package cn.cslg.pas.service.common;
 
 
-import cn.cslg.pas.common.model.dify.ChatMessageDTO;
-import cn.cslg.pas.common.model.dify.DifyChatMessageDTO;
-import cn.cslg.pas.common.model.dify.DifyHistoryMessageDTO;
+import cn.cslg.pas.common.model.dify.*;
 
 import cn.cslg.pas.common.model.dify.confessionSession.AddConfessionSessionDTO;
 import cn.cslg.pas.common.model.dify.confessionSession.UpdateConfessionSessionDTO;
@@ -14,6 +12,7 @@ import cn.cslg.pas.common.utils.LoginUtils;
 import cn.cslg.pas.domain.business.TechnicalCase;
 import cn.cslg.pas.domain.dify.ConfessionSession;
 import cn.cslg.pas.domain.report.AssoProjectConfession;
+import cn.cslg.pas.mapper.dify.ConfessionSessionMapper;
 import cn.cslg.pas.service.business.TechnicalCaseService;
 import cn.cslg.pas.service.dify.ConfessionSessionService;
 import cn.cslg.pas.service.dify.DifySessionService;
@@ -21,6 +20,7 @@ import cn.cslg.pas.service.report.AssoProjectConfessionService;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.Gson;
@@ -28,13 +28,17 @@ import com.google.gson.GsonBuilder;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.*;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.w3c.dom.DocumentType;
 import reactor.core.publisher.Flux;
 
+import javax.swing.text.Document;
 import java.io.*;
 
 
@@ -54,6 +58,8 @@ import java.util.concurrent.TimeUnit;
 public class DifyService {
     @Value("${DIFY.apiKey}")
     private String apiKey;
+    @Value("${DIFY.OAApiKey}")
+    private String OAApiKey;
     @Value("${DIFY.url}")
     private String url;
     @Value("${FileDownloadUrl}")
@@ -68,6 +74,8 @@ public class DifyService {
     @Autowired
     private LoginUtils loginUtils;
     private final ConfessionSessionService confessionSessionService;
+    @Autowired
+    private ConfessionSessionMapper confessionSessionMapper;
 
     /**
      * 调用文件系统删除文件接口
@@ -360,4 +368,103 @@ public class DifyService {
         System.out.println(res);
         return reMap;
     }
+
+
+    public Flux<String> successGetOAHttp(Integer confessionSessionId) {
+        ConfessionSession confessionSession = confessionSessionService.getById(confessionSessionId);
+        String fileUrl = fileDownloadUrl + confessionSession.getGuid();
+        String userId = loginUtils.getId().toString();
+
+        OkHttpClient client = new OkHttpClient.Builder()
+                .connectTimeout(600, TimeUnit.SECONDS)
+                .writeTimeout(600, TimeUnit.SECONDS)
+                .readTimeout(600, TimeUnit.SECONDS)
+                .build();
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("fileUrl", fileUrl);
+
+        OAMessageDTO oaMessageDTO = new OAMessageDTO();
+        oaMessageDTO.setInputs(map);
+        oaMessageDTO.setResponseMode("streaming");
+        oaMessageDTO.setUser(userId);
+        oaMessageDTO.setFiles(new ArrayList<>());
+
+        String param = new Gson().toJson(oaMessageDTO);
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), param);
+        Request request = new Request.Builder()
+                .url(url + "workflows/run")
+                .addHeader("Authorization", "Bearer " + OAApiKey)
+                .addHeader(HttpHeaders.CONTENT_TYPE, "application/json")
+                .post(requestBody)
+                .build();
+        return Flux.create(emitter -> {
+            client.newCall(request).enqueue(new Callback() {
+                @Override
+                public void onFailure(Call call, IOException e) {
+                    emitter.error(e);
+                }
+
+                @Override
+                public void onResponse(Call call, Response response) throws IOException {
+
+                    if (!response.isSuccessful()) {
+                        emitter.error(new IOException("Unexpected code: " + response));
+                        return;
+                    }
+
+                    try (Reader reader = response.body().charStream()) {
+                        BufferedReader bufferedReader = new BufferedReader(reader);
+                        String line;
+                        String prefixToRemove = "data: ";
+                        String runId = "";
+                        while ((line = bufferedReader.readLine()) != null) {
+                            if (line.isEmpty()) {
+                                continue;
+                            }
+                            if (line.startsWith(prefixToRemove)) {
+                                line = line.substring(prefixToRemove.length());
+                            }
+                            try {
+                                JSONObject jsonObject = JSON.parseObject(line);
+                                String workflowRunId = jsonObject.get("workflow_run_id").toString();
+                                String event = jsonObject.get("event").toString();
+                                if (StringUtils.isNotEmpty(workflowRunId)) {
+                                    if (StringUtils.isEmpty(runId)) {
+                                        runId = workflowRunId;
+                                        confessionSessionMapper.updateSingleField(confessionSessionId, "conversation_id", workflowRunId);
+
+                                    }
+                                }
+                                if (event.equals("workflow_finished")) {
+                                    String data = jsonObject.get("data").toString();
+                                    String content = "";
+                                    if (StringUtils.isNotEmpty(data)) {
+                                        JSONObject dataObject = JSON.parseObject(data);
+                                        String outputs = dataObject.get("outputs").toString();
+                                        if (StringUtils.isNotEmpty(outputs)) {
+                                            JSONObject outputsObject = JSON.parseObject(outputs);
+                                            String output = outputsObject.get("output").toString();
+                                            content = DataUtils.unicodeDecode(output);
+                                        }
+                                    }
+                                    if (StringUtils.isNotEmpty(content)) {
+                                        JSONObject obj = new JSONObject();
+                                        obj.put("answer", content);
+                                        confessionSessionMapper.updateSingleField(confessionSessionId, "content", obj.toString());
+                                    }
+                                }
+                            } catch (Exception e) {
+                            }
+                            emitter.next(line); // 将每行数据发送到 Flux
+                        }
+                    } catch (IOException e) {
+                        emitter.error(e);
+                    } finally {
+                        emitter.complete();
+                    }
+                }
+            });
+        });
+    }
 }

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

@@ -0,0 +1,12 @@
+package cn.cslg.pas.service.dify;
+
+import cn.cslg.pas.domain.dify.AssoConfessionSessionFile;
+import cn.cslg.pas.mapper.dify.AssoConfessionSessionFileMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@RequiredArgsConstructor
+public class AssoConfessionSessionFileService extends ServiceImpl<AssoConfessionSessionFileMapper, AssoConfessionSessionFile> {
+}

+ 59 - 0
src/main/java/cn/cslg/pas/service/dify/ConfessionSessionService.java

@@ -5,8 +5,10 @@ import cn.cslg.pas.common.model.dify.confessionSession.*;
 import cn.cslg.pas.common.utils.CacheUtils;
 import cn.cslg.pas.common.utils.FormatUtil;
 import cn.cslg.pas.common.utils.LoginUtils;
+import cn.cslg.pas.domain.dify.AssoConfessionSessionFile;
 import cn.cslg.pas.exception.ExceptionEnum;
 import cn.cslg.pas.exception.XiaoShiException;
+import cn.cslg.pas.mapper.dify.AssoConfessionSessionFileMapper;
 import cn.cslg.pas.service.common.FileManagerService;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -14,9 +16,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import cn.cslg.pas.domain.dify.ConfessionSession;
 import cn.cslg.pas.mapper.dify.ConfessionSessionMapper;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -34,6 +39,7 @@ public class ConfessionSessionService extends ServiceImpl<ConfessionSessionMappe
     private final CacheUtils cacheUtils;
     private final LoginUtils loginUtils;
     private final FileManagerService fileManagerService;
+    private final AssoConfessionSessionFileMapper assoConfessionSessionFileMapper;
 
     public Integer addConfessionSession(AddConfessionSessionDTO addConfessionSessionDTO) {
         String guid = addConfessionSessionDTO.getFileGuid();
@@ -57,6 +63,7 @@ public class ConfessionSessionService extends ServiceImpl<ConfessionSessionMappe
         confessionSession.setConversationName(name);
         String id = loginUtils.getId().toString();
         confessionSession.setCreateId(id);
+        confessionSession.setType(addConfessionSessionDTO.getType());
         confessionSession.insert();
         return confessionSession.getId();
     }
@@ -100,6 +107,10 @@ public class ConfessionSessionService extends ServiceImpl<ConfessionSessionMappe
         } catch (Exception e) {
             e.printStackTrace();
         }
+
+        List<Integer> confessionSessionIds = confessionSessions.stream().map(ConfessionSession::getId).collect(Collectors.toList());
+        List<QueryAssoConfessionSessionFileDTO> sessionFileDTOS = this.queryAssoConfessionSessionFileDTOS(confessionSessionIds);
+
         for (ConfessionSession confessionSession : confessionSessions) {
             QueryConfessionSessionVO queryConfessionSessionVO = new QueryConfessionSessionVO();
             BeanUtils.copyProperties(confessionSession, queryConfessionSessionVO);
@@ -108,11 +119,51 @@ public class ConfessionSessionService extends ServiceImpl<ConfessionSessionMappe
                 SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(guid)).findFirst().orElse(null);
                 queryConfessionSessionVO.setSystemFile(systemFile);
             }
+            if (!CollectionUtils.isEmpty(sessionFileDTOS)) {
+                QueryAssoConfessionSessionFileDTO fileDTO = sessionFileDTOS.stream().filter(i -> i.getConfessionSessionId().equals(confessionSession.getId())).findFirst().orElse(null);
+                if (fileDTO != null) {
+                    queryConfessionSessionVO.setAssoSystemFile(fileDTO.getSystemFile());
+                }
+            }
             queryConfessionSessionVOS.add(queryConfessionSessionVO);
         }
         return queryConfessionSessionVOS;
     }
 
+    public List<QueryAssoConfessionSessionFileDTO> queryAssoConfessionSessionFileDTOS(List<Integer> list) {
+        //装载会话关联文件信息
+        List<QueryAssoConfessionSessionFileDTO> assoConfessionSessionFileDTOS = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(list)) {
+            List<AssoConfessionSessionFile> assoConfessionSessionFiles = assoConfessionSessionFileMapper.selectList(new LambdaQueryWrapper<AssoConfessionSessionFile>()
+                    .in(AssoConfessionSessionFile::getConfessionSessionId, list));
+            if (!CollectionUtils.isEmpty(assoConfessionSessionFiles)) {
+                List<String> fileGuids = assoConfessionSessionFiles.stream().map(AssoConfessionSessionFile::getGuid)
+                        .filter(StringUtils::isNotEmpty).collect(Collectors.toList());
+                List<SystemFile> systemFiles = new ArrayList<>();
+                try {
+                    if (!CollectionUtils.isEmpty(fileGuids)) {
+                        String res = fileManagerService.getSystemFileFromFMS(fileGuids);
+                        systemFiles = JSONObject.parseArray(res, SystemFile.class);
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+                for (AssoConfessionSessionFile sessionFile : assoConfessionSessionFiles) {
+                    QueryAssoConfessionSessionFileDTO fileDTO = new QueryAssoConfessionSessionFileDTO();
+                    BeanUtils.copyProperties(sessionFile, fileDTO);
+                    fileDTO.setAssoConfessionSessionFileId(sessionFile.getId());
+                    if (!CollectionUtils.isEmpty(systemFiles)) {
+                        SystemFile systemFile = systemFiles.stream().filter(item -> item.getGuid().equals(sessionFile.getGuid())).findFirst().orElse(null);
+                        fileDTO.setSystemFile(systemFile);
+                    }
+                    assoConfessionSessionFileDTOS.add(fileDTO);
+                }
+            }
+        }
+        return assoConfessionSessionFileDTOS;
+    }
+
     public List<Integer> deleteConfessionSessions(DeleteConfessionSessionDTO deleteConfessionSessionDTO) {
         List<Integer> ids = deleteConfessionSessionDTO.getConfessionSessionIds();
         this.removeBatchByIds(ids);
@@ -130,6 +181,14 @@ public class ConfessionSessionService extends ServiceImpl<ConfessionSessionMappe
         confessionSession.insert();
         return confessionSession.getId();
     }
+
+    public Integer addConfessionSessionFile(AddConfessionSessionFileDTO addConfessionSessionFileDTO) {
+        AssoConfessionSessionFile assoConfessionSessionFile = new AssoConfessionSessionFile();
+        assoConfessionSessionFile.setConfessionSessionId(addConfessionSessionFileDTO.getConfessionSessionId());
+        assoConfessionSessionFile.setGuid(addConfessionSessionFileDTO.getGuid());
+        assoConfessionSessionFile.insert();
+        return assoConfessionSessionFile.getId();
+    }
 }
 
 

+ 1 - 0
src/main/resources/application-dev.yml

@@ -88,4 +88,5 @@ management:
 DIFY:
   apiKey: app-DDGJt4QUmzlc2aFQ5voOAXIj
   cliamKey: app-fxpiWOYqtJM1BOaJnG54NlCZ
+  OAApiKey: app-mmfvVywt7wdS8HofrYpFy4RL
   url: http://192.168.2.24/v1/

+ 2 - 1
src/main/resources/application-testNetIn.yml

@@ -80,4 +80,5 @@ WDSYS:
   password: Lqftiu807005
 DIFY:
   apiKey: app-DDGJt4QUmzlc2aFQ5voOAXIj
-  url: https://ai.xsip.cn/v1/
+  OAApiKey: app-mmfvVywt7wdS8HofrYpFy4RL
+  url: https://ai.xsip.cn/v1/

+ 13 - 0
src/main/resources/mapper/ConfessionSessionMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.cslg.pas.mapper.dify.ConfessionSessionMapper">
+
+    <update id="updateSingleField">
+        UPDATE confession_session
+        <set>
+            ${field} = #{value}
+        </set>
+        WHERE id = #{id}
+    </update>
+
+</mapper>

+ 21 - 0
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -25,6 +25,7 @@ import cn.cslg.pas.domain.es.PatentPerson;
 import cn.cslg.pas.exception.ExceptionEnum;
 import cn.cslg.pas.exception.XiaoShiException;
 import cn.cslg.pas.mapper.AssoProjectEventMapper;
+import cn.cslg.pas.mapper.dify.ConfessionSessionMapper;
 import cn.cslg.pas.service.business.*;
 import cn.cslg.pas.service.business.es.*;
 import cn.cslg.pas.service.common.FileManagerService;
@@ -930,4 +931,24 @@ public class EventServiceTests {
         GenerateObjectUtil.getTableColumnName(project,"evidenceRiskResponse");
     }
 
+    @Autowired
+    private ConfessionSessionMapper sessionMapper;
+
+    @Test
+    public void test121() throws Exception {
+//        String s = "<details style=\\\"color:gray;background-color: #f8f8f8;padding: 8px;border-radius: 4px;\\\" open> <summary> Thinking... </summary>\\u55ef\\uff0c\\u7528\\u6237\\u7ed9\\u4e86\\u4e00\\u4e2a\\u5173\\u4e8e\\u4e13\\u5229\\u5ba1\\u67e5\\u610f\\u89c1\\u7b54\\u590d\\u7684\\u590d\\u6742\\u95ee\\u9898\\uff0c\\u9700\\u8981";
+//        final String unicodeDecode = DataUtils.unicodeDecode(s);
+//        System.out.println(unicodeDecode);
+//
+//
+//        JSONObject obj = new JSONObject();
+//        obj.put("answer", unicodeDecode);
+//        final String s1 = obj.toJSONString();
+//        final String s2 = obj.toString();
+//        System.out.println(s1);
+//        System.out.println(s2);
+        final int i = sessionMapper.updateSingleField(78, "content", "1222");
+        System.out.println(i);
+
+    }
 }