调用dify,解决时间问题,源语料为空的问题

This commit is contained in:
spllzh
2025-09-07 23:59:17 +08:00
parent d84aa8ae78
commit a25d80ae28

View File

@@ -0,0 +1,113 @@
package com.rj.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.rj.dto.DifyWorkflowRequestDto;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureWebMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
/**
* Dify工作流控制器测试类
*
* @author 李中华
* @date 2025/1/3
*/
@SpringBootTest
@AutoConfigureWebMvc
@ActiveProfiles("test")
public class DifyWorkflowControllerTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testGetWorkflowConfig() throws Exception {
setup();
mockMvc.perform(get("/api/dify/workflow/config")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.message").value("工作流配置信息"))
.andExpect(jsonPath("$.workflowName").value("企微对话分析工作流"));
}
@Test
public void testTestWithPresetData() throws Exception {
setup();
mockMvc.perform(post("/api/dify/workflow/consulting-scenario/test")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.success").exists());
}
@Test
public void testConsultingScenarioWorkflowWithParameters() throws Exception {
setup();
// 读取真实的聊天内容
ClassLoader classLoader = getClass().getClassLoader();
java.io.InputStream inputStream = classLoader.getResourceAsStream("corpus/qiwei/qw1.txt");
java.util.Scanner scanner = new java.util.Scanner(inputStream, "UTF-8").useDelimiter("\\A");
String chatContent = scanner.hasNext() ? scanner.next() : "";
scanner.close();
// 生成随机值
String unionId = "test_union_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 8);
String consultantId = "consultant_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 8);
String communicateDate = generateRandomDateTime();
String analysisScene = "sales_consultation";
String aiAnalysisRequestId = "ai_req_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 12);
int version = new java.util.Random().nextInt(10) + 1; // 1-10之间的随机版本号
// 创建测试请求DTO
DifyWorkflowRequestDto requestDto = new DifyWorkflowRequestDto();
requestDto.setUnionId(unionId);
requestDto.setConsultantId(consultantId);
requestDto.setCommunicateDate(communicateDate);
requestDto.setAnalysisScene(analysisScene);
requestDto.setAiAnalysisRequestId(aiAnalysisRequestId);
requestDto.setVersion(version);
requestDto.setChat(chatContent);
mockMvc.perform(post("/api/dify/workflow/consulting-scenario")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(requestDto)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.success").exists());
}
/**
* 生成随机日期时间字符串
* @return 随机日期时间字符串,格式为 "yyyy-MM-dd HH:mm:ss"
*/
private String generateRandomDateTime() {
java.util.Random random = new java.util.Random();
int year = 2020 + random.nextInt(6); // 2020-2025年
int month = 1 + random.nextInt(12); // 1-12月
int day = 1 + random.nextInt(28); // 1-28日避免月份天数问题
int hour = random.nextInt(24); // 0-23小时
int minute = random.nextInt(60); // 0-59分钟
int second = random.nextInt(60); // 0-59秒
return String.format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second);
}
}