zrd 3 месяцев назад
Родитель
Сommit
d3536ed0eb

+ 0 - 1
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/ai/AiApiImpl.java

@@ -58,7 +58,6 @@ public class AiApiImpl implements AiApi {
                                                            String conversationId) {
         apiKey = DictFrameworkUtils.parseDictDataValue("ai_key", "多轮对话");
         
-        inputs.put("type", "活林木");
     /*    Flux<StreamResponse> rs = workflowRunService.getDifyMessageStreaming(inputs, user, apiKey, query,
                 conversationId);*/
         

+ 1 - 0
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/kefu/vo/message/KeFuMessageRespVO.java

@@ -19,6 +19,7 @@ public class KeFuMessageRespVO {
     private Long senderId;
     @Schema(description = "发送人头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://yudao.com/images/avatar.jpg")
     private String senderAvatar;
+    private String messageId;
 
     @Schema(description = "发送人类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private Integer senderType;

+ 3 - 1
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/kefu/AppKeFuMessageController.java

@@ -68,9 +68,11 @@ public class AppKeFuMessageController {
         return success(kefuMessageService.sendMessage(sendReqVO));
     }
     
+
     @PostMapping(value = "/sendStream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
     @Operation(summary = "发送消息(流式)", description = "流式返回,响应较快")
-    public Flux<String> sendStream(@Valid @RequestBody AppKeFuMessageSendReqVO sendReqVO, HttpServletRequest request) {
+    public Flux<KeFuMessageRespVO> sendStream(@Valid @RequestBody AppKeFuMessageSendReqVO sendReqVO,
+                                              HttpServletRequest request) {
         sendReqVO.setSenderId(getLoginUserId()).setSenderType(UserTypeEnum.MEMBER.getValue()); // 设置用户编号和类型
         String token = SecurityFrameworkUtils.obtainAuthorization(request,
                 "Authorization", "token");

+ 1 - 1
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/kefu/KeFuMessageMapper.java

@@ -31,7 +31,7 @@ public interface KeFuMessageMapper extends BaseMapperX<KeFuMessageDO> {
         return selectList(new QueryWrapperX<KeFuMessageDO>()
                 .eqIfPresent("conversation_id", reqVO.getConversationId())
                 .ltIfPresent("create_time", reqVO.getCreateTime())
-                .orderByDesc("create_time")
+                .orderByDesc("update_time")
                 .limitN(reqVO.getLimit()));
     }
     

+ 2 - 1
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuMessageService.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.promotion.service.kefu;
 
 import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageListReqVO;
+import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageRespVO;
 import cn.iocoder.yudao.module.promotion.controller.admin.kefu.vo.message.KeFuMessageSendReqVO;
 import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessagePageReqVO;
 import cn.iocoder.yudao.module.promotion.controller.app.kefu.vo.message.AppKeFuMessageSendReqVO;
@@ -35,7 +36,7 @@ public interface KeFuMessageService {
     
     Long sendMessage(AppKeFuMessageSendReqVO sendReqVO);
     
-    Flux<String> sendStream(AppKeFuMessageSendReqVO sendReqVO);
+    Flux<KeFuMessageRespVO> sendStream(AppKeFuMessageSendReqVO sendReqVO);
 
     /**
      * 【管理员】更新消息已读状态

+ 16 - 7
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/kefu/KeFuMessageServiceImpl.java

@@ -40,7 +40,8 @@ import java.util.Map;
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.KEFU_CONVERSATION_NOT_EXISTS;
-import static cn.iocoder.yudao.module.promotion.enums.WebSocketMessageTypeConstants.*;
+import static cn.iocoder.yudao.module.promotion.enums.WebSocketMessageTypeConstants.KEFU_MESSAGE_ADMIN_READ;
+import static cn.iocoder.yudao.module.promotion.enums.WebSocketMessageTypeConstants.KEFU_MESSAGE_TYPE;
 
 /**
  * 客服消息 Service 实现类
@@ -125,15 +126,18 @@ public class KeFuMessageServiceImpl implements KeFuMessageService {
         MemberUserRespDTO user = memberUserApi.getUser(kefuMessage.getSenderId());
         KeFuMessageRespVO message =
                 BeanUtils.toBean(kefuMessage, KeFuMessageRespVO.class).setSenderAvatar(user.getAvatar());
-        getSelf().sendAsyncMessageToMember(sendReqVO.getRelUserId(), KEFU_MESSAGE_IM, message);
-        
+      /*  if (sendReqVO.getSenderType() != 22) {
+            getSelf().sendAsyncMessageToMember(sendReqVO.getRelUserId(), KEFU_MESSAGE_IM, message);
+            
+            
+        }*/
         
         return kefuMessage.getId();
     }
     
     @Override
     //@Async
-    public Flux<String> sendStream(AppKeFuMessageSendReqVO sendReqVO) {
+    public Flux<KeFuMessageRespVO> sendStream(AppKeFuMessageSendReqVO sendReqVO) {
         // 1.1 设置会话编号
         String apiKey = DictFrameworkUtils.parseDictDataValue("ai_key", "多轮对话");
         Map<String, Object> inputs = new HashMap<>();
@@ -146,6 +150,7 @@ public class KeFuMessageServiceImpl implements KeFuMessageService {
         } else {
             inputs.put("type", "其他");
         }
+        Long relUserId = sendReqVO.getRelUserId();
         inputs.put("token", sendReqVO.getToken());
         String conversationId;
         KeFuMessageDO kefuMessage = BeanUtils.toBean(sendReqVO, KeFuMessageDO.class);
@@ -161,11 +166,13 @@ public class KeFuMessageServiceImpl implements KeFuMessageService {
         
         AppKeFuMessageSendReqVO aiSendReqVO = sendReqVO;
         aiSendReqVO.setRelUserId(SecurityFrameworkUtils.getLoginUserId());
-        aiSendReqVO.setSenderId(aiSendReqVO.getRelUserId());
-        aiSendReqVO.setContentType(11);
+        aiSendReqVO.setSenderId(relUserId);
+        aiSendReqVO.setContentType(22);
+        aiSendReqVO.setSenderType(22);
         Long aiId = sendMessage(aiSendReqVO);
         StringBuffer contentBuffer = new StringBuffer();
         StringBuffer contentBufferCon = new StringBuffer();
+        KeFuMessageRespVO message = BeanUtils.toBean(aiSendReqVO, KeFuMessageRespVO.class);
         return aiApi.getDifyMessageStreaming(inputs,
                         SecurityFrameworkUtils.getLoginUserId().toString(),
                         apiKey, sendReqVO.getContent(), conversationId)
@@ -176,7 +183,9 @@ public class KeFuMessageServiceImpl implements KeFuMessageService {
                         log.info("进入workflow_finished阶段:" + answer);
                         if (StrUtil.isNotBlank(answer)) {
                             contentBuffer.append(answer);
-                            return Flux.just(answer);
+                            message.setContent(answer);
+                            message.setMessageId(response.getMessage_id());
+                            return Flux.just(message);
                         }
                     }
                     if (response.getEvent().equals("message_end")) {

+ 2 - 2
yudao-server/src/main/resources/application-local.yaml

@@ -1,7 +1,7 @@
 server:
   port: 9095
-  # ssl:
-  #   protocol: TLS
+  #  ssl:
+  #  protocol: TLS
   #  key-store: classpath:STAR.zjkdywd.com.jks
   #  key-store-password: 123456