Files
smartDriveEE/src/main/java/com/rj/controller/DifyWorkflowController.java
2025-09-25 19:48:57 +08:00

188 lines
7.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.rj.controller;
import com.rj.dto.CommunityFeedDTO;
import com.rj.dto.DifyWorkflowRequestDto;
import com.rj.dto.DifyWorkflowResponseDto;
import com.rj.dto.CustomerProfileAnalysisRequestDto;
import com.rj.service.DifyWorkflowService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import jakarta.validation.Valid;
import java.util.HashMap;
import java.util.Map;
/**
* Dify工作流控制器
*
* @author 李中华
* @date 2025/1/3
*/
@Slf4j
@RestController
@RequestMapping("/api/aicommunity")
@Tag(name = "Dify工作流", description = "Dify工作流API接口")
public class DifyWorkflowController {
@Autowired
private DifyWorkflowService difyWorkflowService;
/**
* 企微对话分析工作流
*/
@PostMapping("/workflow/consulting-scenario")
@Operation(summary = "企微对话分析工作流", description = "调用Dify企微对话分析工作流")
public ResponseEntity<DifyWorkflowResponseDto> consultingScenarioWorkflow(
@Valid @RequestBody DifyWorkflowRequestDto requestDto) {
try {
log.info("开始调用企微对话分析工作流, 参数: "+requestDto.toString());
// 构建工作流输入参数
Map<String, Object> inputs = new HashMap<>();
inputs.put("unionId", requestDto.getUnionId());
inputs.put("consultantId", requestDto.getConsultantId());
inputs.put("communicateDate", requestDto.getCommunicateDate());
inputs.put("analysisScene", requestDto.getAnalysisScene());
inputs.put("aiAnalysisRequestId", requestDto.getAiAnalysisRequestId());
inputs.put("version", requestDto.getVersion());
inputs.put("chat", requestDto.getChat());
// 创建请求对象
DifyWorkflowService.DifyWorkflowRequest request =
new DifyWorkflowService.DifyWorkflowRequest(inputs, requestDto.getConsultantId());
// 调用工作流Service层会自动保存数据到数据库
DifyWorkflowService.DifyWorkflowResponse response =
difyWorkflowService.callConsultingScenarioWorkflow(request);
// 构建返回结果
DifyWorkflowResponseDto result = DifyWorkflowResponseDto.success(
response.getWorkflowRunId(),
response.getTaskId(),
response.getData(),
response.getMetadata()
);
return ResponseEntity.ok(result);
} catch (Exception e) {
log.error("调用企微对话分析工作流失败", e);
DifyWorkflowResponseDto errorResult = DifyWorkflowResponseDto.failure(
"工作流调用失败: " + e.getMessage(),
e.getClass().getSimpleName()
);
return ResponseEntity.status(500).body(errorResult);
}
}
/**
* DCC对话分析工作流
*/
@PostMapping("/workflow/dcc-scenario")
@Operation(summary = "DCC对话分析工作流", description = "调用Dify DCC对话分析工作流")
public ResponseEntity<DifyWorkflowResponseDto> dccScenarioWorkflow(
@Valid @RequestBody DifyWorkflowRequestDto requestDto) {
try {
log.info("开始调用DCC对话分析工作流参数 " + requestDto.toString());
// 构建工作流输入参数
Map<String, Object> inputs = new HashMap<>();
inputs.put("unionId", requestDto.getUnionId());
inputs.put("consultantId", requestDto.getConsultantId());
inputs.put("communicateDate", requestDto.getCommunicateDate());
inputs.put("analysisScene", requestDto.getAnalysisScene());
inputs.put("aiAnalysisRequestId", requestDto.getAiAnalysisRequestId());
inputs.put("version", requestDto.getVersion());
inputs.put("chat", requestDto.getChat());
// 创建请求对象
DifyWorkflowService.DifyWorkflowRequest request =
new DifyWorkflowService.DifyWorkflowRequest(inputs, requestDto.getConsultantId());
// 调用DCC工作流Service层会自动保存数据到数据库
DifyWorkflowService.DifyWorkflowResponse response =
difyWorkflowService.callDCCScenarioWorkflow(request);
// 构建返回结果
DifyWorkflowResponseDto result = DifyWorkflowResponseDto.success(
response.getWorkflowRunId(),
response.getTaskId(),
response.getData(),
response.getMetadata()
);
return ResponseEntity.ok(result);
} catch (Exception e) {
log.error("调用DCC对话分析工作流失败", e);
DifyWorkflowResponseDto errorResult = DifyWorkflowResponseDto.failure(
"DCC工作流调用失败: " + e.getMessage(),
e.getClass().getSimpleName()
);
return ResponseEntity.status(500).body(errorResult);
}
}
/**
* 客户画像分析工作流
*/
@PostMapping("/workflow/customer-profile-analysis")
@Operation(summary = "客户画像分析工作流", description = "调用Dify客户画像分析工作流")
public ResponseEntity<DifyWorkflowResponseDto> customerProfileAnalysisWorkflow(
@Valid @RequestBody CustomerProfileAnalysisRequestDto requestDto) {
try {
log.info("开始调用客户画像分析工作流,参数: " + requestDto.toString());
// 构建工作流输入参数
Map<String, Object> inputs = new HashMap<>();
inputs.put("chat", requestDto.getChat());
inputs.put("communicateDate", requestDto.getCommunicateDate());
inputs.put("analysisScene", requestDto.getAnalysisScene());
inputs.put("aiAnalysisRequestld", requestDto.getAiAnalysisRequestId()); // 注意Dify工作流期望的参数名是aiAnalysisRequestld
inputs.put("businessId", requestDto.getBusinessId());
inputs.put("customerFlowId", requestDto.getCustomerFlowId());
inputs.put("businessType", requestDto.getBusinessType());
// 创建请求对象
DifyWorkflowService.DifyWorkflowRequest request =
new DifyWorkflowService.DifyWorkflowRequest(inputs, requestDto.getBusinessId());
// 调用客户画像分析工作流Service层会自动保存数据到数据库
DifyWorkflowService.DifyWorkflowResponse response =
difyWorkflowService.callCustomerProfileAnalysisWorkflow(request);
// 构建返回结果
DifyWorkflowResponseDto result = DifyWorkflowResponseDto.success(
response.getWorkflowRunId(),
response.getTaskId(),
response.getData(),
response.getMetadata()
);
return ResponseEntity.ok(result);
} catch (Exception e) {
log.error("调用客户画像分析工作流失败", e);
DifyWorkflowResponseDto errorResult = DifyWorkflowResponseDto.failure(
"客户画像分析工作流调用失败: " + e.getMessage(),
e.getClass().getSimpleName()
);
return ResponseEntity.status(500).body(errorResult);
}
}
}