Commit 30105aa8 authored by 陈立彬's avatar 陈立彬

知识管理接口

parent c02dd4e7
...@@ -7,12 +7,10 @@ import lombok.RequiredArgsConstructor; ...@@ -7,12 +7,10 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*; import org.springframework.http.*;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
...@@ -37,18 +35,14 @@ public class AiPlatformExtensionService { ...@@ -37,18 +35,14 @@ public class AiPlatformExtensionService {
* 单题评分+点评 * 单题评分+点评
* @param sessionId * @param sessionId
* @param userId * @param userId
* @param question * @param businessId 单题答题记录ID
* @param answer
* @param userAnswer
*/ */
public AiSingleEvaluateResultDto run4SingleEvaluate(String sessionId, String userId, String question, String answer, String userAnswer) { public AiSingleEvaluateResultDto run4SingleEvaluate(String sessionId, String userId, Integer businessId) {
Map<String, String> inputs = new HashMap<>(); Map<String, String> inputs = new HashMap<>();
inputs.put("scene", "single_evaluate"); inputs.put("scene", "single_evaluate");
inputs.put("question", question); inputs.put("business_id", String.valueOf(businessId));
inputs.put("answer", answer);
inputs.put("user_answer", userAnswer);
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
param.put("query", userAnswer); param.put("query", businessId);
param.put("inputs", inputs); param.put("inputs", inputs);
param.put("response_mode", "blocking"); param.put("response_mode", "blocking");
param.put("conversation_id", ""); param.put("conversation_id", "");
......
...@@ -1314,6 +1314,28 @@ public class AppExamineService { ...@@ -1314,6 +1314,28 @@ public class AppExamineService {
return null; return null;
} }
/**
* 获取单题答题详情
* @param businessId 答题记录ID
* @return
*/
public ExamineDetailRecordMobileDto getExamineRecordDetail(Integer businessId) {
ExamineDetailRecordMobileDto result = new ExamineDetailRecordMobileDto();
// 获取考试记录信息
ExamineRecordDetailResponseModel recordModel = examineService.singleExamineQaDetail(businessId);
if(Objects.nonNull(recordModel)) {
Integer qaId = recordModel.getQaId();
ExamineQaResponseModel qaDetail = examineService.examineQaDetail(qaId);
if(Objects.nonNull(qaDetail)) {
result.setQuestion(qaDetail.getQuestion());
result.setAnswer(qaDetail.getAnswer());
}
result.setUserAnswer(recordModel.getAnswer());
result.setQaId(qaId);
}
return result;
}
/** /**
* 退出考试,清除考试记录 * 退出考试,清除考试记录
* @param userPrincipal * @param userPrincipal
......
package cn.breeze.elleai.controller.extension; package cn.breeze.elleai.controller.extension;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.response.AppRoleDto;
import cn.breeze.elleai.application.service.AiPlatformExtensionService; import cn.breeze.elleai.application.service.AiPlatformExtensionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.UUID;
/** /**
* @author yangyw * @author yangyw
*/ */
...@@ -24,26 +17,4 @@ public class AiPlatformExtensionController { ...@@ -24,26 +17,4 @@ public class AiPlatformExtensionController {
private final AiPlatformExtensionService extensionService; private final AiPlatformExtensionService extensionService;
@Operation(summary = "单题点评")
@GetMapping("/single_evaluate")
public ApiResponse<String> singleEvaluate() {
String userId = UUID.randomUUID().toString();
String sessionId = UUID.randomUUID().toString();
String question = "问题";
String answer = "答案";
String userAnswer = "用户答案";
extensionService.run4SingleEvaluate(userId, sessionId, question, answer, userAnswer);
return ApiResponse.ok("SUCCESS");
}
@Operation(summary = "单题点评")
@GetMapping("/total_evaluate")
public ApiResponse<String> totalEvaluate() {
String userId = UUID.randomUUID().toString();
String sessionId = UUID.randomUUID().toString();
extensionService.run4TotalEvaluate(sessionId, userId, null);
return ApiResponse.ok("SUCCESS");
}
} }
...@@ -72,6 +72,13 @@ public class ExamineMobileController { ...@@ -72,6 +72,13 @@ public class ExamineMobileController {
return ApiResponse.ok(detail); return ApiResponse.ok(detail);
} }
@Operation(summary = "获取单题答题详情")
@GetMapping("/single_qa/detail")
public ApiResponse<ExamineDetailRecordMobileDto> singleQaDetail(@Schema(description = "答题记录ID") @RequestParam("business_id") Integer businessId) {
ExamineDetailRecordMobileDto detail = examineService.getExamineRecordDetail(businessId);
return ApiResponse.ok(detail);
}
@Operation(summary = "获取对练记录详情") @Operation(summary = "获取对练记录详情")
@GetMapping("/record/detail") @GetMapping("/record/detail")
public ApiResponse<ExamineRecordMobileDto> recordDetail(@Schema(description = "对练流水号") @RequestParam("business_no") String businessNo) { public ApiResponse<ExamineRecordMobileDto> recordDetail(@Schema(description = "对练流水号") @RequestParam("business_no") String businessNo) {
......
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class KbRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
private Integer status;
private Integer tagId;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class KbSaveModel implements Serializable {
private Long id;
/**
* 知识分类ID
*/
private Long tagId;
/**
* 问题
*/
private String question;
/**
* 答案
*/
private String answer;
/**
* 状态0停用,1启用
*/
private Integer status;
/**
* 删除标识,0有效,1删除
*/
private Integer deleted;
/**
* 创建时间
*/
private Date createAt;
/**
* 更新时间
*/
private Date updateAt;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class KbTagRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
private Integer status;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class KbTagSaveModel implements Serializable {
private Long id;
/**
* 分类名称
*/
private String name;
private String description;
/**
* 状态0停用,1启用
*/
private Integer status;
/**
* 创建时间
*/
private Date createAt;
/**
* 父级ID(1级为0)
*/
private Long parentId;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class KbVectorRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private Integer kbId;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class KbVectorSaveModel implements Serializable {
private Long id;
/**
* 知识ID
*/
private Long kbId;
/**
* 向量知识库数据ID
*/
private Long vectorId;
/**
* 创建时间
*/
private Date createAt;
}
package cn.breeze.elleai.domain.sparring.model.response;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class KbResponseModel implements Serializable {
private Long id;
/**
* 知识分类ID
*/
private Long tagId;
/**
* 问题
*/
private String question;
/**
* 答案
*/
private String answer;
/**
* 状态0停用,1启用
*/
private Integer status;
/**
* 删除标识,0有效,1删除
*/
private Integer deleted;
/**
* 创建时间
*/
private Date createAt;
/**
* 更新时间
*/
private Date updateAt;
}
package cn.breeze.elleai.domain.sparring.model.response;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class KbTagResponseModel implements Serializable {
private Long id;
/**
* 分类名称
*/
private String name;
private String description;
/**
* 状态0停用,1启用
*/
private Integer status;
/**
* 创建时间
*/
private Date createAt;
/**
* 父级ID(1级为0)
*/
private Long parentId;
}
package cn.breeze.elleai.domain.sparring.model.response;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class KbVectorResponseModel implements Serializable {
private Long id;
/**
* 知识ID
*/
private Long kbId;
/**
* 向量知识库数据ID
*/
private Long vectorId;
/**
* 创建时间
*/
private Date createAt;
}
package cn.breeze.elleai.domain.sparring.service;
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.response.KbResponseModel;
import cn.breeze.elleai.infra.entity.KbEntity;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import java.util.List;
/**
* 服务层。
*
* @author breeze
* @since 2024-10-21
*/
public interface KbService extends IService<KbEntity> {
/***************************************** 知识库QA *****************************************/
Page<KbResponseModel> kbPaginQuery(KbRequestModel request);
List<KbResponseModel> kbList(KbRequestModel request);
KbResponseModel kbDetail(Integer id);
void updateKbStatus(Integer id, Integer status);
void deleteKb(Integer id);
void saveKb(KbSaveModel dto);
}
package cn.breeze.elleai.domain.sparring.service;
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.response.KbResponseModel;
import cn.breeze.elleai.infra.entity.KbEntity;
import cn.breeze.elleai.infra.mapper.KbMapper;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.update.UpdateChain;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import static cn.breeze.elleai.infra.entity.table.KbTableDef.KB_ENTITY;
/**
* 服务层实现。
*
* @author breeze
* @since 2024-10-21
*/
@Service
@RequiredArgsConstructor
public class KbServiceImpl extends ServiceImpl<KbMapper, KbEntity> implements KbService {
private final KbMapper kbMapper;
@Override
public Page<KbResponseModel> kbPaginQuery(KbRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.where(KB_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.and(KB_ENTITY.QUESTION.like("%"+request.getName()+"%")).or(KB_ENTITY.ANSWER.like("%"+request.getName()+"%"));
}
if(Objects.nonNull(request.getStatus())) {
queryWrapper.and(KB_ENTITY.STATUS.eq(request.getStatus()));
}
if(Objects.nonNull(request.getTagId())) {
queryWrapper.and(KB_ENTITY.TAG_ID.eq(request.getTagId()));
}
queryWrapper.orderBy(KB_ENTITY.CREATE_AT, false);
Page<KbResponseModel> page = kbMapper.paginateAs(pageNo, pageSize, queryWrapper, KbResponseModel.class);
return page;
}
@Override
public List<KbResponseModel> kbList(KbRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.where(KB_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.and(KB_ENTITY.QUESTION.like("%"+request.getName()+"%")).or(KB_ENTITY.ANSWER.like("%"+request.getName()+"%"));
}
if(Objects.nonNull(request.getStatus())) {
queryWrapper.and(KB_ENTITY.STATUS.eq(request.getStatus()));
}
if(Objects.nonNull(request.getTagId())) {
queryWrapper.and(KB_ENTITY.TAG_ID.eq(request.getTagId()));
}
queryWrapper.orderBy(KB_ENTITY.CREATE_AT, false);
return kbMapper.selectListByQueryAs(queryWrapper, KbResponseModel.class);
}
@Override
public KbResponseModel kbDetail(Integer id) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(KB_ENTITY.ID.eq(id).and(KB_ENTITY.DELETED.eq(0)));
return kbMapper.selectOneByQueryAs(queryWrapper, KbResponseModel.class);
}
@Override
public void updateKbStatus(Integer id, Integer status) {
UpdateChain.of(KbEntity.class)
.set(KB_ENTITY.STATUS, status)
.set(KB_ENTITY.UPDATE_AT, new Date())
.where(KB_ENTITY.ID.eq(id))
.update();
}
@Override
public void deleteKb(Integer id) {
UpdateChain.of(KbEntity.class)
.set(KB_ENTITY.DELETED, 1)
.set(KB_ENTITY.UPDATE_AT, new Date())
.where(KB_ENTITY.ID.eq(id))
.update();
}
@Override
public void saveKb(KbSaveModel dto) {
KbEntity entity = BeanUtil.toBean(dto, KbEntity.class);
entity.setUpdateAt(new Date());
if(Objects.isNull(entity.getId())) {
entity.setStatus(0);
entity.setDeleted(0);
}
kbMapper.insertOrUpdateSelective(entity);
}
}
package cn.breeze.elleai.domain.sparring.service;
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.KbTagRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.KbTagSaveModel;
import cn.breeze.elleai.domain.sparring.model.response.KbResponseModel;
import cn.breeze.elleai.domain.sparring.model.response.KbTagResponseModel;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import cn.breeze.elleai.infra.entity.KbTagEntity;
import java.util.List;
/**
* 服务层。
*
* @author breeze
* @since 2024-10-21
*/
public interface KbTagService extends IService<KbTagEntity> {
/***************************************** 知识库分类 *****************************************/
Page<KbTagResponseModel> kbTagPaginQuery(KbTagRequestModel request);
List<KbTagResponseModel> kbTagList(KbTagRequestModel request);
KbTagResponseModel kbTagDetail(Integer id);
void updateKbTagStatus(Integer id, Integer status);
void deleteKbTag(Integer id);
void saveKbTag(KbTagSaveModel dto);
}
package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.KbTagRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.KbTagSaveModel;
import cn.breeze.elleai.domain.sparring.model.response.KbTagResponseModel;
import cn.breeze.elleai.infra.entity.KbTagEntity;
import cn.breeze.elleai.infra.mapper.KbTagMapper;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.update.UpdateChain;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import static cn.breeze.elleai.infra.entity.table.KbTagTableDef.KB_TAG_ENTITY;
/**
* 服务层实现。
*
* @author breeze
* @since 2024-10-21
*/
@Service
@RequiredArgsConstructor
public class KbTagServiceImpl extends ServiceImpl<KbTagMapper, KbTagEntity> implements KbTagService {
private final KbTagMapper kbTagMapper;
@Override
public Page<KbTagResponseModel> kbTagPaginQuery(KbTagRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create()
.where(KB_TAG_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.and(KB_TAG_ENTITY.NAME.like("%"+request.getName()+"%"));
}
if(Objects.nonNull(request.getStatus())) {
queryWrapper.and(KB_TAG_ENTITY.STATUS.eq(request.getStatus()));
}
queryWrapper.orderBy(KB_TAG_ENTITY.CREATE_AT, false);
Page<KbTagResponseModel> page = kbTagMapper.paginateAs(pageNo, pageSize, queryWrapper, KbTagResponseModel.class);
return page;
}
@Override
public List<KbTagResponseModel> kbTagList(KbTagRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(KB_TAG_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.and(KB_TAG_ENTITY.NAME.like("%"+request.getName()+"%"));
}
if(Objects.nonNull(request.getStatus())) {
queryWrapper.and(KB_TAG_ENTITY.STATUS.eq(request.getStatus()));
}
queryWrapper.orderBy(KB_TAG_ENTITY.CREATE_AT, false);
return kbTagMapper.selectListByQueryAs(queryWrapper, KbTagResponseModel.class);
}
@Override
public KbTagResponseModel kbTagDetail(Integer id) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(KB_TAG_ENTITY.ID.eq(id).and(KB_TAG_ENTITY.DELETED.eq(0)));
return kbTagMapper.selectOneByQueryAs(queryWrapper, KbTagResponseModel.class);
}
@Override
public void updateKbTagStatus(Integer id, Integer status) {
UpdateChain.of(KbTagEntity.class)
.set(KB_TAG_ENTITY.STATUS, status)
.where(KB_TAG_ENTITY.ID.eq(id))
.update();
}
@Override
public void deleteKbTag(Integer id) {
UpdateChain.of(KbTagEntity.class)
.set(KB_TAG_ENTITY.DELETED, 1)
.where(KB_TAG_ENTITY.ID.eq(id))
.update();
}
@Override
public void saveKbTag(KbTagSaveModel dto) {
KbTagEntity entity = BeanUtil.toBean(dto, KbTagEntity.class);
if(Objects.isNull(entity.getId())) {
entity.setStatus(0);
entity.setDeleted(0);
}
kbTagMapper.insertOrUpdateSelective(entity);
}
}
package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.KbVectorRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.KbVectorSaveModel;
import cn.breeze.elleai.domain.sparring.model.response.KbVectorResponseModel;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import cn.breeze.elleai.infra.entity.KbVectorEntity;
import java.util.List;
/**
* 服务层。
*
* @author breeze
* @since 2024-10-21
*/
public interface KbVectorService extends IService<KbVectorEntity> {
/***************************************** 知识库集合 *****************************************/
Page<KbVectorResponseModel> kbVectorPaginQuery(KbVectorRequestModel request);
List<KbVectorResponseModel> kbVectorList(KbVectorRequestModel request);
KbVectorResponseModel kbVectorDetail(Integer kbId);
void deleteKbVector(Integer kbId);
void saveKbVector(KbVectorSaveModel dto);
}
package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.KbVectorRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.KbVectorSaveModel;
import cn.breeze.elleai.domain.sparring.model.response.KbVectorResponseModel;
import cn.breeze.elleai.infra.entity.KbVectorEntity;
import cn.breeze.elleai.infra.mapper.KbVectorMapper;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import static cn.breeze.elleai.infra.entity.table.KbVectorTableDef.KB_VECTOR_ENTITY;
/**
* 服务层实现。
*
* @author breeze
* @since 2024-10-21
*/
@Service
@RequiredArgsConstructor
public class KbVectorServiceImpl extends ServiceImpl<KbVectorMapper, KbVectorEntity> implements KbVectorService {
private final KbVectorMapper kbVectorMapper;
@Override
public Page<KbVectorResponseModel> kbVectorPaginQuery(KbVectorRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create();
if(Objects.nonNull(request.getKbId())) {
queryWrapper.and(KB_VECTOR_ENTITY.KB_ID.eq(request.getKbId()));
}
queryWrapper.orderBy(KB_VECTOR_ENTITY.CREATE_AT, false);
Page<KbVectorResponseModel> page = kbVectorMapper.paginateAs(pageNo, pageSize, queryWrapper, KbVectorResponseModel.class);
return page;
}
@Override
public List<KbVectorResponseModel> kbVectorList(KbVectorRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create();
if(Objects.nonNull(request.getKbId())) {
queryWrapper.and(KB_VECTOR_ENTITY.KB_ID.eq(request.getKbId()));
}
queryWrapper.orderBy(KB_VECTOR_ENTITY.CREATE_AT, false);
return kbVectorMapper.selectListByQueryAs(queryWrapper, KbVectorResponseModel.class);
}
@Override
public KbVectorResponseModel kbVectorDetail(Integer kbId) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(KB_VECTOR_ENTITY.KB_ID.eq(kbId));
return kbVectorMapper.selectOneByQueryAs(queryWrapper, KbVectorResponseModel.class);
}
@Override
public void deleteKbVector(Integer kbId) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(KB_VECTOR_ENTITY.KB_ID.eq(kbId));
kbVectorMapper.deleteByQuery(queryWrapper);
}
@Override
public void saveKbVector(KbVectorSaveModel dto) {
KbVectorEntity entity = BeanUtil.toBean(dto, KbVectorEntity.class);
if(Objects.isNull(entity.getId())) {
entity.setCreateAt(new Date());
}
kbVectorMapper.insertOrUpdateSelective(entity);
}
}
package cn.breeze.elleai.infra.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.util.Date;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类。
*
* @author breeze
* @since 2024-10-21
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("cs_kb")
public class KbEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Long id;
/**
* 知识分类ID
*/
private Long tagId;
/**
* 问题
*/
private String question;
/**
* 答案
*/
private String answer;
/**
* 状态0停用,1启用
*/
private Integer status;
/**
* 删除标识,0有效,1删除
*/
private Integer deleted;
/**
* 创建时间
*/
private Date createAt;
/**
* 更新时间
*/
private Date updateAt;
}
package cn.breeze.elleai.infra.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.util.Date;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类。
*
* @author breeze
* @since 2024-10-21
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("cs_kb_tag")
public class KbTagEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Long id;
/**
* 分类名称
*/
private String name;
private String description;
/**
* 状态0停用,1启用
*/
private Integer status;
/**
* 创建时间
*/
private Date createAt;
/**
* 父级ID(1级为0)
*/
private Long parentId;
/**
* 是否删除
*/
private Integer deleted;
}
package cn.breeze.elleai.infra.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.util.Date;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类。
*
* @author breeze
* @since 2024-10-21
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("cs_kb_vector")
public class KbVectorEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Long id;
/**
* 知识ID
*/
private Long kbId;
/**
* 向量知识库数据ID
*/
private Long vectorId;
/**
* 创建时间
*/
private Date createAt;
}
package cn.breeze.elleai.infra.entity.table;
import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.table.TableDef;
import java.io.Serial;
/**
* 表定义层。
*
* @author breeze
* @since 2024-10-21
*/
public class KbTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final KbTableDef KB_ENTITY = new KbTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
/**
* 知识分类ID
*/
public final QueryColumn TAG_ID = new QueryColumn(this, "tag_id");
/**
* 答案
*/
public final QueryColumn ANSWER = new QueryColumn(this, "answer");
/**
* 状态0停用,1启用
*/
public final QueryColumn STATUS = new QueryColumn(this, "status");
/**
* 删除标识,0有效,1删除
*/
public final QueryColumn DELETED = new QueryColumn(this, "deleted");
/**
* 创建时间
*/
public final QueryColumn CREATE_AT = new QueryColumn(this, "create_at");
/**
* 问题
*/
public final QueryColumn QUESTION = new QueryColumn(this, "question");
/**
* 更新时间
*/
public final QueryColumn UPDATE_AT = new QueryColumn(this, "update_at");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, TAG_ID, QUESTION, ANSWER, STATUS, DELETED, CREATE_AT, UPDATE_AT};
public KbTableDef() {
super("", "cs_kb");
}
private KbTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public KbTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new KbTableDef("", "cs_kb", alias));
}
}
package cn.breeze.elleai.infra.entity.table;
import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.table.TableDef;
import java.io.Serial;
/**
* 表定义层。
*
* @author breeze
* @since 2024-10-21
*/
public class KbTagTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final KbTagTableDef KB_TAG_ENTITY = new KbTagTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
/**
* 分类名称
*/
public final QueryColumn NAME = new QueryColumn(this, "name");
/**
* 状态0停用,1启用
*/
public final QueryColumn STATUS = new QueryColumn(this, "status");
/**
* 创建时间
*/
public final QueryColumn CREATE_AT = new QueryColumn(this, "create_at");
/**
* 父级ID(1级为0)
*/
public final QueryColumn PARENT_ID = new QueryColumn(this, "parent_id");
/**
* 是否删除
*/
public final QueryColumn DELETED = new QueryColumn(this, "deleted");
public final QueryColumn DESCRIPTION = new QueryColumn(this, "description");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, NAME, DESCRIPTION, STATUS, CREATE_AT, PARENT_ID, DELETED};
public KbTagTableDef() {
super("", "cs_kb_tag");
}
private KbTagTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public KbTagTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new KbTagTableDef("", "cs_kb_tag", alias));
}
}
package cn.breeze.elleai.infra.entity.table;
import com.mybatisflex.core.query.QueryColumn;
import com.mybatisflex.core.table.TableDef;
import java.io.Serial;
/**
* 表定义层。
*
* @author breeze
* @since 2024-10-21
*/
public class KbVectorTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final KbVectorTableDef KB_VECTOR_ENTITY = new KbVectorTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
/**
* 知识ID
*/
public final QueryColumn KB_ID = new QueryColumn(this, "kb_id");
/**
* 创建时间
*/
public final QueryColumn CREATE_AT = new QueryColumn(this, "create_at");
/**
* 向量知识库数据ID
*/
public final QueryColumn VECTOR_ID = new QueryColumn(this, "vector_id");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, KB_ID, VECTOR_ID, CREATE_AT};
public KbVectorTableDef() {
super("", "cs_kb_vector");
}
private KbVectorTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public KbVectorTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new KbVectorTableDef("", "cs_kb_vector", alias));
}
}
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.KbEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-10-21
*/
@Mapper
public interface KbMapper extends BaseMapper<KbEntity> {
}
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.KbTagEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-10-21
*/
@Mapper
public interface KbTagMapper extends BaseMapper<KbTagEntity> {
}
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.KbVectorEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-10-21
*/
@Mapper
public interface KbVectorMapper extends BaseMapper<KbVectorEntity> {
}
...@@ -78,17 +78,11 @@ public class SingleJob extends QuartzJobBean { ...@@ -78,17 +78,11 @@ public class SingleJob extends QuartzJobBean {
// 单题点评 // 单题点评
if(Objects.equals(type, 0)) { if(Objects.equals(type, 0)) {
// 获取单题答题信息 AiSingleEvaluateResultDto evaluateResult = extensionService.run4SingleEvaluate(businessNo, job.getUserId(), businessId);
ExamineRecordDetailResponseModel singleQaDetail = examineService.singleExamineQaDetail(businessId);
Integer qaId = singleQaDetail.getQaId();
ExamineQaResponseModel qaDetail = examineService.examineQaDetail(qaId);
AiSingleEvaluateResultDto evaluateResult = extensionService.run4SingleEvaluate(businessNo, job.getUserId(), qaDetail.getQuestion(), qaDetail.getAnswer(), singleQaDetail.getAnswer());
if(Objects.nonNull(evaluateResult)) { if(Objects.nonNull(evaluateResult)) {
// 更新答题点评信息 // 更新答题点评信息
ExamineRecordDetailSaveModel detailSaveModel = new ExamineRecordDetailSaveModel(); ExamineRecordDetailSaveModel detailSaveModel = new ExamineRecordDetailSaveModel();
detailSaveModel.setId(singleQaDetail.getId()); detailSaveModel.setId(businessId);
detailSaveModel.setScore(evaluateResult.getScore()); detailSaveModel.setScore(evaluateResult.getScore());
detailSaveModel.setEvaluation(evaluateResult.getEvaluation()); detailSaveModel.setEvaluation(evaluateResult.getEvaluation());
examineService.saveExamineRecordDetail(detailSaveModel); examineService.saveExamineRecordDetail(detailSaveModel);
......
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