package cc.mrbird.febs.ai.service.impl;
|
|
import cc.mrbird.febs.ai.entity.AiMemberTalk;
|
import cc.mrbird.febs.ai.entity.AiMemberTalkItem;
|
import cc.mrbird.febs.ai.entity.AiProductQuestion;
|
import cc.mrbird.febs.ai.entity.AiProductRoleLink;
|
import cc.mrbird.febs.ai.enumerates.AiTypeEnum;
|
import cc.mrbird.febs.ai.mapper.AiMemberTalkMapper;
|
import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto;
|
import cc.mrbird.febs.ai.req.memberTalkStream.ApiMemberTalkReloadStreamDto;
|
import cc.mrbird.febs.ai.req.memberTalkStream.ApiMemberTalkStreamDto;
|
import cc.mrbird.febs.ai.res.memberTalkStream.ApiMemberTalkReloadStreamVo;
|
import cc.mrbird.febs.ai.res.memberTalkStream.ApiMemberTalkStreamVo;
|
import cc.mrbird.febs.ai.service.*;
|
import cc.mrbird.febs.common.entity.FebsResponse;
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.common.utils.LoginUserUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Date;
|
|
/**
|
* AI用户对话训练记录 Service实现类
|
*
|
* @author yourname
|
* @date 2025-07-29
|
*/
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class ApiMemberTalkStreamServiceImpl extends ServiceImpl<AiMemberTalkMapper, AiMemberTalk> implements ApiMemberTalkStreamService {
|
|
private final AiMemberTalkMapper aiMemberTalkMapper;
|
private final AiProductRoleLinkService aiProductRoleLinkService;
|
private final AiMemberTalkService aiMemberTalkService;
|
private final AiMemberTalkItemService aiMemberTalkItemService;
|
private final AiProductQuestionService aiProductQuestionService;
|
private final AiService aiService;
|
|
|
@Override
|
public FebsResponse start(ApiMemberTalkStreamDto dto) {
|
|
String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
|
String productId = dto.getId();
|
LambdaQueryWrapper<AiProductRoleLink> productLinkQuery = Wrappers.lambdaQuery(AiProductRoleLink.class);
|
productLinkQuery.eq(AiProductRoleLink::getProductId,productId);
|
productLinkQuery.last("limit 1");
|
AiProductRoleLink aiProductRoleLink = aiProductRoleLinkService.getByQuery(productLinkQuery);
|
if(ObjectUtil.isNull(aiProductRoleLink)){
|
throw new FebsException("产品AI陪练不存在");
|
}
|
|
Date nowTime = new Date();
|
LambdaQueryWrapper<AiMemberTalk> query = Wrappers.lambdaQuery(AiMemberTalk.class);
|
query.eq(AiMemberTalk::getMemberId,memberUuid);
|
query.eq(AiMemberTalk::getProductId,productId);
|
query.last("limit 1");
|
AiMemberTalk aiMemberTalk = aiMemberTalkService.getByQuery(query);
|
if (ObjectUtil.isNull(aiMemberTalk)){
|
aiMemberTalk = aiMemberTalkService.add(memberUuid,productId,nowTime);
|
}
|
|
ApiMemberTalkStreamVo apiMemberTalkVo = new ApiMemberTalkStreamVo();
|
String title = "加载时间过程,请重试!";
|
AiProductQuestion question = aiProductQuestionService.createQuestion(productId);
|
if (ObjectUtil.isNotNull(question)){
|
AiMemberTalkItem aiMemberTalkItem = aiMemberTalkItemService.add(memberUuid, aiMemberTalk.getId(), 1, title, nowTime);
|
apiMemberTalkVo.setMemberTalkItemId(aiMemberTalkItem.getId());
|
aiMemberTalkService.updateTimeUpdate(nowTime,aiMemberTalk.getId());
|
question.getTitle();
|
}
|
apiMemberTalkVo.setMemberTalkId(aiMemberTalk.getId());
|
apiMemberTalkVo.setType(1);
|
apiMemberTalkVo.setContext(title);
|
return new FebsResponse().success().data(apiMemberTalkVo);
|
}
|
|
@Override
|
public FebsResponse reload(ApiMemberTalkReloadStreamDto dto) {
|
|
String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
|
ApiMemberTalkReloadStreamVo apiMemberTalkReloadVo = new ApiMemberTalkReloadStreamVo();
|
String memberTalkId = dto.getMemberTalkId();
|
LambdaQueryWrapper<AiMemberTalkItem> queryWrapper = Wrappers.lambdaQuery(AiMemberTalkItem.class);
|
queryWrapper.eq(AiMemberTalkItem::getMemberTalkId,memberTalkId);
|
queryWrapper.eq(AiMemberTalkItem::getType,AiTypeEnum.QUESTION_ANSWER.getCode());
|
queryWrapper.orderByDesc(AiMemberTalkItem::getCreatedTime);
|
queryWrapper.last("limit 1");
|
AiMemberTalkItem byQuery = aiMemberTalkItemService.getByQuery(queryWrapper);
|
if (ObjectUtil.isNotNull(byQuery)){
|
apiMemberTalkReloadVo.setContext(byQuery.getContext());
|
apiMemberTalkReloadVo.setMemberTalkId(memberTalkId);
|
apiMemberTalkReloadVo.setType(AiTypeEnum.QUESTION_ANSWER.getCode());
|
}
|
return new FebsResponse().success().data(apiMemberTalkReloadVo);
|
}
|
|
@Override
|
public FebsResponse historyPage(ApiMemberTalkItemPageDto dto) {
|
String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
|
dto.setMemberUuid(memberUuid);
|
return new FebsResponse().success().data(aiMemberTalkItemService.historyPage(dto));
|
}
|
}
|