Commit 94708e1f authored by 陈立彬's avatar 陈立彬

接口规范&接口调整

parent 224b181a
...@@ -11,11 +11,11 @@ public class ExamineQaRequestDto implements Serializable { ...@@ -11,11 +11,11 @@ public class ExamineQaRequestDto implements Serializable {
@Schema(description = "页码") @Schema(description = "页码")
@JsonProperty("page_no") @JsonProperty("page_no")
private Integer pageNo; private Integer pageNo = 1;
@Schema(description = "分页数量") @Schema(description = "分页数量")
@JsonProperty("page_size") @JsonProperty("page_size")
private Integer pageSize; private Integer pageSize = 10;
@Schema(description = "题目名称") @Schema(description = "题目名称")
private String name; private String name;
......
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class ExamineRecordMobileRequestDto implements Serializable {
@Schema(description = "页码")
@JsonProperty("page_no")
private Integer pageNo = 1;
@Schema(description = "分页数量")
@JsonProperty("page_size")
private Integer pageSize = 10;
@Schema(description = "对练模式(0练习 1对练)")
@JsonProperty("examine_mode")
private Integer examineMode;
}
...@@ -12,11 +12,11 @@ public class ExamineRecordRequestDto implements Serializable { ...@@ -12,11 +12,11 @@ public class ExamineRecordRequestDto implements Serializable {
@Schema(description = "页码") @Schema(description = "页码")
@JsonProperty("page_no") @JsonProperty("page_no")
private Integer pageNo; private Integer pageNo = 1;
@Schema(description = "分页数量") @Schema(description = "分页数量")
@JsonProperty("page_size") @JsonProperty("page_size")
private Integer pageSize; private Integer pageSize = 10;
@Schema(description = "用户ID") @Schema(description = "用户ID")
@JsonProperty("user_id") @JsonProperty("user_id")
......
...@@ -11,11 +11,11 @@ public class ExamineRequestDto implements Serializable { ...@@ -11,11 +11,11 @@ public class ExamineRequestDto implements Serializable {
@Schema(description = "页码") @Schema(description = "页码")
@JsonProperty("page_no") @JsonProperty("page_no")
private Integer pageNo; private Integer pageNo = 1;
@Schema(description = "分页数量") @Schema(description = "分页数量")
@JsonProperty("page_size") @JsonProperty("page_size")
private Integer pageSize; private Integer pageSize = 10;
@Schema(description = "对练名称") @Schema(description = "对练名称")
private String name; private String name;
......
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExamineSceneMobileRequestDto implements Serializable {
@Schema(description = "页码")
@JsonProperty("page_no")
private Integer pageNo = 1;
@Schema(description = "分页数量")
@JsonProperty("page_size")
private Integer pageSize = 10;
}
...@@ -12,11 +12,11 @@ public class ExamineSceneRequestDto implements Serializable { ...@@ -12,11 +12,11 @@ public class ExamineSceneRequestDto implements Serializable {
@Schema(description = "页码") @Schema(description = "页码")
@JsonProperty("page_no") @JsonProperty("page_no")
private Integer pageNo; private Integer pageNo = 1;
@Schema(description = "分页数量") @Schema(description = "分页数量")
@JsonProperty("page_size") @JsonProperty("page_size")
private Integer pageSize; private Integer pageSize = 10;
@Schema(description = "场景名称") @Schema(description = "场景名称")
private String name; private String name;
......
...@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; ...@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import org.springframework.web.bind.annotation.RequestParam;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
...@@ -16,11 +17,7 @@ public class ExamineUpdateResultDto implements Serializable { ...@@ -16,11 +17,7 @@ public class ExamineUpdateResultDto implements Serializable {
@JsonProperty("examine_id") @JsonProperty("examine_id")
private Integer examineId; private Integer examineId;
@Schema(description = "用户ID") @Schema(description = "考试流水号")
@JsonProperty("user_id") @JsonProperty("business_no")
private String userId; String businessNo;
@Schema(description = "考试总点评")
@JsonProperty("exam_criteria")
private String examCriteria;
} }
...@@ -11,13 +11,10 @@ public class QaAssistantRequestDto implements Serializable { ...@@ -11,13 +11,10 @@ public class QaAssistantRequestDto implements Serializable {
@Schema(description = "页码") @Schema(description = "页码")
@JsonProperty("page_no") @JsonProperty("page_no")
private Integer pageNo; private Integer pageNo = 1;
@Schema(description = "分页数量") @Schema(description = "分页数量")
@JsonProperty("page_size") @JsonProperty("page_size")
private Integer pageSize; private Integer pageSize = 10;
@Schema(description = "助手名称")
private String name;
} }
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.web.bind.annotation.RequestParam;
import java.io.Serializable;
@Data
public class StartExamineMobileRequestDto implements Serializable {
@Schema(description = "对练ID")
@JsonProperty("examine_id")
private Integer examineId;
@Schema(description = "对练模式(0练习 1对练)")
@JsonProperty("examine_mode")
private Integer examineMode;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.web.bind.annotation.RequestParam;
import java.io.Serializable;
@Data
public class SubmitAnswerMobileRequestDto implements Serializable {
@Schema(description = "对练ID")
@JsonProperty("examine_id")
private Integer examineId;
@Schema(description = "考试流水号,答题、结束考试都需要传此参数")
@JsonProperty("business_no")
private String businessNo;
@Schema(description = "题目ID")
@JsonProperty("question_id")
private Integer questionId;
@Schema(description = "用户答案")
@JsonProperty("answer")
private String answer;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class SwitchAssistantMobileRequestDto implements Serializable {
@Schema(description = "助手ID")
@JsonProperty("assistant_id")
private Integer assistantId;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class UserQaHistoryMobileRequestDto implements Serializable {
@Schema(description = "页码")
@JsonProperty("page_no")
private Integer pageNo;
@Schema(description = "分页数量")
@JsonProperty("page_size")
private Integer pageSize;
@Schema(description = "用户ID")
@JsonProperty("user_id")
private String userId;
@Schema(description = "会话ID")
@JsonProperty("session_id")
private String sessionId;
@Schema(description = "内容")
private String content;
@Schema(description = "会话记录ID")
@JsonProperty("chat_completion_id")
private Integer chatCompletionId;
}
...@@ -16,19 +16,4 @@ public class UserQaHistoryRequestDto implements Serializable { ...@@ -16,19 +16,4 @@ public class UserQaHistoryRequestDto implements Serializable {
@Schema(description = "分页数量") @Schema(description = "分页数量")
@JsonProperty("page_size") @JsonProperty("page_size")
private Integer pageSize; private Integer pageSize;
@Schema(description = "用户ID")
@JsonProperty("user_id")
private String userId;
@Schema(description = "会话ID")
@JsonProperty("session_id")
private String sessionId;
@Schema(description = "内容")
private String content;
@Schema(description = "会话记录ID")
@JsonProperty("chat_completion_id")
private Integer chatCompletionId;
} }
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class UserQaMobileRequestDto implements Serializable {
@Schema(description = "会话ID,首次提问没有则不传,提问后接口返回会话ID,则后续提问都需要传")
@JsonProperty("chat_completion_id")
private Integer chatCompletionId;
@Schema(description = "提问内容")
@JsonProperty("content")
private String content;
}
...@@ -11,11 +11,11 @@ public class UserQaRequestDto implements Serializable { ...@@ -11,11 +11,11 @@ public class UserQaRequestDto implements Serializable {
@Schema(description = "页码") @Schema(description = "页码")
@JsonProperty("page_no") @JsonProperty("page_no")
private Integer pageNo; private Integer pageNo = 1;
@Schema(description = "分页数量") @Schema(description = "分页数量")
@JsonProperty("page_size") @JsonProperty("page_size")
private Integer pageSize; private Integer pageSize = 10;
@Schema(description = "用户ID") @Schema(description = "用户ID")
@JsonProperty("user_id") @JsonProperty("user_id")
......
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class CompleteExamineMobileDto implements Serializable {
@Schema(description = "考试记录ID")
@JsonProperty("record_id")
private Integer recordId;
}
...@@ -18,6 +18,10 @@ public class ExamineFinalResultDto implements Serializable { ...@@ -18,6 +18,10 @@ public class ExamineFinalResultDto implements Serializable {
@JsonProperty("total_score") @JsonProperty("total_score")
private Double totalScore; private Double totalScore;
@Schema(description = "考试总点评")
@JsonProperty("exam_criteria")
private String examCriteria;
@Schema(description = "答题数量") @Schema(description = "答题数量")
@JsonProperty("answered_num") @JsonProperty("answered_num")
private Integer answeredNum; private Integer answeredNum;
......
...@@ -30,34 +30,6 @@ public class ExamineMobileDto implements Serializable { ...@@ -30,34 +30,6 @@ public class ExamineMobileDto implements Serializable {
@Schema(description = "海报图") @Schema(description = "海报图")
private String poster; private String poster;
/**
* 对练场景ID
*/
@Schema(description = "对练场景ID")
@JsonProperty("scene_id")
private Integer sceneId;
/**
* 对练分类ID
*/
@Schema(description = "对练分类ID")
@JsonProperty("category_id")
private Integer categoryId;
/**
* 开始时间
*/
@Schema(description = "对练开始时间")
@JsonProperty("start_time")
private Long startTime;
/**
* 结束时间
*/
@Schema(description = "对练结束时间")
@JsonProperty("end_time")
private Long endTime;
/** /**
* 题目数量 * 题目数量
*/ */
......
...@@ -61,7 +61,7 @@ public class ExamineRecordMobileDto implements Serializable { ...@@ -61,7 +61,7 @@ public class ExamineRecordMobileDto implements Serializable {
/** /**
* 综合评分 * 综合评分
*/ */
@Schema(description = "用户ID") @Schema(description = "综合评分")
@JsonProperty("overall_score") @JsonProperty("overall_score")
private Float overallScore; private Float overallScore;
......
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class ExamineSceneCategoryMobileDto implements Serializable {
@Schema(description = "场景分类ID")
private Integer id;
/**
* 分类名称
*/
@Schema(description = "场景分类名称")
private String name;
/**
* 分类描述
*/
@Schema(description = "场景分类描述")
private String description;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class ExamineSceneMobileDto implements Serializable {
@Schema(description = "场景ID")
private Integer id;
/**
* 场景名称
*/
@Schema(description = "场景名称")
private String name;
/**
* 场景描述
*/
@Schema(description = "场景描述")
private String description;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExamineStartResultDto implements Serializable {
@Schema(description = "考试流水号,答题、结束考试都需要传此参数")
@JsonProperty("business_no")
private String businessNo;
@Schema(description = "题目ID")
@JsonProperty("question_id")
private Integer questionId;
@Schema(description = "问题")
private String question;
@Schema(description = "标准答案")
private String answer;
@Schema(description = "是否有下一题")
private boolean next;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
public class NewCompletionResultMobileDto implements Serializable {
@Schema(description = "新会话ID")
@JsonProperty("chat_completion_id")
private Integer chatCompletionId;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class UserAskResultMobileDto implements Serializable {
@Schema(description = "会话记录ID,后续用户提问需传此ID")
@JsonProperty("chat_completion_id")
private Integer chatCompletionId;
@Schema(description = "AI回复内容")
@JsonProperty("reply_content")
private String replyContent;
}
...@@ -20,6 +20,27 @@ public class UserChatCompletionDto implements Serializable { ...@@ -20,6 +20,27 @@ public class UserChatCompletionDto implements Serializable {
@JsonProperty("user_id") @JsonProperty("user_id")
private String userId; private String userId;
/**
* 用户名称
*/
@Schema(description = "用户名称")
@JsonProperty("user_name")
private String userName;
/**
* 所属门店ID
*/
@Schema(description = "所属门店ID")
@JsonProperty("shop_id")
private String shopId;
/**
* 所属门店名称
*/
@Schema(description = "所属门店名称")
@JsonProperty("shop_name")
private String shopName;
/** /**
* 会话ID * 会话ID
*/ */
...@@ -27,6 +48,20 @@ public class UserChatCompletionDto implements Serializable { ...@@ -27,6 +48,20 @@ public class UserChatCompletionDto implements Serializable {
@JsonProperty("session_id") @JsonProperty("session_id")
private String sessionId; private String sessionId;
/**
* 首次提问
*/
@Schema(description = "首次提问")
@JsonProperty("first_question")
private String firstQuestion;
/**
* 最后一次提问
*/
@Schema(description = "最后提问")
@JsonProperty("last_question")
private String lastQuestion;
/** /**
* 创建时间 * 创建时间
*/ */
......
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class UserChatCompletionHistoryMobileDto implements Serializable {
@Schema(description = "会话历史ID")
private Integer id;
/**
* 会话ID
*/
@Schema(description = "会话记录ID")
@JsonProperty("chat_completion_id")
private Integer chatCompletionId;
/**
* 类型(0用户提问 1AI回答)
*/
@Schema(description = "类型(0用户提问 1AI回答)")
private Integer type;
/**
* 内容
*/
@Schema(description = "内容")
private String content;
/**
* 创建时间
*/
@Schema(description = "创建时间")
@JsonProperty("create_time")
private Date createTime;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class UserChatCompletionMobileDto implements Serializable {
@Schema(description = "会话记录ID")
private Integer id;
/**
* 内容
*/
@Schema(description = "内容")
private String content;
/**
* 创建时间
*/
@Schema(description = "创建时间")
@JsonProperty("create_time")
private Date createTime;
}
package cn.breeze.elleai.application.service; package cn.breeze.elleai.application.service;
import cn.breeze.elleai.application.dto.PageResult; import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.QaAssistantRequestDto; import cn.breeze.elleai.application.dto.request.*;
import cn.breeze.elleai.application.dto.request.QaAssistantSaveDto; import cn.breeze.elleai.application.dto.response.*;
import cn.breeze.elleai.application.dto.request.UserQaHistoryRequestDto;
import cn.breeze.elleai.application.dto.request.UserQaRequestDto;
import cn.breeze.elleai.application.dto.response.QaAssistantDto;
import cn.breeze.elleai.application.dto.response.UserChatCompletionDto;
import cn.breeze.elleai.application.dto.response.UserChatCompletionHistoryDto;
import cn.breeze.elleai.domain.sparring.model.request.QaAssistantRequestModel; import cn.breeze.elleai.domain.sparring.model.request.QaAssistantRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.QaAssistantSaveModel; import cn.breeze.elleai.domain.sparring.model.request.QaAssistantSaveModel;
import cn.breeze.elleai.domain.sparring.model.request.UserQaHistoryRequestModel; import cn.breeze.elleai.domain.sparring.model.request.UserQaHistoryRequestModel;
...@@ -16,6 +11,7 @@ import cn.breeze.elleai.domain.sparring.model.response.QaAssistantResponseModel; ...@@ -16,6 +11,7 @@ import cn.breeze.elleai.domain.sparring.model.response.QaAssistantResponseModel;
import cn.breeze.elleai.domain.sparring.model.response.UserChatCompletionHistoryResponseModel; import cn.breeze.elleai.domain.sparring.model.response.UserChatCompletionHistoryResponseModel;
import cn.breeze.elleai.domain.sparring.model.response.UserChatCompletionResponseModel; import cn.breeze.elleai.domain.sparring.model.response.UserChatCompletionResponseModel;
import cn.breeze.elleai.domain.sparring.service.ChatCompletionService; import cn.breeze.elleai.domain.sparring.service.ChatCompletionService;
import cn.breeze.elleai.util.UserPrincipal;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -30,10 +26,7 @@ import org.springframework.http.ResponseEntity; ...@@ -30,10 +26,7 @@ import org.springframework.http.ResponseEntity;
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.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -200,21 +193,23 @@ public class AppChatCompletionService { ...@@ -200,21 +193,23 @@ public class AppChatCompletionService {
* @param request * @param request
* @return * @return
*/ */
public List<UserChatCompletionDto> userQaList(UserQaRequestDto request) { public PageResult<UserChatCompletionDto> userQaMobilePaginQuery(UserQaRequestDto request) {
List<UserChatCompletionDto> resultList = new ArrayList<>();
UserQaRequestModel requestModel = BeanUtil.copyProperties(request, UserQaRequestModel.class); UserQaRequestModel requestModel = BeanUtil.copyProperties(request, UserQaRequestModel.class);
List<UserChatCompletionResponseModel> models = chatCompletionService.userQaList(requestModel); Page<UserChatCompletionResponseModel> page = chatCompletionService.userQaPaginQuery(requestModel);
if(CollectionUtil.isNotEmpty(models)) {
resultList = models.stream().map(v -> { PageResult<UserChatCompletionDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<UserChatCompletionDto> dtoList = page.getRecords().stream().map(v -> {
UserChatCompletionDto dto = BeanUtil.copyProperties(v, UserChatCompletionDto.class); UserChatCompletionDto dto = BeanUtil.copyProperties(v, UserChatCompletionDto.class);
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
}
return resultList; pageResult.setItems(dtoList);
}
return pageResult;
} }
/** /**
...@@ -222,33 +217,28 @@ public class AppChatCompletionService { ...@@ -222,33 +217,28 @@ public class AppChatCompletionService {
* @param request * @param request
* @return * @return
*/ */
public PageResult<UserChatCompletionHistoryDto> userQaHistoryPaginQuery(UserQaHistoryRequestDto request) { public PageResult<UserChatCompletionMobileDto> userQaHistoryPaginQuery(UserPrincipal userPrincipal, UserQaHistoryRequestDto request) {
UserQaRequestDto req = new UserQaRequestDto(); UserQaRequestDto req = new UserQaRequestDto();
req.setUserId(request.getUserId()); req.setUserId(userPrincipal.getUserId());
List<UserChatCompletionDto> chatCompletionDtos = this.userQaList(req);
if(CollectionUtil.isNotEmpty(chatCompletionDtos)) { PageResult<UserChatCompletionDto> userChatCompletionPageResult = userQaMobilePaginQuery(req);
List<Integer> idList = chatCompletionDtos.stream().map(UserChatCompletionDto::getId).collect(Collectors.toList());
PageResult<UserChatCompletionMobileDto> pageResult = PageResult.of(userChatCompletionPageResult.getPageNo(), userChatCompletionPageResult.getPageSize(), userChatCompletionPageResult.getTotal(), null);
UserQaHistoryRequestModel requestModel = BeanUtil.copyProperties(request, UserQaHistoryRequestModel.class);
requestModel.setChatCompletionIdList(idList); if(Objects.nonNull(userChatCompletionPageResult) && CollectionUtil.isNotEmpty(userChatCompletionPageResult.getItems())) {
requestModel.setType(0);
Page<UserChatCompletionHistoryResponseModel> page = chatCompletionService.userQaHistoryPaginQuery(requestModel); List<UserChatCompletionMobileDto> items = userChatCompletionPageResult.getItems().stream().map(v -> {
UserChatCompletionMobileDto dto = BeanUtil.copyProperties(v, UserChatCompletionMobileDto.class);
PageResult<UserChatCompletionHistoryDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null); dto.setContent(v.getFirstQuestion());
return dto;
if(CollectionUtil.isNotEmpty(page.getRecords())) { }).collect(Collectors.toList());
List<UserChatCompletionHistoryDto> dtoList = page.getRecords().stream().map(v -> {
UserChatCompletionHistoryDto dto = BeanUtil.copyProperties(v, UserChatCompletionHistoryDto.class); BeanUtil.copyProperties(userChatCompletionPageResult, pageResult);
return dto; pageResult.setItems(items);
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
} }
return null; return pageResult;
} }
/** /**
...@@ -256,17 +246,20 @@ public class AppChatCompletionService { ...@@ -256,17 +246,20 @@ public class AppChatCompletionService {
* @param request * @param request
* @return * @return
*/ */
public String userAsk(UserQaHistoryRequestDto request) { public UserAskResultMobileDto userAsk(UserPrincipal userPrincipal, UserQaMobileRequestDto request) {
//TODO 生成sessionId //TODO 生成sessionId
UserAskResultMobileDto result = new UserAskResultMobileDto();
result.setChatCompletionId(1);
result.setReplyContent("moke ai reply.");
// 更新问答记录 // 更新问答记录
Integer recordId = chatCompletionService.saveUserQaSession(request.getUserId(), request.getSessionId()); // Integer recordId = chatCompletionService.saveUserQaSession(request.getUserId(), request.getSessionId());
//
// 保存问答详情 // // 保存问答详情
String content = request.getContent(); // String content = request.getContent();
chatCompletionService.saveUserQaRecord(recordId, 0, content); // chatCompletionService.saveUserQaRecord(recordId, 0, content);
//
return ask4Knowledge(request.getSessionId(), request.getUserId(), content); // return ask4Knowledge(request.getSessionId(), request.getUserId(), content);
return result;
} }
......
...@@ -7,6 +7,7 @@ import cn.breeze.elleai.application.dto.response.*; ...@@ -7,6 +7,7 @@ import cn.breeze.elleai.application.dto.response.*;
import cn.breeze.elleai.domain.sparring.model.request.*; import cn.breeze.elleai.domain.sparring.model.request.*;
import cn.breeze.elleai.domain.sparring.model.response.*; import cn.breeze.elleai.domain.sparring.model.response.*;
import cn.breeze.elleai.domain.sparring.service.ExamineService; import cn.breeze.elleai.domain.sparring.service.ExamineService;
import cn.breeze.elleai.util.UserPrincipal;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
...@@ -138,25 +139,18 @@ public class AppExamineService { ...@@ -138,25 +139,18 @@ public class AppExamineService {
* @param request * @param request
* @return * @return
*/ */
public PageResult<ExamineSceneCategoryDto> examineSceneCategoryMobilePaginQuery(ExamineSceneCategoryRequestDto request) { public PageResult<ExamineSceneCategoryMobileDto> examineSceneCategoryMobilePaginQuery(ExamineSceneCategoryRequestDto request) {
ExamineSceneCategoryRequestModel requestModel = BeanUtil.copyProperties(request, ExamineSceneCategoryRequestModel.class); ExamineSceneCategoryRequestModel requestModel = BeanUtil.copyProperties(request, ExamineSceneCategoryRequestModel.class);
requestModel.setStatus(1); requestModel.setStatus(1);
Page<ExamineSceneCategoryResponseModel> page = examineService.sceneCategoryPaginQuery(requestModel); Page<ExamineSceneCategoryResponseModel> page = examineService.sceneCategoryPaginQuery(requestModel);
PageResult<ExamineSceneCategoryDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null); PageResult<ExamineSceneCategoryMobileDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) { if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ExamineSceneCategoryDto> dtoList = page.getRecords().stream().map(v -> { List<ExamineSceneCategoryMobileDto> dtoList = page.getRecords().stream().map(v -> {
ExamineSceneCategoryDto dto = BeanUtil.copyProperties(v, ExamineSceneCategoryDto.class); ExamineSceneCategoryMobileDto dto = BeanUtil.copyProperties(v, ExamineSceneCategoryMobileDto.class);
if(Objects.nonNull(dto.getSceneId())) {
ExamineSceneResponseModel sceneResponseModel = examineService.sceneDetail(dto.getSceneId());
if(Objects.nonNull(sceneResponseModel)) {
dto.setSceneName(sceneResponseModel.getName());
}
}
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
...@@ -264,7 +258,7 @@ public class AppExamineService { ...@@ -264,7 +258,7 @@ public class AppExamineService {
* @param request * @param request
* @return * @return
*/ */
public PageResult<ExamineSceneDto> examineMobileScenePaginQuery(ExamineSceneRequestDto request) { public PageResult<ExamineSceneMobileDto> examineMobileScenePaginQuery(ExamineSceneMobileRequestDto request) {
ExamineSceneRequestModel requestModel = BeanUtil.copyProperties(request, ExamineSceneRequestModel.class); ExamineSceneRequestModel requestModel = BeanUtil.copyProperties(request, ExamineSceneRequestModel.class);
// 移动端默认查询启用状态 // 移动端默认查询启用状态
...@@ -272,11 +266,11 @@ public class AppExamineService { ...@@ -272,11 +266,11 @@ public class AppExamineService {
Page<ExamineSceneResponseModel> page = examineService.scenePaginQuery(requestModel); Page<ExamineSceneResponseModel> page = examineService.scenePaginQuery(requestModel);
PageResult<ExamineSceneDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null); PageResult<ExamineSceneMobileDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) { if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ExamineSceneDto> dtoList = page.getRecords().stream().map(v -> { List<ExamineSceneMobileDto> dtoList = page.getRecords().stream().map(v -> {
ExamineSceneDto dto = BeanUtil.copyProperties(v, ExamineSceneDto.class); ExamineSceneMobileDto dto = BeanUtil.copyProperties(v, ExamineSceneMobileDto.class);
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
...@@ -593,9 +587,6 @@ public class AppExamineService { ...@@ -593,9 +587,6 @@ public class AppExamineService {
List<ExamineMobileDto> dtoList = page.getRecords().stream().map(v -> { List<ExamineMobileDto> dtoList = page.getRecords().stream().map(v -> {
ExamineMobileDto dto = BeanUtil.copyProperties(v, ExamineMobileDto.class); ExamineMobileDto dto = BeanUtil.copyProperties(v, ExamineMobileDto.class);
dto.setStartTime(v.getStartTime().getTime());
dto.setEndTime(v.getEndTime().getTime());
// 已考人数 // 已考人数
long examCount = 0; long examCount = 0;
ExamineRecordRequestModel req = new ExamineRecordRequestModel(); ExamineRecordRequestModel req = new ExamineRecordRequestModel();
...@@ -639,7 +630,7 @@ public class AppExamineService { ...@@ -639,7 +630,7 @@ public class AppExamineService {
* @param request * @param request
* @return * @return
*/ */
public PageResult<ExamineRecordMobileDto> examineRecordMobilePaginQuery(ExamineRecordRequestDto request) { public PageResult<ExamineRecordMobileDto> examineRecordMobilePaginQuery(ExamineRecordMobileRequestDto request) {
ExamineRecordRequestModel requestModel = BeanUtil.copyProperties(request, ExamineRecordRequestModel.class); ExamineRecordRequestModel requestModel = BeanUtil.copyProperties(request, ExamineRecordRequestModel.class);
...@@ -928,24 +919,31 @@ public class AppExamineService { ...@@ -928,24 +919,31 @@ public class AppExamineService {
* @param examineMode * @param examineMode
* @return * @return
*/ */
public ExamineQaDifyDto getQuestion(Integer examineId, String userId, Integer examineMode) { public ExamineStartResultDto startExamine(UserPrincipal userPrincipal, StartExamineMobileRequestDto request) {
// 获取缓存考试会话信息 ExamineStartResultDto result = new ExamineStartResultDto();
String examSessionKey = String.format(EXAM_REDIS_SESSION_KEY, examineId, examineMode, userId);
String sessionId = redisTemplate.opsForValue().get(examSessionKey);
if(StrUtil.isEmptyIfStr(sessionId)) {
// 生成sessionId
sessionId = UUID.randomUUID().toString();
redisTemplate.opsForValue().set(examSessionKey, sessionId, 1, TimeUnit.DAYS);
}
// 获取缓存考题信息 result.setBusinessNo(UUID.randomUUID().toString());
String questionKey = String.format(EXAM_REDIS_QUESTION_KEY, examineId, examineMode, userId, sessionId); result.setQuestionId(1);
result.setQuestion("请问毛巾都是干净的嘛?");
result.setAnswer("是的");
result.setNext(true);
ExamineQaDifyDto result = new ExamineQaDifyDto(); // // 获取缓存考试会话信息
// String examSessionKey = String.format(EXAM_REDIS_SESSION_KEY, examineId, examineMode, userId);
ExamineQaRequestModel req = null; // String sessionId = redisTemplate.opsForValue().get(examSessionKey);
examineService.examineQaList(req); // if(StrUtil.isEmptyIfStr(sessionId)) {
// // 生成sessionId
// sessionId = UUID.randomUUID().toString();
// redisTemplate.opsForValue().set(examSessionKey, sessionId, 1, TimeUnit.DAYS);
// }
//
// // 获取缓存考题信息
// String questionKey = String.format(EXAM_REDIS_QUESTION_KEY, examineId, examineMode, userId, sessionId);
//
//
// ExamineQaRequestModel req = null;
// examineService.examineQaList(req);
// // 根据分类获取考题 // // 根据分类获取考题
// ExamineResponseModel model = examineService.examineDetail(examineId); // ExamineResponseModel model = examineService.examineDetail(examineId);
......
...@@ -3,22 +3,22 @@ package cn.breeze.elleai.controller.front; ...@@ -3,22 +3,22 @@ package cn.breeze.elleai.controller.front;
import cn.breeze.elleai.application.dto.ApiResponse; import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult; import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.QaAssistantRequestDto; import cn.breeze.elleai.application.dto.request.*;
import cn.breeze.elleai.application.dto.request.UserQaHistoryRequestDto; import cn.breeze.elleai.application.dto.response.*;
import cn.breeze.elleai.application.dto.response.HotQaMobileDto;
import cn.breeze.elleai.application.dto.response.QaAssistantDto;
import cn.breeze.elleai.application.dto.response.UserChatCompletionHistoryDto;
import cn.breeze.elleai.application.service.AppChatCompletionService; import cn.breeze.elleai.application.service.AppChatCompletionService;
import cn.breeze.elleai.config.QueryParam; import cn.breeze.elleai.config.QueryParam;
import cn.breeze.elleai.util.UserPrincipal;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
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.*; import org.springframework.web.bind.annotation.*;
@RestController @RestController
@RequestMapping(value = "/front/chat") @RequestMapping(value = "/front/chat")
@Tag(name = "AI问答移动端") @Tag(name = "移动端-AI问答")
@RequiredArgsConstructor @RequiredArgsConstructor
public class ChatCompletionMobileController { public class ChatCompletionMobileController {
...@@ -42,25 +42,35 @@ public class ChatCompletionMobileController { ...@@ -42,25 +42,35 @@ public class ChatCompletionMobileController {
@Operation(summary = "历史对话") @Operation(summary = "历史对话")
@GetMapping("/history") @GetMapping("/history")
public ApiResponse<PageResult<UserChatCompletionHistoryDto>> history(@RequestParam("user_id") String userId, public ApiResponse<PageResult<UserChatCompletionMobileDto>> history(@Parameter(hidden = true) UserPrincipal userPrincipal,
@QueryParam UserQaHistoryRequestDto request) { @QueryParam UserQaHistoryRequestDto request) {
request.setUserId(userId);
PageResult<UserChatCompletionHistoryDto> pageResult = chatCompletionService.userQaHistoryPaginQuery(request); PageResult<UserChatCompletionMobileDto> pageResult = chatCompletionService.userQaHistoryPaginQuery(userPrincipal, request);
return ApiResponse.ok(pageResult); return ApiResponse.ok(pageResult);
} }
@Operation(summary = "用户提问") @Operation(summary = "用户提问")
@PostMapping("/ask") @PostMapping("/ask")
public ApiResponse<String> ask(@RequestParam("user_id") String userId, public ApiResponse<UserAskResultMobileDto> ask(@Parameter(hidden = true) UserPrincipal userPrincipal,
@RequestBody UserQaHistoryRequestDto request) { @RequestBody UserQaMobileRequestDto request) {
request.setUserId(userId); UserAskResultMobileDto result = chatCompletionService.userAsk(userPrincipal, request);
String aiReply = chatCompletionService.userAsk(request); return ApiResponse.ok(result);
return ApiResponse.ok(aiReply);
} }
@Operation(summary = "开启新会话") @Operation(summary = "切换助手")
@PostMapping("/new") @PostMapping("/assistant/switch")
public ApiResponse<String> newChatCompletion(@RequestParam("user_id") String userId) { public ApiResponse<String> switchAssistant(@Parameter(hidden = true) UserPrincipal userPrincipal,
@RequestBody SwitchAssistantMobileRequestDto request) {
return ApiResponse.ok("ok"); return ApiResponse.ok("ok");
} }
@Operation(summary = "开启新会话,返回新会话ID")
@PostMapping("/new_completion")
public ApiResponse<NewCompletionResultMobileDto> newChatCompletion(@Parameter(hidden = true) UserPrincipal userPrincipal) {
NewCompletionResultMobileDto result = new NewCompletionResultMobileDto();
result.setChatCompletionId(1);
return ApiResponse.ok(result);
}
} }
...@@ -19,6 +19,21 @@ public class ExamineRecordResponseModel implements Serializable { ...@@ -19,6 +19,21 @@ public class ExamineRecordResponseModel implements Serializable {
*/ */
private String userId; private String userId;
/**
* 用户名称
*/
private String userName;
/**
* 所属门店ID
*/
private String shopId;
/**
* 所属门店名称
*/
private String shopName;
/** /**
* 会话ID * 会话ID
*/ */
......
...@@ -16,11 +16,36 @@ public class UserChatCompletionResponseModel implements Serializable { ...@@ -16,11 +16,36 @@ public class UserChatCompletionResponseModel implements Serializable {
*/ */
private String userId; private String userId;
/**
* 用户名称
*/
private String userName;
/**
* 所属门店ID
*/
private String shopId;
/**
* 所属门店名称
*/
private String shopName;
/** /**
* 会话ID * 会话ID
*/ */
private String sessionId; private String sessionId;
/**
* 首次提问时间
*/
private String firstQuestion;
/**
* 最后一次提问
*/
private String lastQuestion;
/** /**
* 创建时间 * 创建时间
*/ */
......
...@@ -52,6 +52,7 @@ public class ChatCompletionServiceImpl implements ChatCompletionService{ ...@@ -52,6 +52,7 @@ public class ChatCompletionServiceImpl implements ChatCompletionService{
if(StrUtil.isNotEmpty(request.getUserId())) { if(StrUtil.isNotEmpty(request.getUserId())) {
queryWrapper.where(USER_CHAT_COMPLETION_ENTITY.USER_ID.eq(request.getUserId())); queryWrapper.where(USER_CHAT_COMPLETION_ENTITY.USER_ID.eq(request.getUserId()));
} }
queryWrapper.orderBy(USER_CHAT_COMPLETION_ENTITY.CREATE_TIME, false);
Page<UserChatCompletionResponseModel> page = chatCompletionMapper.paginateAs(pageNo, pageSize, queryWrapper, UserChatCompletionResponseModel.class); Page<UserChatCompletionResponseModel> page = chatCompletionMapper.paginateAs(pageNo, pageSize, queryWrapper, UserChatCompletionResponseModel.class);
......
...@@ -37,11 +37,36 @@ public class UserChatCompletionEntity implements Serializable { ...@@ -37,11 +37,36 @@ public class UserChatCompletionEntity implements Serializable {
*/ */
private String userId; private String userId;
/**
* 用户名称
*/
private String userName;
/**
* 所属门店ID
*/
private String shopId;
/**
* 所属门店名称
*/
private String shopName;
/** /**
* 会话ID * 会话ID
*/ */
private String sessionId; private String sessionId;
/**
* 首次提问时间
*/
private String firstQuestion;
/**
* 最后一次提问
*/
private String lastQuestion;
/** /**
* 创建时间 * 创建时间
*/ */
......
...@@ -37,6 +37,21 @@ public class UserExamineRecordEntity implements Serializable { ...@@ -37,6 +37,21 @@ public class UserExamineRecordEntity implements Serializable {
*/ */
private String userId; private String userId;
/**
* 用户名称
*/
private String userName;
/**
* 所属门店ID
*/
private String shopId;
/**
* 所属门店名称
*/
private String shopName;
/** /**
* 会话ID * 会话ID
*/ */
......
...@@ -34,6 +34,21 @@ public class UserChatCompletionTableDef extends TableDef { ...@@ -34,6 +34,21 @@ public class UserChatCompletionTableDef extends TableDef {
*/ */
public final QueryColumn USER_ID = new QueryColumn(this, "user_id"); public final QueryColumn USER_ID = new QueryColumn(this, "user_id");
/**
* 用户名称
*/
public final QueryColumn USER_NAME = new QueryColumn(this, "user_name");
/**
* 所属门店ID
*/
public final QueryColumn SHOP_ID = new QueryColumn(this, "shop_id");
/**
* 所属门店名称
*/
public final QueryColumn SHOP_NAME = new QueryColumn(this, "shop_name");
/** /**
* DIFY会话ID * DIFY会话ID
*/ */
...@@ -62,7 +77,7 @@ public class UserChatCompletionTableDef extends TableDef { ...@@ -62,7 +77,7 @@ public class UserChatCompletionTableDef extends TableDef {
/** /**
* 默认字段,不包含逻辑删除或者 large 等字段。 * 默认字段,不包含逻辑删除或者 large 等字段。
*/ */
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, USER_ID, SESSION_ID, TYPE, CONTENT, CREATE_TIME, UPDATE_TIME}; public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, USER_ID, USER_NAME, SHOP_ID, SHOP_NAME, SESSION_ID, TYPE, CONTENT, CREATE_TIME, UPDATE_TIME};
public UserChatCompletionTableDef() { public UserChatCompletionTableDef() {
super("", "ai_user_chat_completion"); super("", "ai_user_chat_completion");
......
...@@ -29,6 +29,21 @@ public class UserExamineRecordTableDef extends TableDef { ...@@ -29,6 +29,21 @@ public class UserExamineRecordTableDef extends TableDef {
*/ */
public final QueryColumn USER_ID = new QueryColumn(this, "user_id"); public final QueryColumn USER_ID = new QueryColumn(this, "user_id");
/**
* 用户名称
*/
public final QueryColumn USER_NAME = new QueryColumn(this, "user_name");
/**
* 所属门店ID
*/
public final QueryColumn SHOP_ID = new QueryColumn(this, "shop_id");
/**
* 所属门店名称
*/
public final QueryColumn SHOP_NAME = new QueryColumn(this, "shop_name");
/** /**
* 对练ID * 对练ID
*/ */
...@@ -77,7 +92,7 @@ public class UserExamineRecordTableDef extends TableDef { ...@@ -77,7 +92,7 @@ public class UserExamineRecordTableDef extends TableDef {
/** /**
* 默认字段,不包含逻辑删除或者 large 等字段。 * 默认字段,不包含逻辑删除或者 large 等字段。
*/ */
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, USER_ID, SESSION_ID, EXAMINE_ID, EXAMINE_MODE, ANSWERED_NUM, OVERALL_SCORE, OVERALL_EVALUATION, CREATE_TIME, UPDATE_TIME}; public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, USER_ID, USER_NAME, SHOP_ID, SHOP_NAME, SESSION_ID, EXAMINE_ID, EXAMINE_MODE, ANSWERED_NUM, OVERALL_SCORE, OVERALL_EVALUATION, CREATE_TIME, UPDATE_TIME};
public UserExamineRecordTableDef() { public UserExamineRecordTableDef() {
super("", "ai_user_examine_record"); super("", "ai_user_examine_record");
......
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