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.AiProductRoleLink;
|
import cc.mrbird.febs.ai.mapper.AiMemberTalkMapper;
|
import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkAnswerDto;
|
import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkDto;
|
import cc.mrbird.febs.ai.res.ai.AiResponse;
|
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkVo;
|
import cc.mrbird.febs.ai.service.AiMemberTalkItemService;
|
import cc.mrbird.febs.ai.service.AiMemberTalkService;
|
import cc.mrbird.febs.ai.service.AiProductRoleLinkService;
|
import cc.mrbird.febs.ai.service.AiService;
|
import cc.mrbird.febs.ai.utils.UUID;
|
import cc.mrbird.febs.common.entity.FebsResponse;
|
import cc.mrbird.febs.common.utils.LoginUserUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.StrUtil;
|
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 AiMemberTalkServiceImpl extends ServiceImpl<AiMemberTalkMapper, AiMemberTalk> implements AiMemberTalkService {
|
|
private final AiMemberTalkMapper aiMemberTalkMapper;
|
private final AiProductRoleLinkService aiProductRoleLinkService;
|
private final AiMemberTalkItemService aiMemberTalkItemService;
|
private final AiService aiService;
|
|
|
@Override
|
public AiMemberTalk getById(String id) {
|
return aiMemberTalkMapper.selectById( id);
|
}
|
|
@Override
|
public FebsResponse start(ApiMemberTalkDto 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 RuntimeException("产品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 = this.getByQuery(query);
|
if (ObjectUtil.isNull(aiMemberTalk)){
|
aiMemberTalk = this.add(memberUuid,productId,nowTime);
|
}
|
|
AiResponse aiResponse = aiService.start(aiProductRoleLink.getProductRoleId(),"开始出题");
|
if(aiResponse.getCode().equals("200")){
|
aiMemberTalkItemService.add(memberUuid,aiMemberTalk.getId(),1,aiResponse.getResContext(),nowTime);
|
this.updateTimeUpdate(nowTime,aiMemberTalk.getId());
|
}else{
|
throw new RuntimeException(aiResponse.getDescription());
|
}
|
ApiMemberTalkVo apiMemberTalkVo = new ApiMemberTalkVo();
|
apiMemberTalkVo.setMemberTalkId(aiMemberTalk.getId());
|
apiMemberTalkVo.setType(1);
|
apiMemberTalkVo.setContext(aiResponse.getResContext());
|
|
return new FebsResponse().success().data(apiMemberTalkVo);
|
}
|
|
@Override
|
public AiMemberTalk getByQuery(LambdaQueryWrapper<AiMemberTalk> query) {
|
return aiMemberTalkMapper.selectOne( query);
|
}
|
|
@Override
|
public void updateTimeUpdate(Date nowTime, String id) {
|
aiMemberTalkMapper.update(
|
null,
|
Wrappers.lambdaUpdate(AiMemberTalk.class)
|
.set(AiMemberTalk::getUpdatedTime,nowTime)
|
.eq(AiMemberTalk::getId,id));
|
}
|
|
|
public static final String ANSWER_FORMAT = "{}/n回答:{}/n请根据回答给出以下四个方面的总结,这个四个方面分别是亮点、建议、参考答案和核心知识点回顾。重点:四个方面的总结都是必须要有内容。";
|
@Override
|
public FebsResponse answer(ApiMemberTalkAnswerDto dto) {
|
String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
|
String memberTalkId = dto.getId();
|
AiMemberTalk aiMemberTalk = this.getById(memberTalkId);
|
if (ObjectUtil.isNull(aiMemberTalk)){
|
throw new RuntimeException("产品AI陪练对话不存在");
|
}
|
|
LambdaQueryWrapper<AiProductRoleLink> productLinkQuery = Wrappers.lambdaQuery(AiProductRoleLink.class);
|
productLinkQuery.eq(AiProductRoleLink::getProductId,aiMemberTalk.getProductId());
|
productLinkQuery.last("limit 1");
|
AiProductRoleLink aiProductRoleLink = aiProductRoleLinkService.getByQuery(productLinkQuery);
|
if(ObjectUtil.isNull(aiProductRoleLink)){
|
throw new RuntimeException("产品AI陪练不存在");
|
}
|
|
String reqContext = dto.getReqContext();
|
|
LambdaQueryWrapper<AiMemberTalkItem> memberTalkItemQuery = Wrappers.lambdaQuery(AiMemberTalkItem.class);
|
memberTalkItemQuery.eq(AiMemberTalkItem::getMemberId,memberUuid);
|
memberTalkItemQuery.eq(AiMemberTalkItem::getMemberTalkId,memberTalkId);
|
memberTalkItemQuery.eq(AiMemberTalkItem::getType,1);
|
memberTalkItemQuery.orderByDesc(AiMemberTalkItem::getCreatedTime);
|
memberTalkItemQuery.last("limit 1");
|
AiMemberTalkItem aiMemberTalkItem = aiMemberTalkItemService.getByQuery(memberTalkItemQuery);
|
aiMemberTalkItemService.add(memberUuid,aiMemberTalk.getId(),2,reqContext,new Date());
|
|
String format = StrUtil.format(ANSWER_FORMAT, aiMemberTalkItem.getContext(), reqContext);
|
log.info("format:{}",format);
|
AiResponse aiResponse = aiService.start(aiProductRoleLink.getProductRoleId(), format);
|
if(aiResponse.getCode().equals("200")){
|
Date nowTime = new Date();
|
aiMemberTalkItemService.add(memberUuid,aiMemberTalk.getId(),3,aiResponse.getResContext(),nowTime);
|
this.updateTimeUpdate(nowTime,aiMemberTalk.getId());
|
}else{
|
throw new RuntimeException(aiResponse.getDescription());
|
}
|
ApiMemberTalkVo apiMemberTalkVo = new ApiMemberTalkVo();
|
apiMemberTalkVo.setMemberTalkId(aiMemberTalk.getId());
|
apiMemberTalkVo.setType(1);
|
apiMemberTalkVo.setContext(aiResponse.getResContext());
|
|
return new FebsResponse().success().data(apiMemberTalkVo);
|
}
|
|
@Override
|
public AiMemberTalk add(String memberUuid, String productId, Date nowTime) {
|
AiMemberTalk aiMemberTalk = new AiMemberTalk();
|
aiMemberTalk.setId(UUID.getSimpleUUIDString());
|
aiMemberTalk.setCreatedTime(nowTime);
|
aiMemberTalk.setMemberId(memberUuid);
|
aiMemberTalk.setProductId(productId);
|
aiMemberTalkMapper.insert(aiMemberTalk);
|
return aiMemberTalk;
|
}
|
}
|