Commit 2788a126 authored by luojun's avatar luojun

对话添加返回标识

parent 0168ad19
package admin.listener;
import admin.model.deepseek.resp.stream.ChatStreamResponse;
import admin.model.MaxKbChatReq;
import admin.model.maxdb.resp.MaxdbStreamResponse;
import admin.modules.chatgpt.domain.ChatgptRoleRecords;
import admin.modules.chatgpt.service.ChatgptRoleRecordsService;
import admin.service.TextToSpeechService;
import admin.util.DateUtil;
import admin.util.ScreenEnum;
import admin.util.WebConnectUtil;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.yulichang.toolkit.SpringContentUtils;
import com.google.gson.Gson;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okhttp3.sse.EventSource;
import okhttp3.sse.EventSourceListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.websocket.Session;
import java.io.IOException;
import java.net.SocketException;
......@@ -43,15 +33,11 @@ import java.util.Objects;
public class DeepSeekAiListener extends EventSourceListener {
StringBuffer stringBuffer = new StringBuffer();
private Session session;
private String sessionId;
private String userName;
private MaxKbChatReq maxKbChatReq;
private ChatgptRoleRecordsService chatgptRoleRecordsService;
public DeepSeekAiListener(Session session,String sessionId,String userName,ChatgptRoleRecordsService chatgptRoleRecordsService) {
this.session = session;
this.userName = userName;
this.sessionId = sessionId;
public DeepSeekAiListener(MaxKbChatReq maxKbChatReq,ChatgptRoleRecordsService chatgptRoleRecordsService) {
this.maxKbChatReq =maxKbChatReq;
this.chatgptRoleRecordsService = chatgptRoleRecordsService;
}
......@@ -74,15 +60,17 @@ public class DeepSeekAiListener extends EventSourceListener {
Map<String,Object> map = new HashMap<>();
map.put("action","done");
map.put("type","text");
map.put("showType",maxKbChatReq.getShowType());
map.put("content",completionResponse.getContent());
String msg = JSON.toJSONString(map);
this.session.getBasicRemote().sendText(msg);
maxKbChatReq.getSession().getBasicRemote().sendText(msg);
//存储聊天记录
ChatgptRoleRecords chatgptRoleRecords = new ChatgptRoleRecords();
chatgptRoleRecords.setMessage(this.stringBuffer.toString());
chatgptRoleRecords.setReceiverId(ScreenEnum.getByUserName(userName));
chatgptRoleRecords.setSessionId(Integer.valueOf(sessionId));
chatgptRoleRecords.setReceiverId(ScreenEnum.getByUserName(maxKbChatReq.getUserName()));
chatgptRoleRecords.setSessionId(Integer.valueOf(maxKbChatReq.getSessionId()));
chatgptRoleRecords.setSenderId(10001);
chatgptRoleRecords.setIsAsk(0);
chatgptRoleRecords.setCreateTime(DateUtil.getNowTimestamp());
chatgptRoleRecordsService.save(chatgptRoleRecords);
return;
......@@ -95,8 +83,8 @@ public class DeepSeekAiListener extends EventSourceListener {
map.put("type","text");
map.put("content",completionResponse.getContent());
String msg = JSON.toJSONString(map);
this.session.getBasicRemote().sendText(msg);
List<Session> webMap = WebConnectUtil.getWebMap(userName);
maxKbChatReq.getSession().getBasicRemote().sendText(msg);
List<Session> webMap = WebConnectUtil.getWebMap(maxKbChatReq.getUserName());
if (!webMap.isEmpty()){
webMap.forEach(i->{
try {
......
package admin.model;
import lombok.Data;
import javax.websocket.Session;
/**
* @author lj
* @date 2025/3/5 15:30
*/
@Data
public class MaxKbChatReq {
/**
* 提问内容
*/
private String message;
/**
* sessionId用于h5获取匹配的大屏session
*/
private String sessionId;
/**
* maxkb会话id
*/
private String chatId;
/**
* 当前session
*/
private Session session;
/**
* 大屏名称
*/
private String userName;
/**
* 前端展示类型 1-中科慧居简介
*/
private String showType;
}
......@@ -34,4 +34,8 @@ public class SendSseModel {
*/
private boolean isH5;
/**
* 前端根据这类型进行判断:1-中科慧居简介 2-饼状图 3-柱状图 4-趋势图
*/
private String showType;
}
......@@ -27,4 +27,9 @@ public class WebSocketModel {
* 大屏账号名称
*/
private String name;
/**
* 前端根据这类型进行判断:1-中科慧居简介 2-饼状图 3-柱状图 4-趋势图
*/
private String showType;
}
......@@ -43,6 +43,9 @@ public class ChatgptRoleRecords implements Serializable {
@ApiModelProperty(value = "聊天消息的内容")
private String message;
@ApiModelProperty(value = "问答 1-问 0-答")
private Integer isAsk;
@ApiModelProperty(value = "创建时间")
@TableField(fill= FieldFill.INSERT)
private Timestamp createTime;
......
......@@ -43,4 +43,8 @@ public class ChatgptRoleRecordsDto implements Serializable {
/** 创建时间 */
private Timestamp createTime;
/**
* 问答 1-问 0-答
*/
private Integer isAsk;
}
package admin.rest;
import admin.model.MaxKbChatReq;
import admin.model.SendSseModel;
import admin.resp.ApiResponse;
import admin.service.DeepSeekOpenApiService;
......@@ -37,9 +38,8 @@ public class OpenApiController {
@GetMapping("testcompletions")
public void testcompletions(@RequestParam String chatId,
@RequestParam String message){
maxkbOpenApiService.chatCompletions(message,"",chatId,null,null);
public void testcompletions(@RequestParam MaxKbChatReq maxKbChatReqe){
maxkbOpenApiService.chatCompletions(maxKbChatReqe);
}
......
......@@ -143,6 +143,7 @@ public class VoiceWebSocketServer {
chatgptRoleRecords.setSessionId(Integer.valueOf(webSocketModel.getSessionId()));
chatgptRoleRecords.setSenderId(ScreenEnum.getByUserName(webSocketModel.getName()));
chatgptRoleRecords.setCreateTime(DateUtil.getNowTimestamp());
chatgptRoleRecords.setIsAsk(1);
chatgptRoleRecordsService.save(chatgptRoleRecords);
//如果是H5则发送给大屏消息
......@@ -153,6 +154,7 @@ public class VoiceWebSocketServer {
chatgptRoleRecords.setReceiverId(10001);
chatgptRoleRecords.setSessionId(Integer.valueOf(webSocketModel.getSessionId()));
chatgptRoleRecords.setSenderId(ScreenEnum.getByUserName(webSocketModel.getName()));
chatgptRoleRecords.setIsAsk(1);
chatgptRoleRecords.setCreateTime(DateUtil.getNowTimestamp());
chatgptRoleRecordsService.save(chatgptRoleRecords);
......@@ -164,7 +166,8 @@ public class VoiceWebSocketServer {
if ("sendText".equals(webSocketModel.getAction())) {
String msg = webSocketModel.getData();
if (msg != null && !msg.isEmpty()) {
SendSseModel sendSseModel = new SendSseModel(msg, webSocketModel.getSessionId(), session, webSocketModel.getName(), memberId.split("__")[0].equals(WebSocketUtil.web));
String showType = getShowType(msg);
SendSseModel sendSseModel = new SendSseModel(msg, webSocketModel.getSessionId(), session, webSocketModel.getName(), memberId.split("__")[0].equals(WebSocketUtil.web),showType);
maxkbOpenApiService.talk(sendSseModel);
}
// 心跳
......@@ -248,6 +251,19 @@ public class VoiceWebSocketServer {
sendMessage(session, null);
}
public String getShowType(String msg){
if (msg.contains("中科慧居") && msg.contains("简介")){
return ResponseEnum.ZK_PROFILE.getDesc();
}else if (msg.contains( ResponseEnum.PIE_CHART.getDesc())){
return ResponseEnum.PIE_CHART.getDesc();
}else if (msg.contains( ResponseEnum.BAR_CHART.getDesc())){
return ResponseEnum.BAR_CHART.getDesc();
}else if (msg.contains( ResponseEnum.TREND_CHART.getDesc())){
return ResponseEnum.TREND_CHART.getDesc();
}
return null;
}
/**
* 语音转文本
* @param data 语音数据
......
package admin.service;
import admin.model.MaxKbChatReq;
import admin.model.SendSseModel;
import admin.resp.ApiResponse;
......@@ -18,7 +19,7 @@ public interface MaxkbOpenApiService {
*
* @message message 问题
*/
void chatCompletions(String message,String sessionId,String chatId, Session session,String userName);
void chatCompletions(MaxKbChatReq maxKbChatReqe);
void talk( SendSseModel sendSseModel);
}
......@@ -43,7 +43,7 @@ public class DeepSeekOpenApiServiceImpl implements DeepSeekOpenApiService {
.addHeader("Accept", "application/json")
.addHeader("Authorization", "Bearer zkhjdpQ8")
.build();
DeepSeekAiListener deepSeekAiListener = new DeepSeekAiListener(null,null,null,null);
DeepSeekAiListener deepSeekAiListener = new DeepSeekAiListener(null,null);
// OkHttpClient okHttpClient = new OkHttpClient.Builder()
// .connectTimeout(1, TimeUnit.MINUTES)
// .readTimeout(1, TimeUnit.MINUTES)
......
package admin.service.impl;
import admin.model.MaxKbChatReq;
import admin.model.SendSseModel;
import admin.model.WebSocketModel;
import admin.model.maxdb.MaxdbScreenConfig;
......@@ -37,11 +38,11 @@ public class MaxkbOpenApiServiceImpl implements MaxkbOpenApiService {
}
@Override
public void chatCompletions( String message,String sessionId, String chatId, Session session,String userName) {
public void chatCompletions(MaxKbChatReq maxKbChatReq) {
MaxdbReq maxdbReq = new MaxdbReq();
maxdbReq.setMessage(message);
maxdbReq.setMessage(maxKbChatReq.getMessage());
// WebSocketModel webSocketModel = JSONObject.parseObject(message, WebSocketModel.class);
HttpUtil.postCallBackStream(String.format(maxdbScreenConfig.getTalkUrl(),chatId), maxdbReq, maxdbScreenConfig.getApiKey(),session,sessionId,userName,chatgptRoleRecordsService);
HttpUtil.postCallBackStream(String.format(maxdbScreenConfig.getTalkUrl(),maxKbChatReq.getChatId()), maxdbReq, maxdbScreenConfig.getApiKey(),maxKbChatReq,chatgptRoleRecordsService);
}
@Override
......@@ -56,6 +57,13 @@ public class MaxkbOpenApiServiceImpl implements MaxkbOpenApiService {
// }
ApiResponse<Object> maxkbSessionId = getMaxkbSessionId(maxdbScreenConfig.getApplicationId());
chatCompletions(sendSseModel.getMessage(),sendSseModel.getSessionId(), String.valueOf(maxkbSessionId.getData()),sendSseModel.getSeesion(),sendSseModel.getUserName());
MaxKbChatReq maxKbChatReq= new MaxKbChatReq();
maxKbChatReq.setMessage(sendSseModel.getMessage());
maxKbChatReq.setChatId(String.valueOf(maxkbSessionId.getData()));
maxKbChatReq.setSessionId(sendSseModel.getSessionId());
maxKbChatReq.setUserName(sendSseModel.getUserName());
maxKbChatReq.setShowType(sendSseModel.getShowType());
maxKbChatReq.setSession(sendSseModel.getSeesion());
chatCompletions(maxKbChatReq);
}
}
package admin.util;
import admin.listener.DeepSeekAiListener;
import admin.model.MaxKbChatReq;
import admin.modules.chatgpt.service.ChatgptRoleRecordsService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
......@@ -36,7 +37,7 @@ public class HttpUtil {
}
public static void postCallBackStream(String url, Object data, String apiKey, Session session, String sessionId, String userName, ChatgptRoleRecordsService chatgptRoleRecordsService){
public static void postCallBackStream(String url, Object data, String apiKey, MaxKbChatReq maxKbChatReq, ChatgptRoleRecordsService chatgptRoleRecordsService){
OkHttpClient okHttpClient = new OkHttpClient().newBuilder().build();
// RequestBody body = RequestBody.create(MediaType.parse("application/json"), data);
Request request = null;
......@@ -53,6 +54,6 @@ public class HttpUtil {
throw new RuntimeException(e);
}
EventSource.Factory factory = EventSources.createFactory(okHttpClient);
factory.newEventSource(request,new DeepSeekAiListener(session,sessionId,userName,chatgptRoleRecordsService));
factory.newEventSource(request,new DeepSeekAiListener(maxKbChatReq,chatgptRoleRecordsService));
}
}
package admin.util;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author lj
* @date 2025/3/5 14:23
*/
@Getter
@AllArgsConstructor
public enum ResponseEnum{
ZK_PROFILE(1,"中科慧居简介"),
PIE_CHART(2,"饼状图"),
BAR_CHART(3,"柱状图"),
TREND_CHART(4,"趋势图");
int type;
String desc;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment