集成ai部分

This commit is contained in:
sh
2026-01-05 15:39:01 +08:00
parent deb775ff5c
commit a31fc4cc72
23 changed files with 1885 additions and 1 deletions

View File

@@ -0,0 +1,191 @@
package com.ruoyi.cms.service.impl;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cms.domain.ai.AiChatDetail;
import com.ruoyi.cms.domain.ai.AiChatHistory;
import com.ruoyi.cms.mapper.AiChatDetailMapper;
import com.ruoyi.cms.mapper.AiChatHistoryMapper;
import com.ruoyi.cms.service.AiChatHistoryService;
import com.ruoyi.common.utils.SiteSecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
public class AiChatHistoryServiceImpl extends ServiceImpl<AiChatHistoryMapper, AiChatHistory> implements AiChatHistoryService {
@Autowired
private AiChatHistoryMapper aiChatHistoryMapper;
@Autowired
private AiChatDetailMapper aiChatDetailMapper;
@Override
public JSONObject getList(AiChatHistory aiChatHistory) {
JSONObject object = new JSONObject();
JSONArray jsonArray = new JSONArray();
if(Objects.isNull(aiChatHistory.getUserId())){
try {
aiChatHistory.setUserId(SiteSecurityUtils.getUserId());
}catch (Exception e){
object.put("list", jsonArray);
return object;
}
}
List<AiChatHistory> list = aiChatHistoryMapper.getList(aiChatHistory);
if(list!=null&&!list.isEmpty()){
JSONObject jsonObject1 = new JSONObject();
for(AiChatHistory history:list){
jsonObject1 = JSONObject.parseObject(JSONObject.toJSONString(history));
jsonArray.add(jsonObject1);
}
}
object.put("list", jsonArray);
return object;
}
@Override
public void saveChatHistory(AiChatHistory aiChatHistory) {
try {
AiChatHistory history = new AiChatHistory();
history.setChatId(aiChatHistory.getChatId());
List<AiChatHistory> list = aiChatHistoryMapper.getList(history);
if(list!=null&&!list.isEmpty()){
history = list.get(0);
history.setUpdateTime(new Date());
aiChatHistoryMapper.updateById(history);
}else{
history.setTitle(aiChatHistory.getTitle());
history.setUserId(aiChatHistory.getUserId());
history.setAppId(aiChatHistory.getAppId());
history.setDelFlag("0");
history.setUpdateTime(new Date());
aiChatHistoryMapper.insert(history);
}
AiChatDetail chatDetail = new AiChatDetail();
chatDetail.setChatId(aiChatHistory.getChatId());
chatDetail.setObj("Human");
chatDetail.setTime(new Date());
chatDetail.setDataId(IdUtils.fastSimpleUUID());
chatDetail.setContent(aiChatHistory.getTitle());
aiChatDetailMapper.insert(chatDetail);
List<String> answerList = aiChatHistory.getAnswerStringList();
if(answerList!=null&&!answerList.isEmpty()){
chatDetail = new AiChatDetail();
chatDetail.setChatId(aiChatHistory.getChatId());
chatDetail.setObj("AI");
chatDetail.setTime(new Date());
chatDetail.setDataId(aiChatHistory.getDataId());
chatDetail.setContent(String.join("",answerList));
chatDetail.setDurationSeconds(aiChatHistory.getDurationSeconds());
aiChatDetailMapper.insert(chatDetail);
}
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public JSONObject getDetailList(String chatId) {
JSONObject dataList = new JSONObject();
JSONArray array = new JSONArray();
AiChatDetail detail = new AiChatDetail();
detail.setChatId(chatId);
List<AiChatDetail> list = aiChatDetailMapper.getList(detail);
if(list!=null&&!list.isEmpty()){
JSONObject data = new JSONObject();
JSONArray value = new JSONArray();
JSONObject valueObject = new JSONObject();
String dataId = "";
List<String> contentList = new ArrayList<>();
List<AiChatDetail> details = new ArrayList<>();
for(AiChatDetail detail1:list){
details = list.stream().filter(fi->fi.getDataId().equals(detail1.getDataId())).collect(Collectors.toList());
if(details.size() > 1){
contentList = new ArrayList<>();
if(StringUtils.isNotEmpty(dataId)){
continue;
}
data = new JSONObject();
data.put("dataId", detail1.getDataId());
data.put("obj", detail1.getObj());
data.put("hideInUI",false);
data.put("customFeedbacks",new JSONArray());
data.put("time",detail1.getTime());
data.put("durationSeconds",detail1.getDurationSeconds());
value = new JSONArray();
dataId = detail1.getDataId();
for(AiChatDetail detail2:details){
if(detail2.getContent().contains("```")){
contentList.add(detail2.getContent());
}else{
if(contentList!=null&&!contentList.isEmpty()){
valueObject = new JSONObject();
valueObject.put("type","text");
valueObject.put("text",new JSONObject().fluentPut("content", String.join("",contentList)));
value.add(valueObject);
}
valueObject = new JSONObject();
valueObject.put("type","text");
valueObject.put("text",new JSONObject().fluentPut("content", detail2.getContent()));
value.add(valueObject);
}
}
data.put("value",value);
array.add(data);
}else{
dataId = "";
data = new JSONObject();
data.put("dataId", detail1.getDataId());
data.put("obj", detail1.getObj());
data.put("hideInUI",false);
data.put("customFeedbacks",new JSONArray());
data.put("time",detail1.getTime());
if("AI".equals(detail1.getObj())){
data.put("durationSeconds",detail1.getDurationSeconds());
}
valueObject = new JSONObject();
valueObject.put("type","text");
valueObject.put("text",new JSONObject().fluentPut("content", detail1.getContent()));
value = new JSONArray();
value.add(valueObject);
data.put("value",value);
array.add(data);
}
}
}
dataList.put("list",array);
return dataList;
}
@Override
public JSONArray getChatHistoryData(String chatId) {
JSONObject content = null;
JSONArray data = new JSONArray();
AiChatDetail detail = new AiChatDetail();
detail.setChatId(chatId);
List<AiChatDetail> list = aiChatDetailMapper.getList(detail);
if(list!=null&&!list.isEmpty()){
for(AiChatDetail d:list){
content = new JSONObject();
if("AI".equals(d.getObj())){
content.put("role","assistant");
}else{
content.put("role","user");
}
content.put("content",d.getContent());
data.add(content);
}
}
return data;
}
}