refactor(dify): 重构实体类和接口名称

- 将 AppsResponse 重命名为 AppEntity- 将 AppsResponseMapper 重命名为 AppEntityMapper
- 将 AppsResponseRepository 重命名为 AppEntityRepository
- 更新了相关服务和控制器中的类和方法名称
- 调整了部分代码结构以适应新的命名
This commit is contained in:
zhuangtianxiang 2025-04-25 19:34:56 +08:00
parent b482197819
commit b4d5584f9b
11 changed files with 93 additions and 49 deletions

View File

@ -1,14 +1,12 @@
package com.zsc.edu.dify.modules.dify.controller;
import com.zsc.edu.dify.modules.dify.service.DifyServerService;
import com.zsc.edu.dify.modules.dify.repo.AppEntityRepository;
import io.github.guoshiqiufeng.dify.chat.DifyChat;
import io.github.guoshiqiufeng.dify.chat.dto.request.ChatMessageSendRequest;
import io.github.guoshiqiufeng.dify.chat.dto.request.MessageConversationsRequest;
import io.github.guoshiqiufeng.dify.chat.dto.request.MessagesRequest;
import io.github.guoshiqiufeng.dify.chat.dto.response.ChatMessageSendCompletionResponse;
import io.github.guoshiqiufeng.dify.chat.dto.response.MessageConversationsResponse;
import io.github.guoshiqiufeng.dify.core.pojo.DifyPageResult;
import io.github.guoshiqiufeng.dify.core.pojo.response.MessagesResponseVO;
import jakarta.annotation.Resource;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
@ -25,6 +23,8 @@ public class V1ChatController {
@Resource
private DifyChat difyChat;
@Resource
private AppEntityRepository appEntityRepository;
/**
* 发送消息流式
@ -33,8 +33,9 @@ public class V1ChatController {
* 用户 id可以改为从上下文token获取
* apikey 建议在数据库进行存储前端调用时传智能体 id从数据库查询
*/
@PostMapping(value = "/completions", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatMessageSendCompletionResponse> sendChatMessageStream(@RequestBody ChatMessageSendRequest sendRequest) {
@PostMapping(value = "/completions/{appId}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ChatMessageSendCompletionResponse> sendChatMessageStream(@RequestBody ChatMessageSendRequest sendRequest,@PathVariable String appId) {
sendRequest.setApiKey(appEntityRepository.selectApiKey(appId));
return difyChat.sendChatMessageStream(sendRequest);
}
@ -44,7 +45,7 @@ public class V1ChatController {
* @param request 请求参数
* @return 会话列表
*/
@GetMapping("/conversations")
@PostMapping("/conversations")
public DifyPageResult<MessageConversationsResponse> conversations(@RequestBody MessageConversationsRequest request) {
request.setApiKey("app-mM2UGTE5QVPLCwGvwifnV0g7");
return difyChat.conversations(request);
@ -56,23 +57,11 @@ public class V1ChatController {
* @param taskId 任务id
* @param userId 用户id
*/
@GetMapping("/stopMessagesStream")
@PatchMapping("/stopMessagesStream")
public void stopMessagesStream( String taskId, String userId) {
difyChat.stopMessagesStream("app-mM2UGTE5QVPLCwGvwifnV0g7", taskId, userId);
}
/**
* 获取消息列表
*
* @param request 请求参数
* @return 消息列表
*/
@GetMapping("/messages")
public DifyPageResult<MessagesResponseVO> messages(@RequestBody MessagesRequest request) {
request.setApiKey("app-mM2UGTE5QVPLCwGvwifnV0g7");
return difyChat.messages(request);
}
/**
* 删除会话
*

View File

@ -19,8 +19,9 @@ public class V1DatasetController {
* @param request
* @return
*/
@GetMapping("/page")
@PostMapping("/page")
public DifyPageResult<DatasetResponse> page(@RequestBody DatasetPageRequest request){
request.setApiKey("dataset-kN5WTJ8jR877YfN1A34JceVg");
return difyDataset.page(request);
}
@ -30,8 +31,8 @@ public class V1DatasetController {
* @param request
* @return
*/
@GetMapping("/createDocumentByFile")
public DocumentCreateResponse createDocumentByFile(@RequestBody DocumentCreateByFileRequest request){
@PostMapping("/createDocumentByFile")
public DocumentCreateResponse createDocumentByFile(DocumentCreateByFileRequest request){
return difyDataset.createDocumentByFile(request);
}
@ -43,6 +44,7 @@ public class V1DatasetController {
*/
@GetMapping("/pageDocument")
public DifyPageResult<DocumentInfo> pageDocument(@RequestBody DatasetPageDocumentRequest request){
request.setApiKey("dataset-kN5WTJ8jR877YfN1A34JceVg");
return difyDataset.pageDocument(request);
}
@ -55,7 +57,7 @@ public class V1DatasetController {
*/
@PostMapping("/uploadFileInfo")
public UploadFileInfoResponse uploadFileInfo(String datasetId, String documentId){
return difyDataset.uploadFileInfo(datasetId, documentId,"app-mM2UGTE5QVPLCwGvwifnV0g7");
return difyDataset.uploadFileInfo(datasetId, documentId,"dataset-kN5WTJ8jR877YfN1A34JceVg");
}
/**

View File

@ -1,5 +1,7 @@
package com.zsc.edu.dify.modules.dify.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zsc.edu.dify.modules.dify.entity.AppEntity;
import com.zsc.edu.dify.modules.dify.service.DifyServerService;
import io.github.guoshiqiufeng.dify.server.DifyServer;
import io.github.guoshiqiufeng.dify.server.dto.response.ApiKeyResponseVO;
@ -78,4 +80,13 @@ public class V1ServerController {
public List<DatasetApiKeyResponseVO> initDatasetApiKey() {
return difyServer.initDatasetApiKey();
}
/**
*
*/
@PostMapping("/app/{id}")
public boolean enabledApp(@PathVariable("id") String id) {
return true;
}
}

View File

@ -24,6 +24,7 @@ public class V1WorkflowController {
*/
@PostMapping("/run")
public WorkflowRunResponse runWorkflow(@RequestBody WorkflowRunRequest request) {
request.setApiKey("app-ZpkQM6yy767oUTfNSBYq65nB");
return difyWorkflow.runWorkflow(request);
}
@ -35,6 +36,7 @@ public class V1WorkflowController {
*/
@PostMapping("/run/stream")
public Flux<WorkflowRunStreamResponse> runWorkflowStream(@RequestBody WorkflowRunRequest request) {
request.setApiKey("app-ZpkQM6yy767oUTfNSBYq65nB");
return difyWorkflow.runWorkflowStream(request);
}
@ -58,7 +60,7 @@ public class V1WorkflowController {
*/
@GetMapping("/info")
public WorkflowInfoResponse info(String workflowRunId) {
return difyWorkflow.info(workflowRunId, "app-mM2UGTE5QVPLCwGvwifnV0g7");
return difyWorkflow.info(workflowRunId, "app-ZpkQM6yy767oUTfNSBYq65nB");
}
/**
@ -67,8 +69,9 @@ public class V1WorkflowController {
* @param request
* @return
*/
@GetMapping("/logs")
@PostMapping("/logs")
public DifyPageResult<WorkflowLogs> logs(@RequestBody WorkflowLogsRequest request) {
request.setApiKey("app-ZpkQM6yy767oUTfNSBYq65nB");
return difyWorkflow.logs(request);
}
}

View File

@ -3,6 +3,7 @@ package com.zsc.edu.dify.modules.dify.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zsc.edu.dify.framework.json.JsonbTypeHandler;
import com.zsc.edu.dify.modules.system.vo.MenuVo;
import io.github.guoshiqiufeng.dify.server.dto.response.AppsResponseVO;
import lombok.*;
@ -11,11 +12,15 @@ import java.util.Map;
/**
* @author zhuang
*
*
*/
@EqualsAndHashCode(callSuper = true)
@Getter
@Setter
@TableName("apps_response")
public class AppsResponse extends AppsResponseVO {
@Data
@TableName("apps_entity")
public class AppEntity extends AppsResponseVO {
@TableField(typeHandler = JsonbTypeHandler.class)
private Map<String, Object> modelConfig;
@ -26,4 +31,19 @@ public class AppsResponse extends AppsResponseVO {
@TableField(typeHandler = JsonbTypeHandler.class)
private List<String> tags;
@TableField(typeHandler = JsonbTypeHandler.class)
private Map<String, Object> site;
@TableField(typeHandler = JsonbTypeHandler.class)
private List<String> deletedTools;
private boolean enabled;
private String apiKey;
/**
* 子菜单
*/
@TableField(exist = false)
private List<AppEntity> children = null;
}

View File

@ -1,11 +1,11 @@
package com.zsc.edu.dify.modules.dify.mapper;
import com.zsc.edu.dify.common.mapstruct.BaseMapper;
import com.zsc.edu.dify.modules.dify.entity.AppsResponse;
import com.zsc.edu.dify.modules.dify.entity.AppEntity;
import io.github.guoshiqiufeng.dify.server.dto.response.AppsResponseVO;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface AppsResponseMapper extends BaseMapper<AppsResponseVO, AppsResponse> {
public interface AppEntityMapper extends BaseMapper<AppsResponseVO, AppEntity> {
}

View File

@ -0,0 +1,11 @@
package com.zsc.edu.dify.modules.dify.repo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zsc.edu.dify.modules.dify.entity.AppEntity;
import org.apache.ibatis.annotations.Select;
public interface AppEntityRepository extends BaseMapper<AppEntity> {
@Select("select api_key from apps_entity where id = #{appId}")
String selectApiKey(String appId);
}

View File

@ -1,7 +0,0 @@
package com.zsc.edu.dify.modules.dify.repo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zsc.edu.dify.modules.dify.entity.AppsResponse;
public interface AppsResponseRepository extends BaseMapper<AppsResponse> {
}

View File

@ -1,11 +1,12 @@
package com.zsc.edu.dify.modules.dify.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zsc.edu.dify.modules.dify.entity.AppsResponse;
import com.zsc.edu.dify.modules.dify.entity.AppEntity;
import io.github.guoshiqiufeng.dify.server.dto.response.AppsResponseVO;
import java.util.List;
public interface DifyServerService extends IService<AppsResponse> {
public interface DifyServerService extends IService<AppEntity> {
List<AppsResponseVO> getApps(String mode, String name);
}

View File

@ -3,26 +3,29 @@ package com.zsc.edu.dify.modules.dify.service.Impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zsc.edu.dify.modules.dify.entity.AppsResponse;
import com.zsc.edu.dify.modules.dify.mapper.AppsResponseMapper;
import com.zsc.edu.dify.modules.dify.repo.AppsResponseRepository;
import com.zsc.edu.dify.common.util.TreeUtil;
import com.zsc.edu.dify.exception.ConstraintException;
import com.zsc.edu.dify.modules.dify.entity.AppEntity;
import com.zsc.edu.dify.modules.dify.mapper.AppEntityMapper;
import com.zsc.edu.dify.modules.dify.repo.AppEntityRepository;
import com.zsc.edu.dify.modules.dify.service.DifyServerService;
import io.github.guoshiqiufeng.dify.server.DifyServer;
import io.github.guoshiqiufeng.dify.server.dto.response.ApiKeyResponseVO;
import io.github.guoshiqiufeng.dify.server.dto.response.AppsResponseVO;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.*;
/**
* @author zhuang
*/
@AllArgsConstructor
@Service
public class DifyServerServiceImpl extends ServiceImpl<AppsResponseRepository, AppsResponse> implements DifyServerService {
public class DifyServerServiceImpl extends ServiceImpl<AppEntityRepository, AppEntity> implements DifyServerService {
@Resource
private AppsResponseMapper appsResponseMapper;
private AppEntityMapper appEntityMapper;
@Resource
private DifyServer difyServer;
@ -33,14 +36,25 @@ public class DifyServerServiceImpl extends ServiceImpl<AppsResponseRepository, A
public List<AppsResponseVO> addApps(List<AppsResponseVO> appsResponseList) {
for(AppsResponseVO appsResponse : appsResponseList){
boolean isHave = baseMapper.exists(new QueryWrapper<AppsResponse>().eq("id", appsResponse.getId()));
boolean isHave = baseMapper.exists(new QueryWrapper<AppEntity>().eq("id", appsResponse.getId()));
if(!isHave){
baseMapper.insert(appsResponseMapper.toEntity(appsResponse));
AppEntity appEntity = appEntityMapper.toEntity(appsResponse);
baseMapper.insert(appEntity);
List<ApiKeyResponseVO> apiKeyList =difyServer.getAppApiKey(appsResponse.getId());
if (apiKeyList != null) {
difyServer.initAppApiKey(appsResponse.getId());
Optional<ApiKeyResponseVO> apiKeyResponseVO = apiKeyList.stream()
.filter(apiKey -> apiKey.getToken() != null)
.findFirst();
apiKeyResponseVO.ifPresent(apiKey -> appEntity.setApiKey(apiKey.getToken()));
}
baseMapper.updateById(appEntity);
}else{
baseMapper.updateById(appsResponseMapper.toEntity(appsResponse));
baseMapper.updateById(appEntityMapper.toEntity(appsResponse));
}
}
return appsResponseList;
}
}

View File

@ -63,5 +63,5 @@ dify:
server:
email: 2913129173@qq.com # 请替换为实际的 Dify 服务邮箱,若不需要调用 server相关接口可不填
password: tian14384, # 请替换为实际的 Dify 服务密码,若不需要调用 server相关接口可不填
# dataset:
# api-key: dataset-kN5WTJ8jR877YfN1A34JceVg # 请替换为实际的知识库api-key, 若不需要调用知识库可不填
dataset:
api-key: dataset-kN5WTJ8jR877YfN1A34JceVg # 请替换为实际的知识库api-key, 若不需要调用知识库可不填