Commit 1999bb9c authored by yangyw's avatar yangyw

feature: 修改热门问题关联助手

parent 62247599
...@@ -18,6 +18,9 @@ public class HotQaSaveDto implements Serializable { ...@@ -18,6 +18,9 @@ public class HotQaSaveDto implements Serializable {
@Schema(description = "问题") @Schema(description = "问题")
private String question; private String question;
@Schema(description = "助手ID")
private Integer assistantId;
/** /**
* 答案 * 答案
*/ */
......
...@@ -20,6 +20,9 @@ public class QaAssistantRequestDto implements Serializable { ...@@ -20,6 +20,9 @@ public class QaAssistantRequestDto implements Serializable {
@Schema(description = "助手名称") @Schema(description = "助手名称")
private String name; private String name;
@Schema(description = "助手ID")
private Integer assistantId;
@Schema(description = "状态(0禁用 1启用)") @Schema(description = "状态(0禁用 1启用)")
private Integer status; private Integer status;
} }
...@@ -28,6 +28,12 @@ public class HotQaDto implements Serializable { ...@@ -28,6 +28,12 @@ public class HotQaDto implements Serializable {
@Schema(description = "答案") @Schema(description = "答案")
private String answer; private String answer;
@Schema(description = "助手ID")
private Integer assistantId;
@Schema(description = "助手名称")
private String assistantName;
/** /**
* 排序优先级 * 排序优先级
*/ */
......
...@@ -11,12 +11,14 @@ import cn.breeze.elleai.domain.sparring.service.KbService; ...@@ -11,12 +11,14 @@ import cn.breeze.elleai.domain.sparring.service.KbService;
import cn.breeze.elleai.domain.sparring.service.KbTagService; import cn.breeze.elleai.domain.sparring.service.KbTagService;
import cn.breeze.elleai.util.UserPrincipal; import cn.breeze.elleai.util.UserPrincipal;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
import io.swagger.models.auth.In;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -548,7 +550,9 @@ public class AppChatCompletionService { ...@@ -548,7 +550,9 @@ public class AppChatCompletionService {
public PageResult<HotQaMobileDto> hotQaList(QaAssistantRequestDto request) { public PageResult<HotQaMobileDto> hotQaList(QaAssistantRequestDto request) {
// 获取5个随机自定义热门问题 // 获取5个随机自定义热门问题
final List<HotQaMobileDto> hots = Lists.newArrayList(); final List<HotQaMobileDto> hots = Lists.newArrayList();
List<HotQaResponseModel> hotQaList = chatCompletionService.hotQaList(new HotQaRequestModel()); HotQaRequestModel hotQaRequestModel = new HotQaRequestModel();
hotQaRequestModel.setAssistantId(request.getAssistantId());
List<HotQaResponseModel> hotQaList = chatCompletionService.hotQaList(hotQaRequestModel);
if(CollectionUtil.isNotEmpty(hotQaList)) { if(CollectionUtil.isNotEmpty(hotQaList)) {
Collections.shuffle(hotQaList); Collections.shuffle(hotQaList);
if(hotQaList.size() > 5) { if(hotQaList.size() > 5) {
...@@ -631,6 +635,13 @@ public class AppChatCompletionService { ...@@ -631,6 +635,13 @@ public class AppChatCompletionService {
public HotQaDto hotQaDetail(Integer id) { public HotQaDto hotQaDetail(Integer id) {
HotQaResponseModel model = chatCompletionService.hotQaDetail(id); HotQaResponseModel model = chatCompletionService.hotQaDetail(id);
HotQaDto result = BeanUtil.copyProperties(model, HotQaDto.class); HotQaDto result = BeanUtil.copyProperties(model, HotQaDto.class);
result.setAssistantName("");
if (ObjectUtil.isNotNull(model.getAssistantId())) {
QaAssistantResponseModel assistantResponseModel = chatCompletionService.qaAssistantDetail(model.getAssistantId());
if (ObjectUtil.isNotNull(assistantResponseModel)) {
result.setAssistantName(assistantResponseModel.getName());
}
}
return result; return result;
} }
...@@ -660,11 +671,18 @@ public class AppChatCompletionService { ...@@ -660,11 +671,18 @@ public class AppChatCompletionService {
PageResult<HotQaDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null); PageResult<HotQaDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) { if(CollectionUtil.isNotEmpty(page.getRecords())) {
Set<Integer> assistantIds = page.getRecords().stream().map(HotQaResponseModel::getAssistantId).collect(Collectors.toSet());
final Map<Integer, QaAssistantResponseModel> qaAssistantMap = new HashMap<>();
if (CollUtil.isNotEmpty(assistantIds)) {
List<QaAssistantResponseModel> qaAssistantList = chatCompletionService.qaAssistantListByIds(assistantIds);
Map<Integer, QaAssistantResponseModel> map = qaAssistantList.stream().collect(Collectors.toMap(QaAssistantResponseModel::getId, v -> v));
qaAssistantMap.putAll(map);
}
List<HotQaDto> dtoList = page.getRecords().stream().map(v -> { List<HotQaDto> dtoList = page.getRecords().stream().map(v -> {
HotQaDto dto = BeanUtil.copyProperties(v, HotQaDto.class); HotQaDto dto = BeanUtil.copyProperties(v, HotQaDto.class);
dto.setAssistantName(ObjectUtil.isNotNull(qaAssistantMap.get(v.getAssistantId())) ? qaAssistantMap.get(v.getAssistantId()).getName() : "");
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
pageResult.setItems(dtoList); pageResult.setItems(dtoList);
} }
return pageResult; return pageResult;
......
...@@ -14,4 +14,6 @@ public class HotQaRequestModel implements Serializable { ...@@ -14,4 +14,6 @@ public class HotQaRequestModel implements Serializable {
private String name; private String name;
private Integer status; private Integer status;
private Integer assistantId;
} }
...@@ -20,6 +20,11 @@ public class HotQaSaveModel implements Serializable { ...@@ -20,6 +20,11 @@ public class HotQaSaveModel implements Serializable {
*/ */
private String answer; private String answer;
/**
* 助手ID
*/
private Integer assistantId;
/** /**
* 排序优先级 * 排序优先级
*/ */
......
...@@ -21,6 +21,11 @@ public class HotQaResponseModel implements Serializable { ...@@ -21,6 +21,11 @@ public class HotQaResponseModel implements Serializable {
*/ */
private String answer; private String answer;
/**
* 助手ID
*/
private Integer assistantId;
/** /**
* 排序优先级 * 排序优先级
*/ */
......
...@@ -10,6 +10,7 @@ import cn.breeze.elleai.domain.sparring.model.response.UserChatCompletionRespons ...@@ -10,6 +10,7 @@ import cn.breeze.elleai.domain.sparring.model.response.UserChatCompletionRespons
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
import java.util.List; import java.util.List;
import java.util.Set;
public interface ChatCompletionService { public interface ChatCompletionService {
...@@ -59,4 +60,6 @@ public interface ChatCompletionService { ...@@ -59,4 +60,6 @@ public interface ChatCompletionService {
void deleteHotQa(Integer id); void deleteHotQa(Integer id);
void saveHotQa(HotQaSaveModel dto); void saveHotQa(HotQaSaveModel dto);
List<QaAssistantResponseModel> qaAssistantListByIds(Set<Integer> assistantIds);
} }
...@@ -26,6 +26,7 @@ import org.springframework.stereotype.Service; ...@@ -26,6 +26,7 @@ import org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import static cn.breeze.elleai.infra.entity.table.QaAssistantTableDef.QA_ASSISTANT_ENTITY; import static cn.breeze.elleai.infra.entity.table.QaAssistantTableDef.QA_ASSISTANT_ENTITY;
import static cn.breeze.elleai.infra.entity.table.UserChatCompletionHistoryTableDef.USER_CHAT_COMPLETION_HISTORY_ENTITY; import static cn.breeze.elleai.infra.entity.table.UserChatCompletionHistoryTableDef.USER_CHAT_COMPLETION_HISTORY_ENTITY;
...@@ -262,6 +263,10 @@ public class ChatCompletionServiceImpl implements ChatCompletionService{ ...@@ -262,6 +263,10 @@ public class ChatCompletionServiceImpl implements ChatCompletionService{
public List<HotQaResponseModel> hotQaList(HotQaRequestModel request) { public List<HotQaResponseModel> hotQaList(HotQaRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create() QueryWrapper queryWrapper = QueryWrapper.create()
.where(HOT_QA_ENTITY.DELETED.eq(0)); .where(HOT_QA_ENTITY.DELETED.eq(0));
if (ObjectUtil.isNotNull(request.getAssistantId())) {
queryWrapper.and(HOT_QA_ENTITY.ASSISTANT_ID.eq(request.getAssistantId()));
}
if(StrUtil.isNotEmpty(request.getName())) { if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.and(HOT_QA_ENTITY.QUESTION.like("%"+request.getName()+"%")); queryWrapper.and(HOT_QA_ENTITY.QUESTION.like("%"+request.getName()+"%"));
} }
...@@ -301,4 +306,11 @@ public class ChatCompletionServiceImpl implements ChatCompletionService{ ...@@ -301,4 +306,11 @@ public class ChatCompletionServiceImpl implements ChatCompletionService{
HotQaEntity entity = BeanUtil.toBean(dto, HotQaEntity.class); HotQaEntity entity = BeanUtil.toBean(dto, HotQaEntity.class);
hotQaMapper.insertOrUpdateSelective(entity); hotQaMapper.insertOrUpdateSelective(entity);
} }
@Override
public List<QaAssistantResponseModel> qaAssistantListByIds(Set<Integer> assistantIds) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(QA_ASSISTANT_ENTITY.ID.in(assistantIds));
return qaAssistantMapper.selectListByQueryAs(queryWrapper, QaAssistantResponseModel.class);
}
} }
...@@ -7,12 +7,16 @@ import cn.breeze.elleai.domain.sparring.model.request.KbRequestModel; ...@@ -7,12 +7,16 @@ import cn.breeze.elleai.domain.sparring.model.request.KbRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.KbSaveModel; import cn.breeze.elleai.domain.sparring.model.request.KbSaveModel;
import cn.breeze.elleai.domain.sparring.model.response.KbResponseModel; import cn.breeze.elleai.domain.sparring.model.response.KbResponseModel;
import cn.breeze.elleai.infra.entity.KbEntity; import cn.breeze.elleai.infra.entity.KbEntity;
import cn.breeze.elleai.infra.entity.QaAssistantEntity;
import cn.breeze.elleai.infra.mapper.KbMapper; import cn.breeze.elleai.infra.mapper.KbMapper;
import cn.breeze.elleai.infra.mapper.KbVectorMapper; import cn.breeze.elleai.infra.mapper.KbVectorMapper;
import cn.breeze.elleai.infra.mapper.QaAssistantMapper;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONValidator;
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.update.UpdateChain; import com.mybatisflex.core.update.UpdateChain;
...@@ -20,6 +24,7 @@ import com.mybatisflex.spring.service.impl.ServiceImpl; ...@@ -20,6 +24,7 @@ import com.mybatisflex.spring.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
...@@ -41,6 +46,8 @@ public class KbServiceImpl extends ServiceImpl<KbMapper, KbEntity> implements Kb ...@@ -41,6 +46,8 @@ public class KbServiceImpl extends ServiceImpl<KbMapper, KbEntity> implements Kb
private final KbVectorMapper kbVectorMapper; private final KbVectorMapper kbVectorMapper;
private final QaAssistantMapper qaAssistantMapper;
@Override @Override
public Page<KbResponseModel> kbPaginQuery(KbRequestModel request) { public Page<KbResponseModel> kbPaginQuery(KbRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1); Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
...@@ -142,9 +149,24 @@ public class KbServiceImpl extends ServiceImpl<KbMapper, KbEntity> implements Kb ...@@ -142,9 +149,24 @@ public class KbServiceImpl extends ServiceImpl<KbMapper, KbEntity> implements Kb
@Override @Override
public PageResult<HotQaMobileDto> hotQaList(QaAssistantRequestDto request) { public PageResult<HotQaMobileDto> hotQaList(QaAssistantRequestDto request) {
List<Integer> tagIds = new ArrayList<>();
if(Objects.nonNull(request.getAssistantId())) {
QaAssistantEntity entity = qaAssistantMapper.selectOneById(request.getAssistantId());
if (Objects.nonNull(entity)) {
if (StrUtil.isNotBlank(entity.getCategoryIds())) {
if (JSONValidator.from(entity.getCategoryIds()).validate()) {
List<Integer> items = JSONArray.parseArray(entity.getCategoryIds(), Integer.class);
if (CollUtil.isNotEmpty(items)) {
tagIds.addAll(items);
}
}
}
}
}
QueryWrapper qw = QueryWrapper.create() QueryWrapper qw = QueryWrapper.create()
.select(KB_ENTITY.QUESTION) .select(KB_ENTITY.QUESTION)
.where(KB_ENTITY.STATUS.eq(1).and(KB_ENTITY.DELETED.eq(0))) .where(KB_ENTITY.STATUS.eq(1).and(KB_ENTITY.DELETED.eq(0)))
.and(KB_ENTITY.TAG_ID.in(tagIds).when(CollUtil.isNotEmpty(tagIds)))
.orderBy(KB_ENTITY.HINT.desc()) .orderBy(KB_ENTITY.HINT.desc())
.limit(10); .limit(10);
List<String> questions = kbMapper.selectObjectListByQueryAs(qw, String.class); List<String> questions = kbMapper.selectObjectListByQueryAs(qw, String.class);
......
...@@ -41,6 +41,11 @@ public class HotQaEntity implements Serializable { ...@@ -41,6 +41,11 @@ public class HotQaEntity implements Serializable {
*/ */
private String answer; private String answer;
/**
* 助手ID
*/
private Integer assistantId;
/** /**
* 排序优先级 * 排序优先级
*/ */
......
...@@ -34,6 +34,11 @@ public class HotQaTableDef extends TableDef { ...@@ -34,6 +34,11 @@ public class HotQaTableDef extends TableDef {
*/ */
public final QueryColumn ANSWER = new QueryColumn(this, "answer"); public final QueryColumn ANSWER = new QueryColumn(this, "answer");
/**
* 助手ID
*/
public final QueryColumn ASSISTANT_ID = new QueryColumn(this, "assistant_id");
/** /**
* 排序优先级 * 排序优先级
*/ */
...@@ -62,7 +67,7 @@ public class HotQaTableDef extends TableDef { ...@@ -62,7 +67,7 @@ public class HotQaTableDef extends TableDef {
/** /**
* 默认字段,不包含逻辑删除或者 large 等字段。 * 默认字段,不包含逻辑删除或者 large 等字段。
*/ */
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, QUESTION, ANSWER, SORT_INDEX, STATUS, DELETED, CREATE_TIME}; public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, QUESTION, ANSWER,ASSISTANT_ID, SORT_INDEX, STATUS, DELETED, CREATE_TIME};
public HotQaTableDef() { public HotQaTableDef() {
super("", "ai_hot_qa"); super("", "ai_hot_qa");
......
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