Commit abfd9ebe authored by 陈立彬's avatar 陈立彬

业务代码

parent bbcf2ffc
...@@ -65,6 +65,33 @@ ...@@ -65,6 +65,33 @@
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.20</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.32</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package cn.breeze.elleai;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Swagger2Config {
@Bean
public OpenAPI openAPI() {
return new OpenAPI().addSecurityItem(new SecurityRequirement().
addList("Bearer Authentication"))
.components(new Components().addSecuritySchemes
("Bearer Authentication", createAPIKeyScheme()))
.info(new Info().title("Scaffold API")
.description("description of Scaffold API.")
.version("1.0").contact(new Contact().name("yunzhiliu")
.email("1360194505@qq.com").url("salloszraj@gmail.com"))
.license(new License().name("License of API")
.url("API license URL")));
}
private SecurityScheme createAPIKeyScheme() {
return new SecurityScheme().type(SecurityScheme.Type.HTTP)
.bearerFormat("JWT")
.scheme("bearer");
}
}
package cn.breeze.elleai.application.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
/**
* 应用层的API响应包装类
* @author Administrator
*/
@Data
@Schema(description = "API响应包装类")
public class ApiResponse <T> implements Serializable {
@Schema(description = "响应是否成功标志")
private boolean success = true;
@Schema(description = "响应结果")
private T result;
@Schema(description = "状态码,0成功,其他失败")
private Integer code = 0;
@Schema(description = "错误内容")
private String message;
/**
* 成功响应
* @param result
* @return
* @param <T>
*/
public final static <T> ApiResponse<T> ok(T result) {
ApiResponse<T> response = new ApiResponse<>();
response.setSuccess(true);
response.setCode(0);
response.setMessage("成功");
response.setResult(result);
return response;
}
/**
* 失败响应
* @param code
* @param message
* @return
* @param <T>
*/
public final static <T> ApiResponse<T> fail(Integer code, String message) {
ApiResponse<T> response = new ApiResponse<>();
response.setMessage(message);
response.setCode(code);
response.setSuccess(false);
response.setResult(null);
return response;
}
}
package cn.breeze.elleai.application.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class PageResult<T> implements Serializable {
@Schema(description = "记录")
private List<T> items;
@Schema(description = "总数量")
private Integer total;
@Schema(description = "总页数")
private Integer totalPage;
@Schema(description = "页码")
private Integer pageNo;
@Schema(description = "分页大小")
private Integer pageSize;
/**
* 构造
* @param pageNo
* @param pageSize
* @param total
* @param items
* @param <T>
* @return
*/
public final static <T> PageResult<T> of(Integer pageNo, Integer pageSize, Integer total, List<T> items) {
PageResult<T> pageResult = new PageResult<>();
pageResult.setPageNo(pageNo);
pageResult.setPageSize(pageSize);
pageResult.setItems(items);
pageResult.setTotal(total);
pageResult.setTotalPage(total/pageSize + 1);
return pageResult;
}
}
package cn.breeze.elleai.application.dto.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExamineQaRequestDto implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineQaSaveDto implements Serializable {
private Integer id;
/**
* 问题
*/
private String question;
/**
* 答案
*/
private String answer;
/**
* 对练分类ID
*/
@JsonProperty("category_id")
private Integer categoryId;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
}
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 ExamineRecordRequestDto implements Serializable {
@JsonProperty("page_no")
private Integer pageNo;
@JsonProperty("page_size")
private Integer pageSize;
@JsonProperty("user_id")
private String userId;
@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 java.io.Serializable;
@Data
public class ExamineRequestDto implements Serializable {
@JsonProperty("page_no")
private Integer pageNo;
@JsonProperty("page_size")
private Integer pageSize;
private String name;
private Integer status;
@Schema(description = "场景分类ID")
@JsonProperty("category_id")
private Integer categoryId;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class ExamineSaveDto implements Serializable {
private Integer id;
/**
* 对练名称
*/
private String name;
/**
* 对练描述
*/
private String description;
/**
* 海报图
*/
private String poster;
/**
* 对练场景ID
*/
@JsonProperty("scene_id")
private Integer sceneId;
/**
* 对练分类ID
*/
@JsonProperty("category_id")
private Integer categoryId;
/**
* 开始时间
*/
@JsonProperty("start_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private LocalDateTime startTime;
/**
* 结束时间
*/
@JsonProperty("end_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private LocalDateTime endTime;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 题目数量
*/
@JsonProperty("qa_num")
private Integer qaNum;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 关联题目ID列表
*/
@JsonProperty("qa_id_list")
private List<Integer> qaIdList;
}
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 ExamineSceneCategoryRequestDto implements Serializable {
@JsonProperty("page_no")
private Integer pageNo;
@JsonProperty("page_size")
private Integer pageSize;
private String name;
private Integer status;
@Schema(description = "场景ID")
@JsonProperty("scene_id")
private Integer sceneId;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineSceneCategorySaveDto implements Serializable {
private Integer id;
/**
* 分类名称
*/
private String name;
/**
* 场景ID描述
*/
@JsonProperty("scene_id")
private Integer sceneId;
/**
* 可见角色IDS
*/
@JsonProperty("visible_role_ids")
private String visibleRoleIds;
/**
* 分类描述
*/
private String description;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 父级分类ID
*/
@JsonProperty("parent_id")
private Integer parentId;
}
package cn.breeze.elleai.application.dto.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExamineSceneRequestDto implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
private Integer status;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineSceneSaveDto implements Serializable {
private Integer id;
/**
* 场景名称
*/
private String name;
/**
* 场景描述
*/
private String description;
/**
* 场景海报图
*/
private String poster;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
}
package cn.breeze.elleai.application.dto.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class ProperNounRequestDto implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ProperNounSaveDto implements Serializable {
private Integer id;
/**
* 专有名词名称
*/
private String name;
/**
* 相似词,以逗号分隔
*/
@JsonProperty("similar_words")
private String similarWords;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
}
package cn.breeze.elleai.application.dto.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class QaAssistantRequestDto implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class QaAssistantSaveDto implements Serializable {
private Integer id;
/**
* 助手名称
*/
private String name;
/**
* 助手描述
*/
private String description;
/**
* 助手图标
*/
@JsonProperty("icon_url")
private String iconUrl;
/**
* 知识库分类IDS,以逗号分隔
*/
@JsonProperty("category_ids")
private String categoryIds;
/**
* 可见角色IDS,以逗号分隔
*/
@JsonProperty("visible_role_ids")
private String visibleRoleIds;
}
package cn.breeze.elleai.application.dto.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class UserQaHistoryRequestDto implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String userId;
private Integer type;
private String sessionId;
private String content;
private Integer chatCompletionId;
}
package cn.breeze.elleai.application.dto.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class UserQaRequestDto implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
private String userId;
}
package cn.breeze.elleai.application.dto.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class WikiCategoryRequestDto implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class WikiCategorySaveDto implements Serializable {
private Integer id;
/**
* 分类名称
*/
private String name;
/**
* 分类描述
*/
private String description;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 父级分类ID
*/
@JsonProperty("parent_id")
private Integer parentId;
}
package cn.breeze.elleai.application.dto.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class WikiRequestDto implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
}
package cn.breeze.elleai.application.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import lombok.Data;
import java.io.Serializable;
@Data
public class WikiSaveDto implements Serializable {
private Integer id;
/**
* 资料名称
*/
private String name;
/**
* 资料描述
*/
private String description;
/**
* 资料海报图
*/
private String poster;
/**
* 资料文件URL
*/
@JsonProperty("file_url")
private String fileUrl;
/**
* 资料分类ID
*/
@JsonProperty("wiki_category_id")
private Integer wikiCategoryId;
/**
* 场景分类ID
*/
@JsonProperty("scene_category_id")
private Integer sceneCategoryId;
/**
* 富文本详情
*/
private String detail;
}
package cn.breeze.elleai.application.dto.response;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineDetailRecordMobileDto implements Serializable {
private Integer id;
/**
* 对练记录ID
*/
private Integer recordId;
/**
* 题目ID
*/
private Integer qaId;
/**
* 题目
*/
private String question;
/**
* 标准答案
*/
private String answer;
/**
* 员工答案
*/
private String userAnswer;
/**
* 评分
*/
private Float score;
/**
* 评价
*/
private String evaluation;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.application.dto.response;
import cn.breeze.elleai.domain.sparring.model.response.ExamineQaResponseModel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class ExamineDto implements Serializable {
private Integer id;
/**
* 对练名称
*/
private String name;
/**
* 对练描述
*/
private String description;
/**
* 海报图
*/
private String poster;
/**
* 对练场景ID
*/
private Integer sceneId;
/**
* 对练分类ID
*/
private Integer categoryId;
/**
* 开始时间
*/
private Long startTime;
/**
* 结束时间
*/
private Long endTime;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 题目数量
*/
private Integer qaNum;
/**
* 关联题目列表
*/
private List<ExamineQaResponseModel> qaList;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExamineMobileDto implements Serializable {
private Integer id;
/**
* 对练名称
*/
private String name;
/**
* 对练描述
*/
private String description;
/**
* 海报图
*/
private String poster;
/**
* 对练场景ID
*/
private Integer sceneId;
/**
* 对练分类ID
*/
private Integer categoryId;
/**
* 开始时间
*/
private Long startTime;
/**
* 结束时间
*/
private Long endTime;
/**
* 题目数量
*/
private Integer qaNum;
/**
* 已考试次数
*/
@JsonProperty("exam_total_count")
private long examTotalCount;
/**
* 是否参与考试
*/
@JsonProperty("exam_flag")
private boolean examFlag;
/**
* 练习次数
*/
@JsonProperty("practice_count")
private long practiceCount;
/**
* 对练次数
*/
@JsonProperty("exam_count")
private long examCount;
/**
* 最高综合评分
*/
@JsonProperty("max_overall_score")
private double maxOverallScore;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineQaDifyDto implements Serializable {
@JsonProperty("question_id")
private Integer questionId;
/**
* 问题
*/
private String question;
/**
* 答案
*/
private String answer;
/**
* 对练分类ID
*/
@JsonProperty("category_id")
private Integer categoryId;
/**
* 对练分类ID
*/
@JsonProperty("category_name")
private String categoryName;
/**
* 对练分类ID
*/
private String project;
/**
* 对练分类ID
*/
private String code;
/**
* dify 节点字段
*/
private boolean next;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineQaDto implements Serializable {
private Integer id;
/**
* 问题
*/
private String question;
/**
* 答案
*/
private String answer;
/**
* 对练分类ID
*/
@JsonProperty("category_id")
private Integer categoryId;
/**
* 对练分类ID
*/
@JsonProperty("category_name")
private String categoryName;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.application.dto.response;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class ExamineRecordMobileDto implements Serializable {
private Integer id;
/**
* 用户ID
*/
private String userId;
/**
* 会话ID
*/
private String sessionId;
/**
* 对练ID
*/
private Integer examineId;
private String examineName;
private String examineDescription;
/**
* 对练模式(0练习 1对练)
*/
private Integer examineMode;
/**
* 已答题数量
*/
private Integer answeredNum;
/**
* 综合评分
*/
private Float overallScore;
/**
* 综合评价
*/
private String overallEvaluation;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 答题明细
*/
private List<ExamineDetailRecordMobileDto> details;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineSceneCategoryDto implements Serializable {
private Integer id;
/**
* 分类名称
*/
private String name;
/**
* 场景ID描述
*/
@JsonProperty("scene_id")
private Integer sceneId;
/**
* 场景ID描述
*/
@JsonProperty("scene_name")
private String sceneName;
/**
* 可见角色IDS
*/
@JsonProperty("visible_role_ids")
private String visibleRoleIds;
/**
* 可见角色名称S
*/
@JsonProperty("visible_role_names")
private String visibleRoleNames;
/**
* 分类描述
*/
private String description;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
@JsonProperty("create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private LocalDateTime createTime;
/**
* 更新时间
*/
@JsonProperty("update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private LocalDateTime updateTime;
/**
* 父级分类ID
*/
@JsonProperty("parent_id")
private Integer parentId;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineSceneDto implements Serializable {
private Integer id;
/**
* 场景名称
*/
private String name;
/**
* 场景描述
*/
private String description;
/**
* 场景海报图
*/
private String poster;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
@JsonProperty("create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private LocalDateTime createTime;
/**
* 更新时间
*/
@JsonProperty("update_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private LocalDateTime updateTime;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ProperNounDto implements Serializable {
private Integer id;
/**
* 专有名词名称
*/
private String name;
/**
* 相似词,以逗号分隔
*/
@JsonProperty("similar_words")
private String similarWords;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
@JsonProperty("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@JsonProperty("update_time")
private LocalDateTime updateTime;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class QaAssistantDto implements Serializable {
private Integer id;
/**
* 助手名称
*/
private String name;
/**
* 助手描述
*/
private String description;
/**
* 助手图标
*/
@JsonProperty("icon_url")
private String iconUrl;
/**
* 知识库分类IDS,以逗号分隔
*/
@JsonProperty("category_ids")
private String categoryIds;
/**
* 可见角色IDS,以逗号分隔
*/
@JsonProperty("visible_role_ids")
private String visibleRoleIds;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
@JsonProperty("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@JsonProperty("update_time")
private LocalDateTime updateTime;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class UserChatCompletionDto implements Serializable {
private Integer id;
/**
* 用户ID
*/
@JsonProperty("user_id")
private String userId;
/**
* 会话ID
*/
@JsonProperty("session_id")
private String sessionId;
/**
* 创建时间
*/
@JsonProperty("create_time")
private LocalDateTime createTime;
/**
* 最后更新时间
*/
@JsonProperty("update_time")
private LocalDateTime updateTime;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class UserChatCompletionHistoryDto implements Serializable {
private Integer id;
/**
* 会话ID
*/
@JsonProperty("chat_completion_id")
private Integer chatCompletionId;
/**
* 类型(0用户提问 1AI回答)
*/
private Integer type;
/**
* 内容
*/
private String content;
/**
* 创建时间
*/
@JsonProperty("create_time")
private LocalDateTime createTime;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class WikiCategoryDto implements Serializable {
private Integer id;
/**
* 分类名称
*/
private String name;
/**
* 分类描述
*/
private String description;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 父级分类ID
*/
@JsonProperty("parent_id")
private Integer parentId;
/**
* 创建时间
*/
@JsonProperty("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@JsonProperty("update_time")
private LocalDateTime updateTime;
}
package cn.breeze.elleai.application.dto.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class WikiDto implements Serializable {
private Integer id;
/**
* 资料名称
*/
private String name;
/**
* 资料描述
*/
private String description;
/**
* 资料海报图
*/
private String poster;
/**
* 资料文件URL
*/
@JsonProperty("file_url")
private String fileUrl;
/**
* 资料分类ID
*/
@JsonProperty("wiki_category_id")
private Integer wikiCategoryId;
/**
* 资料分类名称
*/
@JsonProperty("wiki_category_name")
private String wikiCategoryName;
/**
* 场景分类ID
*/
@JsonProperty("scene_category_id")
private Integer sceneCategoryId;
/**
* 场景分类名称
*/
@JsonProperty("scene_category_name")
private String sceneCategoryName;
/**
* 富文本详情
*/
private String detail;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
@JsonProperty("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@JsonProperty("update_time")
private LocalDateTime updateTime;
}
package cn.breeze.elleai.application.service;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.QaAssistantRequestDto;
import cn.breeze.elleai.application.dto.request.QaAssistantSaveDto;
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.QaAssistantSaveModel;
import cn.breeze.elleai.domain.sparring.model.request.UserQaHistoryRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.UserQaRequestModel;
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.UserChatCompletionResponseModel;
import cn.breeze.elleai.domain.sparring.service.ChatCompletionService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSONObject;
import com.mybatisflex.core.paginate.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 应用服务
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class AppChatCompletionService {
@Value("${dify.api_base:https://ai-api.tech.breezeai.cn/v1}")
private String difyBase;
@Value("${dify.api_key:app-ilgoEphXjLw0I7x7fGeCyKYk}")
private String apiKey;
private final RestTemplate restTemplate = new RestTemplate();
private final ChatCompletionService chatCompletionService;
/************************************************** AI助手 **************************************************/
/**
* 更新助手
* @param id
* @param status
*/
public void updateQaAssistantStatus(Integer id, Integer status) {
chatCompletionService.updateQaAssistantStatus(id, status);
}
/**
* 删除助手
* @param id
*/
public void deleteQaAssistant(Integer id) {
chatCompletionService.deleteQaAssistant(id);
}
/**
* 获取助手详情
* @param id
* @return
*/
public QaAssistantDto qaAssistantDetail(Integer id) {
QaAssistantResponseModel model = chatCompletionService.qaAssistantDetail(id);
return BeanUtil.copyProperties(model, QaAssistantDto.class);
}
/**
* 保存助手
* @param dto
*/
public void saveQaAssistant(QaAssistantSaveDto dto) {
QaAssistantSaveModel model = BeanUtil.copyProperties(dto, QaAssistantSaveModel.class);
chatCompletionService.saveQaAssistant(model);
}
/**
* 助手分页查询
* @param request
* @return
*/
public PageResult<QaAssistantDto> qaAssistantPaginQuery(QaAssistantRequestDto request) {
QaAssistantRequestModel requestModel = BeanUtil.copyProperties(request, QaAssistantRequestModel.class);
Page<QaAssistantResponseModel> page = chatCompletionService.qaAssistantPaginQuery(requestModel);
PageResult<QaAssistantDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<QaAssistantDto> dtoList = page.getRecords().stream().map(v -> {
QaAssistantDto dto = BeanUtil.copyProperties(v, QaAssistantDto.class);
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* 助手列表查询
* @param request
* @return
*/
public List<QaAssistantDto> qaAssistantList(QaAssistantRequestDto request) {
List<QaAssistantDto> resultList = new ArrayList<>();
QaAssistantRequestModel requestModel = BeanUtil.copyProperties(request, QaAssistantRequestModel.class);
List<QaAssistantResponseModel> modelList = chatCompletionService.qaAssistantList(requestModel);
if(CollectionUtil.isNotEmpty(modelList)) {
resultList = modelList.stream().map(v -> {
QaAssistantDto dto = BeanUtil.copyProperties(v, QaAssistantDto.class);
return dto;
}).collect(Collectors.toList());
}
return resultList;
}
/************************************************** AI问答会话 **************************************************/
/**
* 获取AI问答会话详情
* @param sessionId
* @return
*/
public List<UserChatCompletionHistoryDto> userQaDetail(Integer sessionId) {
List<UserChatCompletionHistoryDto> resultList = new ArrayList<>();
List<UserChatCompletionHistoryResponseModel> models = chatCompletionService.userQaHistoryDetail(sessionId);
if(CollectionUtil.isNotEmpty(models)) {
resultList = models.stream().map(v -> {
UserChatCompletionHistoryDto dto = BeanUtil.copyProperties(v, UserChatCompletionHistoryDto.class);
return dto;
}).collect(Collectors.toList());
}
return resultList;
}
/**
* AI问答会话分页查询
* @param request
* @return
*/
public PageResult<UserChatCompletionDto> userQaPaginQuery(UserQaRequestDto request) {
UserQaRequestModel requestModel = BeanUtil.copyProperties(request, UserQaRequestModel.class);
Page<UserChatCompletionResponseModel> page = chatCompletionService.userQaPaginQuery(requestModel);
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);
//TODO 员工名称,提问信息
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* AI问答会话列表查询
* @param request
* @return
*/
public List<UserChatCompletionDto> userQaList(UserQaRequestDto request) {
List<UserChatCompletionDto> resultList = new ArrayList<>();
UserQaRequestModel requestModel = BeanUtil.copyProperties(request, UserQaRequestModel.class);
List<UserChatCompletionResponseModel> models = chatCompletionService.userQaList(requestModel);
if(CollectionUtil.isNotEmpty(models)) {
resultList = models.stream().map(v -> {
UserChatCompletionDto dto = BeanUtil.copyProperties(v, UserChatCompletionDto.class);
return dto;
}).collect(Collectors.toList());
}
return resultList;
}
/**
* AI问答会话分页查询
* @param request
* @return
*/
public PageResult<UserChatCompletionHistoryDto> userQaHistoryPaginQuery(UserQaHistoryRequestDto request) {
UserQaRequestDto req = new UserQaRequestDto();
req.setUserId(request.getUserId());
List<UserChatCompletionDto> chatCompletionDtos = this.userQaList(req);
if(CollectionUtil.isNotEmpty(chatCompletionDtos)) {
List<Integer> idList = chatCompletionDtos.stream().map(UserChatCompletionDto::getId).collect(Collectors.toList());
UserQaHistoryRequestModel requestModel = BeanUtil.copyProperties(request, UserQaHistoryRequestModel.class);
requestModel.setChatCompletionIdList(idList);
requestModel.setType(0);
Page<UserChatCompletionHistoryResponseModel> page = chatCompletionService.userQaHistoryPaginQuery(requestModel);
PageResult<UserChatCompletionHistoryDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<UserChatCompletionHistoryDto> dtoList = page.getRecords().stream().map(v -> {
UserChatCompletionHistoryDto dto = BeanUtil.copyProperties(v, UserChatCompletionHistoryDto.class);
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
return null;
}
/**
* AI问答会话分页查询
* @param request
* @return
*/
public String userAsk(UserQaHistoryRequestDto request) {
// 更新问答记录
Integer recordId = chatCompletionService.saveUserQaSession(request.getUserId(), request.getSessionId());
// 保存问答详情
String content = request.getContent();
chatCompletionService.saveUserQaRecord(recordId, 0, content);
return ask4Knowledge(request.getSessionId(), request.getUserId(), content);
}
public String ask4Knowledge(String sessionId, String userId, String question) {
if(true) {
return "moke ai reply.";
}
Map<String, String> inputs = new HashMap<>();
inputs.put("question", question);
JSONObject param = new JSONObject();
param.put("inputs", inputs);
param.put("response_mode", "blocking");
param.put("conversation_id", "");
param.put("user", userId);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth(apiKey);
log.info("异步请求参数1,sessionId = {}", sessionId);
log.info("异步请求参数2,req = {}", JSONObject.toJSONString(param));
HttpEntity<String> postEntity = new HttpEntity<>(param.toJSONString(), headers);
ResponseEntity<String> response = restTemplate.postForEntity(difyBase + "/chat-messages", postEntity, String.class);
String body = response.getBody();
log.info("执行结果:", JSONObject.parseObject(body));
return body;
}
}
package cn.breeze.elleai.application.service;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.ProperNounRequestDto;
import cn.breeze.elleai.application.dto.request.ProperNounSaveDto;
import cn.breeze.elleai.application.dto.response.ProperNounDto;
import cn.breeze.elleai.domain.sparring.model.request.ProperNounRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.ProperNounSaveModel;
import cn.breeze.elleai.domain.sparring.model.response.ProperNounResponseModel;
import cn.breeze.elleai.domain.sparring.service.CommonService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.mybatisflex.core.paginate.Page;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.stream.Collectors;
/**
* 应用服务
*/
@Component
@RequiredArgsConstructor
public class AppCommonService {
private final CommonService commonService;
/************************************************** 专有名词 **************************************************/
/**
* 更新专有名词
* @param id
* @param status
*/
public void updateProperNounStatus(Integer id, Integer status) {
commonService.updateProperNounStatus(id, status);
}
/**
* 删除专有名词
* @param id
*/
public void deleteProperNoun(Integer id) {
commonService.deleteProperNoun(id);
}
/**
* 获取专有名词详情
* @param id
* @return
*/
public ProperNounDto properNounDetail(Integer id) {
ProperNounResponseModel model = commonService.properNounDetail(id);
return BeanUtil.copyProperties(model, ProperNounDto.class);
}
/**
* 保存专有名词
* @param dto
*/
public void saveproperNoun(ProperNounSaveDto dto) {
ProperNounSaveModel model = BeanUtil.copyProperties(dto, ProperNounSaveModel.class);
commonService.saveProperNoun(model);
}
/**
* 专有名词分页查询
* @param request
* @return
*/
public PageResult<ProperNounDto> properNounPaginQuery(ProperNounRequestDto request) {
ProperNounRequestModel requestModel = BeanUtil.copyProperties(request, ProperNounRequestModel.class);
Page<ProperNounResponseModel> page = commonService.properNounPaginQuery(requestModel);
PageResult<ProperNounDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ProperNounDto> dtoList = page.getRecords().stream().map(v -> {
ProperNounDto dto = BeanUtil.copyProperties(v, ProperNounDto.class);
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
}
package cn.breeze.elleai.application.service;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.*;
import cn.breeze.elleai.application.dto.response.*;
import cn.breeze.elleai.domain.sparring.model.request.*;
import cn.breeze.elleai.domain.sparring.model.response.*;
import cn.breeze.elleai.domain.sparring.service.ExamineService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSONObject;
import com.mybatisflex.core.paginate.Page;
import io.micrometer.common.util.StringUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toMap;
/**
* 应用服务
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class AppExamineService {
private static String EXAM_REDIS_QUESTION_KEY = "EXAM_MASTER_QUESTION:%s:%s";
private static String EXAM_REDIS_SESSION_KEY = "EXAM_MASTER_SESSION:%d:%s";
private static String EXAM_REDIS_CAS_KEY = "EXAM_MASTER_CURRENT_AI_SCORE:%d:%s";
private static String USER_SESSION_CONTEXT_KEY = "USER_SESSION_CONTEXT:%d:%s:%s";
private static String USER_SESSION_CONTEXT_COUNT = "USER_SESSION_CONTEXT_COUNT";
private final ExamineService examineService;
private final StringRedisTemplate redisTemplate;
/************************************************** 场景分类 **************************************************/
/**
* 更新场景分类状态
* @param id
* @param status
*/
public void updateSceneCategoryStatus(Integer id, Integer status) {
examineService.updateSceneCategoryStatus(id, status);
}
/**
* 删除场景分类
* @param id
*/
public void deleteSceneCategory(Integer id) {
examineService.deleteSceneCategory(id);
}
/**
* 获取场景分类详情
* @param id
* @return
*/
public ExamineSceneCategoryDto sceneCategoryDetail(Integer id) {
ExamineSceneCategoryResponseModel model = examineService.sceneCategoryDetail(id);
return BeanUtil.copyProperties(model, ExamineSceneCategoryDto.class);
}
/**
* 保存场景分类
* @param dto
*/
public void saveExamineSceneCategory(ExamineSceneCategorySaveDto dto) {
Assert.notNull(dto.getSceneId(), "场景ID不能为空");
ExamineSceneResponseModel scene = examineService.sceneDetail(dto.getSceneId());
Assert.notNull(scene, "场景信息获取异常");
ExamineSceneCategorySaveModel model = BeanUtil.copyProperties(dto, ExamineSceneCategorySaveModel.class);
examineService.saveSceneCategory(model);
}
/**
* 场景分类分页查询
* @param request
* @return
*/
public PageResult<ExamineSceneCategoryDto> examineSceneCategoryPaginQuery(ExamineSceneCategoryRequestDto request) {
ExamineSceneCategoryRequestModel requestModel = BeanUtil.copyProperties(request, ExamineSceneCategoryRequestModel.class);
Page<ExamineSceneCategoryResponseModel> page = examineService.sceneCategoryPaginQuery(requestModel);
PageResult<ExamineSceneCategoryDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ExamineSceneCategoryDto> dtoList = page.getRecords().stream().map(v -> {
ExamineSceneCategoryDto dto = BeanUtil.copyProperties(v, ExamineSceneCategoryDto.class);
if(Objects.nonNull(dto.getSceneId())) {
ExamineSceneResponseModel sceneResponseModel = examineService.sceneDetail(dto.getSceneId());
if(Objects.nonNull(sceneResponseModel)) {
dto.setSceneName(sceneResponseModel.getName());
}
}
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* 场景分类分页查询
* @param request
* @return
*/
public PageResult<ExamineSceneCategoryDto> examineSceneCategoryMobilePaginQuery(ExamineSceneCategoryRequestDto request) {
request.setStatus(1);
ExamineSceneCategoryRequestModel requestModel = BeanUtil.copyProperties(request, ExamineSceneCategoryRequestModel.class);
Page<ExamineSceneCategoryResponseModel> page = examineService.sceneCategoryPaginQuery(requestModel);
PageResult<ExamineSceneCategoryDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ExamineSceneCategoryDto> dtoList = page.getRecords().stream().map(v -> {
ExamineSceneCategoryDto dto = BeanUtil.copyProperties(v, ExamineSceneCategoryDto.class);
if(Objects.nonNull(dto.getSceneId())) {
ExamineSceneResponseModel sceneResponseModel = examineService.sceneDetail(dto.getSceneId());
if(Objects.nonNull(sceneResponseModel)) {
dto.setSceneName(sceneResponseModel.getName());
}
}
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* 场景分类列表查询
* @param request
* @return
*/
public List<ExamineSceneCategoryDto> examineSceneCategoryList(ExamineSceneCategoryRequestModel request) {
List<ExamineSceneCategoryDto> resultList = new ArrayList<>();
List<ExamineSceneCategoryResponseModel> modelList = examineService.sceneCategoryList(request);
if(CollectionUtil.isNotEmpty(modelList)) {
resultList = modelList.stream().map(v -> {
ExamineSceneCategoryDto dto = BeanUtil.copyProperties(v, ExamineSceneCategoryDto.class);
if(Objects.nonNull(dto.getSceneId())) {
ExamineSceneResponseModel sceneResponseModel = examineService.sceneDetail(dto.getSceneId());
if(Objects.nonNull(sceneResponseModel)) {
dto.setSceneName(sceneResponseModel.getName());
}
}
return dto;
}).collect(Collectors.toList());
}
return resultList;
}
/************************************************** 场景 **************************************************/
/**
* 更新场景
* @param id
* @param status
*/
public void updateSceneStatus(Integer id, Integer status) {
examineService.updateSceneStatus(id, status);
}
/**
* 删除场景
* @param id
*/
public void deleteScene(Integer id) {
examineService.deleteScene(id);
}
/**
* 获取场景详情
* @param id
* @return
*/
public ExamineSceneDto sceneDetail(Integer id) {
ExamineSceneResponseModel model = examineService.sceneDetail(id);
return BeanUtil.copyProperties(model, ExamineSceneDto.class);
}
/**
* 保存场景
* @param dto
*/
public void saveExamineScene(ExamineSceneSaveDto dto) {
ExamineSceneSaveModel model = BeanUtil.copyProperties(dto, ExamineSceneSaveModel.class);
examineService.saveScene(model);
}
/**
* 场景分类分页查询
* @param request
* @return
*/
public PageResult<ExamineSceneDto> examineScenePaginQuery(ExamineSceneRequestDto request) {
ExamineSceneRequestModel requestModel = BeanUtil.copyProperties(request, ExamineSceneRequestModel.class);
Page<ExamineSceneResponseModel> page = examineService.scenePaginQuery(requestModel);
PageResult<ExamineSceneDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ExamineSceneDto> dtoList = page.getRecords().stream().map(v -> {
ExamineSceneDto dto = BeanUtil.copyProperties(v, ExamineSceneDto.class);
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* 场景分类分页查询
* @param request
* @return
*/
public PageResult<ExamineSceneDto> examineMobileScenePaginQuery(ExamineSceneRequestDto request) {
// 移动端默认查询启用状态
request.setStatus(1);
ExamineSceneRequestModel requestModel = BeanUtil.copyProperties(request, ExamineSceneRequestModel.class);
Page<ExamineSceneResponseModel> page = examineService.scenePaginQuery(requestModel);
PageResult<ExamineSceneDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ExamineSceneDto> dtoList = page.getRecords().stream().map(v -> {
ExamineSceneDto dto = BeanUtil.copyProperties(v, ExamineSceneDto.class);
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* 场景分类列表查询
* @param request
* @return
*/
public List<ExamineSceneDto> examineSceneList(ExamineSceneRequestModel request) {
List<ExamineSceneDto> resultList = new ArrayList<>();
List<ExamineSceneResponseModel> modelList = examineService.sceneList(request);
if(CollectionUtil.isNotEmpty(modelList)) {
resultList = modelList.stream().map(v -> {
ExamineSceneDto dto = BeanUtil.copyProperties(v, ExamineSceneDto.class);
return dto;
}).collect(Collectors.toList());
}
return resultList;
}
/************************************************** 对练QA **************************************************/
/**
* 更新QA
* @param id
* @param status
*/
public void updateQaStatus(Integer id, Integer status) {
examineService.updateExamineQaStatus(id, status);
}
/**
* 删除QA
* @param id
*/
public void deleteQa(Integer id) {
examineService.deleteExamineQa(id);
}
/**
* 获取QA详情
* @param id
* @return
*/
public ExamineQaDto qaDetail(Integer id) {
ExamineQaResponseModel model = examineService.examineQaDetail(id);
ExamineSceneCategoryDto category = sceneCategoryDetail(model.getCategoryId());
if(Objects.nonNull(category)) {
model.setCategoryName(category.getName());
}
return BeanUtil.copyProperties(model, ExamineQaDto.class);
}
/**
* 保存QA
* @param dto
*/
public void saveExamineQa(ExamineQaSaveDto dto) {
Assert.notNull(dto.getCategoryId(), "分类ID不能为空");
ExamineSceneCategoryResponseModel category = examineService.sceneCategoryDetail(dto.getCategoryId());
Assert.notNull(category, "分类信息获取异常");
ExamineQaSaveModel model = BeanUtil.copyProperties(dto, ExamineQaSaveModel.class);
examineService.saveExamineQa(model);
}
/**
* QA分页查询
* @param request
* @return
*/
public PageResult<ExamineQaDto> examineQaPaginQuery(ExamineQaRequestDto request) {
ExamineQaRequestModel requestModel = BeanUtil.copyProperties(request, ExamineQaRequestModel.class);
Page<ExamineQaResponseModel> page = examineService.examineQaPaginQuery(requestModel);
PageResult<ExamineQaDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ExamineQaDto> dtoList = page.getRecords().stream().map(v -> {
ExamineQaDto dto = BeanUtil.copyProperties(v, ExamineQaDto.class);
ExamineSceneCategoryDto category = sceneCategoryDetail(dto.getCategoryId());
if(Objects.nonNull(category)) {
dto.setCategoryName(category.getName());
}
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* QA列表查询
* @param request
* @return
*/
public List<ExamineQaDto> examineQaList(ExamineQaRequestModel request) {
List<ExamineQaDto> resultList = new ArrayList<>();
List<ExamineQaResponseModel> modelList = examineService.examineQaList(request);
if(CollectionUtil.isNotEmpty(modelList)) {
resultList = modelList.stream().map(v -> {
ExamineQaDto dto = BeanUtil.copyProperties(v, ExamineQaDto.class);
return dto;
}).collect(Collectors.toList());
}
return resultList;
}
/************************************************** 对练 **************************************************/
/**
* 更新对练
* @param id
* @param status
*/
public void updateExamineStatus(Integer id, Integer status) {
examineService.updateExamineStatus(id, status);
}
/**
* 删除对练
* @param id
*/
public void deleteExamine(Integer id) {
examineService.deleteExamine(id);
}
/**
* 获取对练详情
* @param id
* @return
*/
public ExamineDto examineDetail(Integer id) {
ExamineResponseModel model = examineService.examineDetail(id);
// 获取关联题目信息
List<ExamineQaXrefResponseModel> xrefList = examineService.examineQaXrefList(id);
if(CollectionUtil.isNotEmpty(xrefList)) {
List<Integer> qaIdList = xrefList.stream().map(ExamineQaXrefResponseModel::getQaId).collect(Collectors.toList());
List<ExamineQaResponseModel> examineQaList = examineService.examineQaList(qaIdList);
model.setQaList(examineQaList);
}
return BeanUtil.copyProperties(model, ExamineDto.class);
}
/**
* 获取对练详情
* @param id
* @return
*/
public ExamineMobileDto examineMobileDetail(Integer id) {
ExamineMobileDto result = null;
ExamineResponseModel model = examineService.examineDetail(id);
if(Objects.nonNull(model)) {
result = BeanUtil.copyProperties(model, ExamineMobileDto.class);
// 考试次数
long examTotalCount = 0;
long examCount = 0;
long practiceCount = 0;
double maxOverallScore = 0;
ExamineRecordRequestModel req = new ExamineRecordRequestModel();
req.setExamineId(id);
List<ExamineRecordResponseModel> recordList = examineService.examineRecordList(req);
if(CollectionUtil.isNotEmpty(recordList)) {
examCount = recordList.stream().filter(v -> Objects.equals(v.getExamineMode(), 1)).count();
examTotalCount = recordList.size();
practiceCount = examTotalCount - examTotalCount;
maxOverallScore = recordList.stream().mapToDouble(ExamineRecordResponseModel::getOverallScore).max().getAsDouble();
}
result.setExamCount(examCount);
result.setPracticeCount(practiceCount);
result.setExamTotalCount(examTotalCount);
result.setMaxOverallScore(maxOverallScore);
}
return result;
}
/**
* 获取对练记录详情
* @param id
* @return
*/
public ExamineRecordMobileDto examineRecordMobileDetail(Integer id) {
ExamineRecordMobileDto result = null;
ExamineRecordResponseModel model = examineService.examineRecordDetail(id);
if(Objects.nonNull(model)) {
result = BeanUtil.copyProperties(model, ExamineRecordMobileDto.class);
// 对练明细
ExamineDetailRecordRequestModel req = new ExamineDetailRecordRequestModel();
req.setRecordId(id);
List<ExamineDetailRecordResponseModel> detailRecordList = examineService.examineDetailRecordList(req);
if(CollectionUtil.isNotEmpty(detailRecordList)) {
// 题目信息
List<Integer> qaIdList = detailRecordList.stream().map(ExamineDetailRecordResponseModel::getQaId).collect(Collectors.toList());
List<ExamineQaResponseModel> examineQaList = examineService.examineQaList(qaIdList);
Map<Integer, ExamineQaResponseModel> qaMap = examineQaList.stream().collect(toMap(ExamineQaResponseModel::getId, Function.identity()));
List<ExamineDetailRecordMobileDto> details = detailRecordList.stream().map(v -> {
ExamineDetailRecordMobileDto detail = BeanUtil.copyProperties(v, ExamineDetailRecordMobileDto.class);
ExamineQaResponseModel qaModel = qaMap.get(detail.getQaId());
if(Objects.nonNull(qaModel)) {
detail.setQuestion(qaModel.getQuestion());
detail.setAnswer(qaModel.getAnswer());
detail.setUserAnswer(v.getAnswer());
}
return detail;
}).collect(Collectors.toList());
result.setDetails(details);
}
}
return result;
}
/**
* 保存对练
* @param dto
*/
@Transactional
public void saveExamine(ExamineSaveDto dto) {
Assert.notNull(dto.getSceneId(), "场景不能为空");
Assert.notNull(dto.getCategoryId(), "场景分类不能为空");
Assert.notEmpty(dto.getQaIdList(), "对练题目不能为空");
ExamineSceneResponseModel scene = examineService.sceneDetail(dto.getSceneId());
Assert.notNull(scene, "场景信息获取异常");
ExamineSceneCategoryResponseModel category = examineService.sceneCategoryDetail(dto.getCategoryId());
Assert.notNull(category, "场景分类获取异常");
ExamineSaveModel model = BeanUtil.copyProperties(dto, ExamineSaveModel.class);
model.setQaNum(dto.getQaIdList().size());
examineService.saveExamine(model);
// 删除关联信息
examineService.deleteExamineQaXref(model.getId());
// 保存题目关联
examineService.saveExamineQaXref(model.getId(), dto.getQaIdList());
}
/**
* 对练分页查询
* @param request
* @return
*/
public PageResult<ExamineDto> examinePaginQuery(ExamineRequestDto request) {
ExamineRequestModel requestModel = BeanUtil.copyProperties(request, ExamineRequestModel.class);
Page<ExamineResponseModel> page = examineService.examinePaginQuery(requestModel);
PageResult<ExamineDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ExamineDto> dtoList = page.getRecords().stream().map(v -> {
ExamineDto dto = BeanUtil.copyProperties(v, ExamineDto.class);
long startTime = v.getStartTime().toEpochSecond(ZoneOffset.UTC);
dto.setStartTime(startTime);
long endTime = v.getEndTime().toEpochSecond(ZoneOffset.UTC);
dto.setEndTime(endTime);
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* 对练分页查询
* @param request
* @return
*/
public PageResult<ExamineMobileDto> examineMobilePaginQuery(ExamineRequestDto request) {
request.setStatus(1);
ExamineRequestModel requestModel = BeanUtil.copyProperties(request, ExamineRequestModel.class);
Page<ExamineResponseModel> page = examineService.examinePaginQuery(requestModel);
PageResult<ExamineMobileDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ExamineMobileDto> dtoList = page.getRecords().stream().map(v -> {
ExamineMobileDto dto = BeanUtil.copyProperties(v, ExamineMobileDto.class);
long startTime = v.getStartTime().toEpochSecond(ZoneOffset.UTC);
dto.setStartTime(startTime);
long endTime = v.getEndTime().toEpochSecond(ZoneOffset.UTC);
dto.setEndTime(endTime);
// 已考人数
long examCount = 0;
ExamineRecordRequestModel req = new ExamineRecordRequestModel();
req.setExamineId(v.getId());
List<ExamineRecordResponseModel> recordList = examineService.examineRecordList(req);
if(CollectionUtil.isNotEmpty(recordList)) {
examCount = recordList.size();
}
dto.setExamTotalCount(examCount);
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* 对练列表查询
* @param request
* @return
*/
public List<ExamineDto> examineList(ExamineRequestModel request) {
List<ExamineDto> resultList = new ArrayList<>();
List<ExamineResponseModel> modelList = examineService.examineList(request);
if(CollectionUtil.isNotEmpty(modelList)) {
resultList = modelList.stream().map(v -> {
ExamineDto dto = BeanUtil.copyProperties(v, ExamineDto.class);
return dto;
}).collect(Collectors.toList());
}
return resultList;
}
/**
* 用户对练记录
* @param request
* @return
*/
public PageResult<ExamineRecordMobileDto> examineRecordMobilePaginQuery(ExamineRecordRequestDto request) {
ExamineRecordRequestModel requestModel = BeanUtil.copyProperties(request, ExamineRecordRequestModel.class);
Page<ExamineRecordResponseModel> page = examineService.examineRecordPaginQuery(requestModel);
PageResult<ExamineRecordMobileDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<ExamineRecordMobileDto> dtoList = page.getRecords().stream().map(v -> {
ExamineRecordMobileDto dto = BeanUtil.copyProperties(v, ExamineRecordMobileDto.class);
ExamineDto examineDto = examineDetail(dto.getExamineId());
if(Objects.nonNull(examineDto)) {
dto.setExamineName(examineDto.getName());
dto.setExamineDescription(examineDto.getDescription());
}
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/************************************************** 资料库分类 **************************************************/
/**
* 更新资料库分类
* @param id
* @param status
*/
public void updateWikiCategoryStatus(Integer id, Integer status) {
examineService.updateWikiCategoryStatus(id, status);
}
/**
* 删除资料库分类
* @param id
*/
public void deleteWikiCategory(Integer id) {
examineService.deleteWikiCategory(id);
}
/**
* 获取资料库分类详情
* @param id
* @return
*/
public WikiCategoryDto wikiCategoryDetail(Integer id) {
WikiCategoryResponseModel model = examineService.wikiCategoryDetail(id);
return BeanUtil.copyProperties(model, WikiCategoryDto.class);
}
/**
* 保存资料库分类
* @param dto
*/
public void saveWikiCategory(WikiCategorySaveDto dto) {
Assert.notNull(dto.getParentId(), "分类父级ID不能为空");
WikiCategorySaveModel model = BeanUtil.copyProperties(dto, WikiCategorySaveModel.class);
examineService.saveWikiCategory(model);
}
/**
* 资料库分类分页查询
* @param request
* @return
*/
public PageResult<WikiCategoryDto> wikiCategoryPaginQuery(WikiCategoryRequestDto request) {
WikiCategoryRequestModel requestModel = BeanUtil.copyProperties(request, WikiCategoryRequestModel.class);
Page<WikiCategoryResponseModel> page = examineService.wikiCategoryPaginQuery(requestModel);
PageResult<WikiCategoryDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<WikiCategoryDto> dtoList = page.getRecords().stream().map(v -> {
WikiCategoryDto dto = BeanUtil.copyProperties(v, WikiCategoryDto.class);
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* 资料库分类列表查询
* @param request
* @return
*/
public List<WikiCategoryDto> wikiCategoryList(WikiCategoryRequestDto request) {
List<WikiCategoryDto> resultList = new ArrayList<>();
WikiCategoryRequestModel requestModel = BeanUtil.copyProperties(request, WikiCategoryRequestModel.class);
List<WikiCategoryResponseModel> modelList = examineService.wikiCategoryList(requestModel);
if(CollectionUtil.isNotEmpty(modelList)) {
resultList = modelList.stream().map(v -> {
WikiCategoryDto dto = BeanUtil.copyProperties(v, WikiCategoryDto.class);
return dto;
}).collect(Collectors.toList());
}
return resultList;
}
/************************************************** 资料库 **************************************************/
/**
* 更新资料库
* @param id
* @param status
*/
public void updateWikiStatus(Integer id, Integer status) {
examineService.updateWikiStatus(id, status);
}
/**
* 删除资料库
* @param id
*/
public void deleteWiki(Integer id) {
examineService.deleteWiki(id);
}
/**
* 获取资料库详情
* @param id
* @return
*/
public WikiDto wikiDetail(Integer id) {
WikiResponseModel model = examineService.wikiDetail(id);
return BeanUtil.copyProperties(model, WikiDto.class);
}
/**
* 保存资料库
* @param dto
*/
public void saveWiki(WikiSaveDto dto) {
WikiSaveModel model = BeanUtil.copyProperties(dto, WikiSaveModel.class);
examineService.saveWiki(model);
}
/**
* 资料库分页查询
* @param request
* @return
*/
public PageResult<WikiDto> wikiPaginQuery(WikiRequestDto request) {
WikiRequestModel requestModel = BeanUtil.copyProperties(request, WikiRequestModel.class);
Page<WikiResponseModel> page = examineService.wikiPaginQuery(requestModel);
PageResult<WikiDto> pageResult = PageResult.of(request.getPageNo(), request.getPageSize(), (int) page.getTotalRow(), null);
if(CollectionUtil.isNotEmpty(page.getRecords())) {
List<WikiDto> dtoList = page.getRecords().stream().map(v -> {
WikiDto dto = BeanUtil.copyProperties(v, WikiDto.class);
ExamineSceneCategoryDto sceneCategoryDto = sceneCategoryDetail(dto.getSceneCategoryId());
if(Objects.nonNull(sceneCategoryDto)) {
dto.setSceneCategoryName(sceneCategoryDto.getName());
}
WikiCategoryDto wikiCategoryDto = wikiCategoryDetail(dto.getWikiCategoryId());
if(Objects.nonNull(wikiCategoryDto)) {
dto.setWikiCategoryName(wikiCategoryDto.getName());
}
return dto;
}).collect(Collectors.toList());
pageResult.setItems(dtoList);
}
return pageResult;
}
/**
* 资料库列表查询
* @param request
* @return
*/
public List<WikiDto> wikiList(WikiRequestDto request) {
List<WikiDto> resultList = new ArrayList<>();
WikiRequestModel requestModel = BeanUtil.copyProperties(request, WikiRequestModel.class);
List<WikiResponseModel> modelList = examineService.wikiList(requestModel);
if(CollectionUtil.isNotEmpty(modelList)) {
resultList = modelList.stream().map(v -> {
WikiDto dto = BeanUtil.copyProperties(v, WikiDto.class);
return dto;
}).collect(Collectors.toList());
}
return resultList;
}
/************************************************** 移动端对练 **************************************************/
public ExamineQaDifyDto getCurrentQuestion(Integer examineId, String sessionId, String userId) {
ExamineQaDifyDto result = new ExamineQaDifyDto();
String redisKey = String.format(EXAM_REDIS_QUESTION_KEY, sessionId, userId);
String currentQuestion = redisTemplate.opsForValue().get(redisKey);
log.info("获取当前出题,rediskey = {}, value = {}", redisKey, currentQuestion);
if(StringUtils.isNotEmpty(currentQuestion)) {
ExamineQaResponseModel model = examineService.examineQaDetail(Integer.valueOf(currentQuestion));
if(Objects.nonNull(model)) {
ExamineSceneCategoryResponseModel category = examineService.sceneCategoryDetail(model.getCategoryId());
result.setQuestion(model.getQuestion());
result.setAnswer(model.getAnswer());
result.setProject(category.getName());
result.setCode(category.getName());
result.setQuestionId(model.getId());
result.setNext(true);
// 保存题目信息?
}
}
return result;
}
public ApiResponse<ExamineQaDifyDto> getQuestion(Integer tenant, Integer examineId, String sessionId, String userId) {
ExamineQaDifyDto result = new ExamineQaDifyDto();
// // 根据分类获取考题
// ExamineResponseModel model = examineService.examineDetail(examineId);
// if(Objects.nonNull(model)) {
// Long maxQuestionId = qaRecordMapper.selectSessionMaxQuestionId(tenant, sessionId, userId);
// maxQuestionId = Objects.nonNull(maxQuestionId) ? maxQuestionId : 0;
// ElehKnowledgeDo knowledgeDo = knowledgeMapper.selectQuestion(tenant, tagDo.getId(), maxQuestionId);
// if(Objects.nonNull(knowledgeDo)) {
// result.setQuestion(knowledgeDo.getQuestion());
// result.setAnswer(knowledgeDo.getAnswer());
// result.setProject(tagDo.getName());
// result.setCode(tagDo.getCode());
// result.setQuestionId(knowledgeDo.getId());
// result.setNext(true);
//
// // 存储当前会话考试信息
// String redisKey = String.format(EXAM_REDIS_QUESTION_KEY, tenant, sessionId, userId);
// redisTemplate.opsForValue().set(redisKey, result.getQuestionId()+"", 10, TimeUnit.MINUTES);
//
// log.info("出题结果:result = {}, rediskey = {}", JSONObject.toJSONString(result), redisKey);
// }
// }
return ApiResponse.ok(result);
}
}
package cn.breeze.elleai.controller;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.QaAssistantRequestDto;
import cn.breeze.elleai.application.dto.request.QaAssistantSaveDto;
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.application.service.AppChatCompletionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping(value = "/chat")
@Tag(name = "AI问答相关", description = "AI问答相关")
@RequiredArgsConstructor
public class ChatCompletionController {
private final AppChatCompletionService chatCompletionService;
@Operation(summary = "助手详情")
@GetMapping("/assistant/detail/{id}")
public ApiResponse<QaAssistantDto> qaAssistantDetail(@PathVariable("id") Integer id) {
QaAssistantDto detail = chatCompletionService.qaAssistantDetail(id);
return ApiResponse.ok(detail);
}
@Operation(summary = "启用/禁用助手")
@GetMapping("/assistant/update_status/{id}/{status}")
public ApiResponse<String> updateQaAssistantStatus(@PathVariable("id") Integer id,
@PathVariable("status") Integer status) {
chatCompletionService.updateQaAssistantStatus(id, status);
return ApiResponse.ok("ok");
}
@Operation(summary = "删除助手")
@GetMapping("/assistant/delete/{id}")
public ApiResponse<String> deleteQaAssistant(@PathVariable("id") Integer id) {
chatCompletionService.deleteQaAssistant(id);
return ApiResponse.ok("ok");
}
@Operation(summary = "保存助手")
@PostMapping("/assistant/save")
public ApiResponse<String> saveOrUpdateQaAssistant(@RequestBody QaAssistantSaveDto dto) {
chatCompletionService.saveQaAssistant(dto);
return ApiResponse.ok("ok");
}
@Operation(summary = "助手列表")
@PostMapping("/assistant/list")
public ApiResponse<PageResult<QaAssistantDto>> list(@RequestBody QaAssistantRequestDto request) {
PageResult<QaAssistantDto> pageResult = chatCompletionService.qaAssistantPaginQuery(request);
return ApiResponse.ok(pageResult);
}
@Operation(summary = "AI问答会话详情")
@GetMapping("/user/detail/{session_id}")
public ApiResponse<List<UserChatCompletionHistoryDto>> userQaDetail(@PathVariable("session_id") Integer sessionId) {
List<UserChatCompletionHistoryDto> detail = chatCompletionService.userQaDetail(sessionId);
return ApiResponse.ok(detail);
}
@Operation(summary = "AI问答会话列表")
@PostMapping("/user/list")
public ApiResponse<PageResult<UserChatCompletionDto>> userQaList(@RequestBody UserQaRequestDto request) {
PageResult<UserChatCompletionDto> pageResult = chatCompletionService.userQaPaginQuery(request);
return ApiResponse.ok(pageResult);
}
}
package cn.breeze.elleai.controller;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.QaAssistantRequestDto;
import cn.breeze.elleai.application.dto.request.UserQaHistoryRequestDto;
import cn.breeze.elleai.application.dto.response.QaAssistantDto;
import cn.breeze.elleai.application.dto.response.UserChatCompletionHistoryDto;
import cn.breeze.elleai.application.service.AppChatCompletionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/front/chat")
@Tag(name = "对练移动端", description = "对练")
@RequiredArgsConstructor
public class ChatCompletionMobileController {
private final AppChatCompletionService chatCompletionService;
@Operation(summary = "助手列表")
@PostMapping("/assistant/list")
public ApiResponse<PageResult<QaAssistantDto>> assistantList(@RequestBody QaAssistantRequestDto request) {
PageResult<QaAssistantDto> pageResult = chatCompletionService.qaAssistantPaginQuery(request);
return ApiResponse.ok(pageResult);
}
@Operation(summary = "热门提问")
@PostMapping("/hot/list")
public ApiResponse<PageResult<QaAssistantDto>> hotList(@RequestBody QaAssistantRequestDto request) {
PageResult<QaAssistantDto> pageResult = chatCompletionService.qaAssistantPaginQuery(request);
return ApiResponse.ok(pageResult);
}
@Operation(summary = "历史对话")
@PostMapping("/history")
public ApiResponse<PageResult<UserChatCompletionHistoryDto>> history(@RequestParam("user_id") String userId,
@RequestBody UserQaHistoryRequestDto request) {
request.setUserId(userId);
PageResult<UserChatCompletionHistoryDto> pageResult = chatCompletionService.userQaHistoryPaginQuery(request);
return ApiResponse.ok(pageResult);
}
@Operation(summary = "用户提问")
@PostMapping("/ask")
public ApiResponse<String> ask(@RequestParam("user_id") String userId,
@RequestBody UserQaHistoryRequestDto request) {
request.setUserId(userId);
String aiReply = chatCompletionService.userAsk(request);
return ApiResponse.ok(aiReply);
}
}
package cn.breeze.elleai.controller;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.*;
import cn.breeze.elleai.application.dto.response.ProperNounDto;
import cn.breeze.elleai.application.dto.response.WikiCategoryDto;
import cn.breeze.elleai.application.dto.response.WikiDto;
import cn.breeze.elleai.application.service.AppCommonService;
import cn.breeze.elleai.application.service.AppExamineService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/common")
@Tag(name = "公共服务", description = "公共服务")
@RequiredArgsConstructor
public class CommonController {
private final AppCommonService commonService;
@Operation(summary = "专有名词详情")
@GetMapping("/proper_noun/detail/{id}")
public ApiResponse<ProperNounDto> detail(@PathVariable("id") Integer id) {
ProperNounDto detail = commonService.properNounDetail(id);
return ApiResponse.ok(detail);
}
@Operation(summary = "启用/禁用专有名词")
@GetMapping("/proper_noun/update_status/{id}/{status}")
public ApiResponse<String> updateStatus(@PathVariable("id") Integer id,
@PathVariable("status") Integer status) {
commonService.updateProperNounStatus(id, status);
return ApiResponse.ok("ok");
}
@Operation(summary = "删除专有名词")
@GetMapping("/proper_noun/delete/{id}")
public ApiResponse<String> delete(@PathVariable("id") Integer id) {
commonService.deleteProperNoun(id);
return ApiResponse.ok("ok");
}
@Operation(summary = "保存专有名词")
@PostMapping("/proper_noun/save")
public ApiResponse<String> saveOrUpdate(@RequestBody ProperNounSaveDto dto) {
commonService.saveproperNoun(dto);
return ApiResponse.ok("ok");
}
@Operation(summary = "专有名词列表")
@PostMapping("/proper_noun/list")
public ApiResponse<PageResult<ProperNounDto>> list(@RequestBody ProperNounRequestDto request) {
PageResult<ProperNounDto> pageResult = commonService.properNounPaginQuery(request);
return ApiResponse.ok(pageResult);
}
}
package cn.breeze.elleai.controller;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.ExamineQaRequestDto;
import cn.breeze.elleai.application.dto.request.ExamineQaSaveDto;
import cn.breeze.elleai.application.dto.request.ExamineRequestDto;
import cn.breeze.elleai.application.dto.request.ExamineSaveDto;
import cn.breeze.elleai.application.dto.response.ExamineDto;
import cn.breeze.elleai.application.dto.response.ExamineQaDto;
import cn.breeze.elleai.application.service.AppExamineService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/examine")
@Tag(name = "对练", description = "对练")
@RequiredArgsConstructor
public class ExamineController {
private final AppExamineService examineService;
@Operation(summary = "对练详情")
@GetMapping("/detail/{id}")
public ApiResponse<ExamineDto> detail(@PathVariable("id") Integer id) {
ExamineDto detail = examineService.examineDetail(id);
return ApiResponse.ok(detail);
}
@Operation(summary = "启用/禁用对练")
@GetMapping("/update_status/{id}/{status}")
public ApiResponse<String> updateStatus(@PathVariable("id") Integer id,
@PathVariable("status") Integer status) {
examineService.updateExamineStatus(id, status);
return ApiResponse.ok("ok");
}
@Operation(summary = "删除对练")
@GetMapping("/delete/{id}")
public ApiResponse<String> delete(@PathVariable("id") Integer id) {
examineService.deleteExamine(id);
return ApiResponse.ok("ok");
}
@Operation(summary = "保存对练")
@PostMapping("/save")
public ApiResponse<String> saveOrUpdate(@RequestBody ExamineSaveDto dto) {
examineService.saveExamine(dto);
return ApiResponse.ok("ok");
}
@Operation(summary = "对练列表")
@PostMapping("/list")
public ApiResponse<PageResult<ExamineDto>> list(@RequestBody ExamineRequestDto request) {
PageResult<ExamineDto> pageResult = examineService.examinePaginQuery(request);
return ApiResponse.ok(pageResult);
}
}
package cn.breeze.elleai.controller;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.ExamineRecordRequestDto;
import cn.breeze.elleai.application.dto.request.ExamineRequestDto;
import cn.breeze.elleai.application.dto.request.ExamineSceneCategoryRequestDto;
import cn.breeze.elleai.application.dto.request.ExamineSceneRequestDto;
import cn.breeze.elleai.application.dto.response.*;
import cn.breeze.elleai.application.service.AppExamineService;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSONObject;
import io.micrometer.common.util.StringUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.text.DecimalFormat;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@RestController
@RequestMapping(value = "/front/examine")
@Tag(name = "对练移动端", description = "对练")
@RequiredArgsConstructor
public class ExamineMobileController {
private final AppExamineService examineService;
@Operation(summary = "对练场景列表")
@PostMapping("/scene/list")
public ApiResponse<PageResult<ExamineSceneDto>> list(@RequestBody ExamineSceneRequestDto request) {
PageResult<ExamineSceneDto> pageResult = examineService.examineMobileScenePaginQuery(request);
return ApiResponse.ok(pageResult);
}
@Operation(summary = "对练场景分类列表")
@RequestMapping("/scene_category/list")
public ApiResponse<PageResult<ExamineSceneCategoryDto>> list(@RequestBody ExamineSceneCategoryRequestDto request) {
PageResult<ExamineSceneCategoryDto> pageResult = examineService.examineSceneCategoryMobilePaginQuery(request);
return ApiResponse.ok(pageResult);
}
@Operation(summary = "对练列表")
@PostMapping("/list")
public ApiResponse<PageResult<ExamineMobileDto>> list(@RequestBody ExamineRequestDto request) {
PageResult<ExamineMobileDto> pageResult = examineService.examineMobilePaginQuery(request);
return ApiResponse.ok(pageResult);
}
@Operation(summary = "对练详情")
@GetMapping("/detail/{id}")
public ApiResponse<ExamineMobileDto> detail(@PathVariable("id") Integer id) {
ExamineMobileDto detail = examineService.examineMobileDetail(id);
return ApiResponse.ok(detail);
}
@Operation(summary = "用户对练记录列表")
@PostMapping("/record/list")
public ApiResponse<PageResult<ExamineRecordMobileDto>> recordList(@RequestParam("user_id")String userId,
@RequestBody ExamineRecordRequestDto request) {
request.setUserId(userId);
PageResult<ExamineRecordMobileDto> pageResult = examineService.examineRecordMobilePaginQuery(request);
return ApiResponse.ok(pageResult);
}
@Operation(summary = "用户对练记录详情")
@GetMapping("/record/detail/{id}")
public ApiResponse<ExamineRecordMobileDto> recordDetail(@PathVariable("id") Integer id) {
ExamineRecordMobileDto detail = examineService.examineRecordMobileDetail(id);
return ApiResponse.ok(detail);
}
@Operation(summary = "对练列表")
@PostMapping("/get_examine_qa")
public ApiResponse<PageResult<ExamineMobileDto>> getExamineQa(@RequestBody ExamineRequestDto request) {
PageResult<ExamineMobileDto> pageResult = examineService.examineMobilePaginQuery(request);
return ApiResponse.ok(pageResult);
}
@GetMapping(value = "/get_current_question")
public ApiResponse<ExamineQaDifyDto> getCurrentQuestion(@RequestParam("tenant") Integer examineId,
@RequestParam("session_id") String sessionId,
@RequestParam("user_id") String userId) {
ExamineQaDifyDto result = examineService.getCurrentQuestion(examineId, sessionId, userId);
return ApiResponse.ok(result);
}
@GetMapping(value = "/get_question")
public ApiResponse<ExamineQaDifyDto> getQuestion(@RequestParam("tenant") Integer tenant,
@RequestParam("examine_id") Integer examineId,
@RequestParam("session_id") String sessionId,
@RequestParam("user_id") String userId) {
ExamineQaDifyDto result = new ExamineQaDifyDto();
// // 根据分类获取考题
// ElehKnowledgeTagDo tagDo = tagMapper.selectByCode(tenant, code);
// if(Objects.nonNull(tagDo)) {
// Long maxQuestionId = qaRecordMapper.selectSessionMaxQuestionId(tenant, sessionId, userId);
// maxQuestionId = Objects.nonNull(maxQuestionId) ? maxQuestionId : 0;
// ElehKnowledgeDo knowledgeDo = knowledgeMapper.selectQuestion(tenant, tagDo.getId(), maxQuestionId);
// if(Objects.nonNull(knowledgeDo)) {
// result.setQuestion(knowledgeDo.getQuestion());
// result.setAnswer(knowledgeDo.getAnswer());
// result.setProject(tagDo.getName());
// result.setCode(tagDo.getCode());
// result.setQuestionId(knowledgeDo.getId());
// result.setNext(true);
//
// // 存储当前会话考试信息
// String redisKey = String.format(EXAM_REDIS_QUESTION_KEY, tenant, sessionId, userId);
// redisTemplate.opsForValue().set(redisKey, result.getQuestionId()+"", 10, TimeUnit.MINUTES);
//
// log.info("出题结果:result = {}, rediskey = {}", JSONObject.toJSONString(result), redisKey);
// }
// }
return ApiResponse.ok(result);
}
//
// @PostMapping(value = "update_question")
// public ApiResponse<String> updateQuestion(@RequestParam("tenant") Integer tenant,
// @RequestParam("session_id") String sessionId,
// @RequestParam("user_id") String userId,
// @RequestParam("question_id") Long questionId,
// @RequestParam(value = "answer", required = false) String answer,
// @RequestParam(value = "score", required = false) Double score,
// @RequestParam(value = "score_criteria", required = false) String scoreCriteria) {
//
// ElehSessionQaRecordDo recordDo = qaRecordMapper.selectQaRecord(tenant, sessionId, userId, questionId);
// if(Objects.isNull(recordDo)) {
// recordDo = new ElehSessionQaRecordDo();
// recordDo.setQuestionId(questionId);
// recordDo.setAnswer(answer);
// recordDo.setTenant(tenant);
// recordDo.setSessionId(sessionId);
// recordDo.setUserId(userId);
// recordDo.setType(ExamConstants.QA_RESULT_TYPE_SINGLE_QUESTION);
// recordDo.setScoreCriteria(scoreCriteria);
// recordDo.setScore(score);
// recordDo.setCreatedAt(new Date());
// qaRecordMapper.insert(recordDo);
// } else {
// ElehSessionQaRecordDo update = new ElehSessionQaRecordDo();
// update.setAnswer(answer);
// update.setScoreCriteria(scoreCriteria);
// update.setScore(score);
// update.setId(recordDo.getId());
// qaRecordMapper.updateById(update);
// }
//
// return ApiResponse.ok("SUCCESS");
// }
//
// @GetMapping(value = "/get_final_result")
// public ApiResponse<SessionExamResult> getFinalResult(@RequestParam("tenant") Integer tenant,
// @RequestParam("session_id") String sessionId,
// @RequestParam("user_id") String userId) {
//
// String avgScore = "";
// Double totalScore = 0D;
// long examNum = 0;
// List<SingleQaResult> qaResultList = Lists.newArrayList();
//
// LambdaQueryWrapper<ElehSessionQaRecordDo> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(ElehSessionQaRecordDo::getTenant, tenant);
// queryWrapper.eq(ElehSessionQaRecordDo::getSessionId, sessionId);
// queryWrapper.eq(ElehSessionQaRecordDo::getUserId, userId);
// queryWrapper.eq(ElehSessionQaRecordDo::getType, ExamConstants.QA_RESULT_TYPE_SINGLE_QUESTION);
// List<ElehSessionQaRecordDo> qaRecordDos = qaRecordMapper.selectList(queryWrapper);
// if(!CollectionUtils.isEmpty(qaRecordDos)) {
// totalScore = qaRecordDos.stream().filter(v -> Objects.nonNull(v.getScore())).mapToDouble(ElehSessionQaRecordDo::getScore).sum();
// examNum = qaRecordDos.stream().filter(v -> Objects.nonNull(v.getScore())).count();
//
// DecimalFormat df = new DecimalFormat("#.##");
// avgScore = df.format(totalScore / examNum);
//
// // 数据转换
// qaResultList = qaRecordDos.stream().map(v -> {
//
// ElehKnowledgeDo knowledgeDo = knowledgeMapper.selectById(v.getTenant(), v.getQuestionId());
//
// SingleQaResult qa = new SingleQaResult();
// qa.setQuestion(knowledgeDo.getQuestion());
// qa.setAnswer(knowledgeDo.getAnswer());
// qa.setUserAnswer(v.getAnswer());
// qa.setScore(v.getScore());
// qa.setScoreCriteria(v.getScoreCriteria());
// return qa;
// }).collect(Collectors.toList());
// }
// SessionExamResult result = new SessionExamResult();
// result.setAvgScore(avgScore);
// result.setTotalScore(totalScore);
// result.setExamNum(examNum);
// result.setQaResultList(qaResultList);
// return ApiResponse.ok(result);
// }
//
//
//
// @PostMapping(value = "/run4score")
// public ApiResponse<String> run4Score(@RequestParam(value = "tenant") Integer tenant,
// @RequestParam(value = "scene") String scene,
// @RequestParam(value = "session_id") String sessionId,
// @RequestParam(value = "user_id") String userId,
// @RequestParam(value = "question") String question,
// @RequestParam(value = "answer") String answer,
// @RequestParam(value = "question_id") Long questionId,
// @RequestParam(value = "user_answer") String userAnswer) {
//
//
// String redisKey = String.format(EXAM_REDIS_SESSION_KEY, tenant, userId);
//
// SingleQaResult qa = new SingleQaResult();
// qa.setUserId(userId);
// qa.setSessionId(sessionId);
// qa.setUserAnswer(userAnswer);
// qa.setQuestion(question);
// qa.setAnswer(answer);
// qa.setScene(scene);
// qa.setQuestionId(questionId);
//
// // 更新之前考试过的题目
// ElehSessionQaRecordDo recordDo = qaRecordMapper.selectQaRecord(tenant, sessionId, userId, questionId);
// if(Objects.nonNull(recordDo)) {
// qaRecordMapper.clearById(recordDo.getId());
// }
//
// log.info("PUT REDIS KEY = {}, REDIS VALUE = {}", redisKey, JSONObject.toJSONString(qa));
//
// redisTemplate.opsForValue().set(redisKey, JSONObject.toJSONString(qa), 30, TimeUnit.MINUTES);
//
// examAppFacade.run4Score(scene, sessionId, userId, question, answer, userAnswer);
//
// return ApiResponse.ok("ok");
// }
//
// @GetMapping(value = "/get_run4score_info")
// public ApiResponse<SingleQaResult> getRun4ScoreInfo(@RequestParam(value = "tenant") Integer tenant,
// @RequestParam(value = "user_id") String userId) {
//
//
// String redisKey = String.format(EXAM_REDIS_SESSION_KEY, tenant, userId);
//
// String redisValue = redisTemplate.opsForValue().get(redisKey);
//
//
// log.info("GET REDIS KEY = {}, REDIS VALUE = {}", redisKey, redisValue);
//
// if(StringUtils.isNotEmpty(redisValue)) {
// SingleQaResult singleQaResult = JSONObject.parseObject(redisValue, SingleQaResult.class);
// // 获取当天考题
// String questionRedisKey = String.format(EXAM_REDIS_QUESTION_KEY, tenant, singleQaResult.getSessionId(), userId);
// singleQaResult.setQuestionId(Long.valueOf(redisTemplate.opsForValue().get(questionRedisKey)));
//
// log.info("get_run4score_info, response = {}", JSONObject.toJSONString(singleQaResult));
//
// return ApiResponse.ok(singleQaResult);
// }
// return ApiResponse.fail("no cache data.");
// }
//
// @GetMapping(value = "/get_user_session_context")
// public ApiResponse<String> getUserSessionContext(@RequestParam(value = "tenant") Integer tenant,
// @RequestParam(value = "user_id") String userId,
// @RequestParam(value = "session_id") String sessionId,
// @RequestParam(value = "query") String query) {
//
//
// List<String> contextList = Lists.newArrayList();
//
// String redisKey = String.format(USER_SESSION_CONTEXT_KEY, tenant, sessionId, userId);
//
// Long contextCount = redisTemplate.opsForList().size(redisKey);
//
// // 最多获取5条上下文
// long maxCount = 3;
// String cacheMaxCount = redisTemplate.opsForValue().get(USER_SESSION_CONTEXT_COUNT);
// if(StringUtils.isNotEmpty(cacheMaxCount)) {
// maxCount = Long.valueOf(cacheMaxCount);
// }
//
// contextCount = contextCount > maxCount ? maxCount : contextCount;
//
// if(contextCount > 0) {
// contextList = redisTemplate.opsForList().range(redisKey, 0, contextCount-1);
// Collections.reverse(contextList);
// }
//
// log.info("当前用户ID = {}, 会话历史 = {} ", userId, JSONObject.toJSONString(contextList));
//
// // 存储当前用户提问
// redisTemplate.opsForList().leftPush(redisKey, query);
//
// return ApiResponse.ok(JSONObject.toJSONString(contextList));
// }
//
// /**
// * 更新最终考试结果
// * @param request
// * @return
// */
// @PostMapping(value = "/update_exam_result")
// public ApiResponse<String> updateExamResult(@RequestBody UpdateExamResultRequestDto request) {
//
// Integer tenant = request.getTenant();
// String sessionId = request.getSessionId();
// String userId = request.getUserId();
// String examCriteria = request.getExamCriteria();
//
// ElehSessionQaRecordDo recordDo = qaRecordMapper.selectExamResult(tenant, sessionId, userId);
// if(Objects.isNull(recordDo)) {
// recordDo = new ElehSessionQaRecordDo();
// recordDo.setTenant(tenant);
// recordDo.setSessionId(sessionId);
// recordDo.setUserId(userId);
// recordDo.setType(ExamConstants.QA_RESULT_TYPE_SINGLE_EXAM);
// recordDo.setExamCriteria(examCriteria);
// recordDo.setCreatedAt(new Date());
// qaRecordMapper.insert(recordDo);
// } else {
// ElehSessionQaRecordDo update = new ElehSessionQaRecordDo();
// update.setExamCriteria(examCriteria);
// update.setId(recordDo.getId());
// qaRecordMapper.updateById(update);
// }
//
// return ApiResponse.ok("SUCCESS");
// }
//
//
// @GetMapping(value = "/get_current_ai_score_info")
// public ApiResponse<SingleQaResult> getCurrentAiScoreInfo(@RequestParam("tenant") Integer tenant,
// @RequestParam("session_id") String sessionId,
// @RequestParam("user_id") String userId,
// @RequestParam("question_id") Long questionId) {
//
// SingleQaResult singleQaResult = new SingleQaResult();
//
// ElehSessionQaRecordDo recordDo = qaRecordMapper.selectQaRecord(tenant, sessionId, userId, questionId);
//
// if(Objects.nonNull(recordDo)) {
// singleQaResult = BeanUtil.copyProperties(recordDo, SingleQaResult.class);
// }
//
// return ApiResponse.ok(singleQaResult);
// }
}
package cn.breeze.elleai.controller;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.ExamineQaRequestDto;
import cn.breeze.elleai.application.dto.request.ExamineQaSaveDto;
import cn.breeze.elleai.application.dto.response.ExamineQaDto;
import cn.breeze.elleai.application.service.AppExamineService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
* 对练QA
*/
@RestController
@RequestMapping(value = "/examine/qa")
@Tag(name = "对练题目", description = "对练题目")
@RequiredArgsConstructor
public class ExamineQaController {
private final AppExamineService examineService;
@Operation(summary = "对练题目详情")
@GetMapping("/detail/{id}")
public ApiResponse<ExamineQaDto> detail(@PathVariable("id") Integer id) {
ExamineQaDto detail = examineService.qaDetail(id);
return ApiResponse.ok(detail);
}
@Operation(summary = "启用/禁用对练题目")
@GetMapping("/update_status/{id}/{status}")
public ApiResponse<String> updateStatus(@PathVariable("id") Integer id,
@PathVariable("status") Integer status) {
examineService.updateQaStatus(id, status);
return ApiResponse.ok("ok");
}
@Operation(summary = "删除对练题目")
@GetMapping("/delete/{id}")
public ApiResponse<String> delete(@PathVariable("id") Integer id) {
examineService.deleteQa(id);
return ApiResponse.ok("ok");
}
@Operation(summary = "保存对练题目")
@PostMapping("/save")
public ApiResponse<String> saveOrUpdate(@RequestBody ExamineQaSaveDto dto) {
examineService.saveExamineQa(dto);
return ApiResponse.ok("ok");
}
@Operation(summary = "对练题目列表")
@PostMapping("/list")
public ApiResponse<PageResult<ExamineQaDto>> list(@RequestBody ExamineQaRequestDto request) {
PageResult<ExamineQaDto> pageResult = examineService.examineQaPaginQuery(request);
return ApiResponse.ok(pageResult);
}
}
package cn.breeze.elleai.controller;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.ExamineSceneCategoryRequestDto;
import cn.breeze.elleai.application.dto.request.ExamineSceneCategorySaveDto;
import cn.breeze.elleai.application.dto.response.ExamineSceneCategoryDto;
import cn.breeze.elleai.application.service.AppExamineService;
import cn.breeze.elleai.domain.sparring.model.request.ExamineSceneCategoryRequestModel;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
* 场景分类
*/
@RestController
@RequestMapping(value = "/examine/scene_category")
@Tag(name = "对练场景分类", description = "对练场景分类")
@RequiredArgsConstructor
public class ExamineSceneCategoryController {
private final AppExamineService examineService;
@Operation(summary = "对练场景分类详情")
@GetMapping("/detail/{id}")
public ApiResponse<ExamineSceneCategoryDto> detail(@PathVariable("id") Integer id) {
ExamineSceneCategoryDto detail = examineService.sceneCategoryDetail(id);
return ApiResponse.ok(detail);
}
@Operation(summary = "启用/禁用对练场景分类")
@GetMapping("/update_status/{id}/{status}")
public ApiResponse<String> updateStatus(@PathVariable("id") Integer id,
@PathVariable("status") Integer status) {
examineService.updateSceneCategoryStatus(id, status);
return ApiResponse.ok("ok");
}
@Operation(summary = "删除对练场景分类")
@GetMapping("/delete/{id}")
public ApiResponse<String> delete(@PathVariable("id") Integer id) {
examineService.deleteSceneCategory(id);
return ApiResponse.ok("ok");
}
@Operation(summary = "保存对练场景分类")
@PostMapping("/save")
public ApiResponse<String> save(@RequestBody ExamineSceneCategorySaveDto dto) {
examineService.saveExamineSceneCategory(dto);
return ApiResponse.ok("ok");
}
@Operation(summary = "对练场景分类列表")
@RequestMapping("/list")
public ApiResponse<PageResult<ExamineSceneCategoryDto>> list(@RequestBody ExamineSceneCategoryRequestDto request) {
PageResult<ExamineSceneCategoryDto> pageResult = examineService.examineSceneCategoryPaginQuery(request);
return ApiResponse.ok(pageResult);
}
}
package cn.breeze.elleai.controller;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.ExamineSceneRequestDto;
import cn.breeze.elleai.application.dto.request.ExamineSceneSaveDto;
import cn.breeze.elleai.application.dto.response.ExamineSceneDto;
import cn.breeze.elleai.application.service.AppExamineService;
import cn.breeze.elleai.domain.sparring.model.request.ExamineSceneRequestModel;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
* 场景
*/
@RestController
@RequestMapping(value = "/examine/scene")
@Tag(name = "对练场景", description = "对练场景")
@RequiredArgsConstructor
public class ExamineSceneController {
private final AppExamineService examineService;
@Operation(summary = "对练场景详情")
@GetMapping("/detail/{id}")
public ApiResponse<ExamineSceneDto> detail(@PathVariable("id") Integer id) {
ExamineSceneDto detail = examineService.sceneDetail(id);
return ApiResponse.ok(detail);
}
@Operation(summary = "启用/禁用对练场景")
@GetMapping("/update_status/{id}/{status}")
public ApiResponse<String> updateStatus(@PathVariable("id") Integer id,
@PathVariable("status") Integer status) {
examineService.updateSceneStatus(id, status);
return ApiResponse.ok("ok");
}
@Operation(summary = "删除对练场景")
@GetMapping("/delete/{id}")
public ApiResponse<String> delete(@PathVariable("id") Integer id) {
examineService.deleteScene(id);
return ApiResponse.ok("ok");
}
@Operation(summary = "保存对练场景")
@PostMapping("/save")
public ApiResponse<String> save(@RequestBody ExamineSceneSaveDto dto) {
examineService.saveExamineScene(dto);
return ApiResponse.ok("ok");
}
@Operation(summary = "对练场景列表")
@PostMapping("/list")
public ApiResponse<PageResult<ExamineSceneDto>> list(@RequestBody ExamineSceneRequestDto request) {
PageResult<ExamineSceneDto> pageResult = examineService.examineScenePaginQuery(request);
return ApiResponse.ok(pageResult);
}
}
package cn.breeze.elleai.controller;
import cn.breeze.elleai.application.dto.ApiResponse;
import cn.breeze.elleai.application.dto.PageResult;
import cn.breeze.elleai.application.dto.request.*;
import cn.breeze.elleai.application.dto.response.ExamineDto;
import cn.breeze.elleai.application.dto.response.WikiCategoryDto;
import cn.breeze.elleai.application.dto.response.WikiDto;
import cn.breeze.elleai.application.service.AppExamineService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/wiki")
@Tag(name = "资料库", description = "资料库")
@RequiredArgsConstructor
public class WikiController {
private final AppExamineService examineService;
@Operation(summary = "资料库详情")
@GetMapping("/detail/{id}")
public ApiResponse<WikiDto> detail(@PathVariable("id") Integer id) {
WikiDto detail = examineService.wikiDetail(id);
return ApiResponse.ok(detail);
}
@Operation(summary = "启用/禁用资料库")
@GetMapping("/update_status/{id}/{status}")
public ApiResponse<String> updateStatus(@PathVariable("id") Integer id,
@PathVariable("status") Integer status) {
examineService.updateWikiStatus(id, status);
return ApiResponse.ok("ok");
}
@Operation(summary = "删除资料库")
@GetMapping("/delete/{id}")
public ApiResponse<String> delete(@PathVariable("id") Integer id) {
examineService.deleteWiki(id);
return ApiResponse.ok("ok");
}
@Operation(summary = "保存资料库")
@PostMapping("/save")
public ApiResponse<String> saveOrUpdate(@RequestBody WikiSaveDto dto) {
examineService.saveWiki(dto);
return ApiResponse.ok("ok");
}
@Operation(summary = "资料库列表")
@PostMapping("/list")
public ApiResponse<PageResult<WikiDto>> list(@RequestBody WikiRequestDto request) {
PageResult<WikiDto> pageResult = examineService.wikiPaginQuery(request);
return ApiResponse.ok(pageResult);
}
@Operation(summary = "资料库分类详情")
@GetMapping("/category/detail/{id}")
public ApiResponse<WikiCategoryDto> categoryDetail(@PathVariable("id") Integer id) {
WikiCategoryDto detail = examineService.wikiCategoryDetail(id);
return ApiResponse.ok(detail);
}
@Operation(summary = "启用/禁用资料库分类")
@GetMapping("/category/update_status/{id}/{status}")
public ApiResponse<String> updateCategoryStatus(@PathVariable("id") Integer id,
@PathVariable("status") Integer status) {
examineService.updateWikiCategoryStatus(id, status);
return ApiResponse.ok("ok");
}
@Operation(summary = "删除资料库分类")
@GetMapping("/category/delete/{id}")
public ApiResponse<String> deleteCategory(@PathVariable("id") Integer id) {
examineService.deleteWikiCategory(id);
return ApiResponse.ok("ok");
}
@Operation(summary = "保存资料库分类")
@PostMapping("/category/save")
public ApiResponse<String> saveOrUpdateCategory(@RequestBody WikiCategorySaveDto dto) {
examineService.saveWikiCategory(dto);
return ApiResponse.ok("ok");
}
@Operation(summary = "资料库分类列表")
@PostMapping("/category/list")
public ApiResponse<PageResult<WikiCategoryDto>> categoryList(@RequestBody WikiCategoryRequestDto request) {
PageResult<WikiCategoryDto> pageResult = examineService.wikiCategoryPaginQuery(request);
return ApiResponse.ok(pageResult);
}
}
package cn.breeze.elleai.domain.sparring.model;
import java.io.Serializable;
public class CommonRequestModel implements Serializable {
private Integer id;
private Integer pageNo;
private Integer pageSize;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExamineDetailRecordRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private Integer recordId;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExamineQaRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExamineQaSaveModel implements Serializable {
private Integer id;
/**
* 问题
*/
private String question;
/**
* 答案
*/
private String answer;
/**
* 对练分类ID
*/
private Integer categoryId;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
}
package cn.breeze.elleai.domain.sparring.model.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 ExamineRecordRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
/**
* 用户ID
*/
private String userId;
/**
* 对练ID
*/
private Integer examineId;
/**
* 对练模式(0练习 1对练)
*/
private Integer examineMode;
}
package cn.breeze.elleai.domain.sparring.model.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 ExamineRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
private Integer status;
@Schema(description = "场景分类ID")
@JsonProperty("category_id")
private Integer categoryId;
}
package cn.breeze.elleai.domain.sparring.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class ExamineSaveModel implements Serializable {
private Integer id;
/**
* 对练名称
*/
private String name;
/**
* 对练描述
*/
private String description;
/**
* 海报图
*/
private String poster;
/**
* 对练场景ID
*/
@JsonProperty("scene_id")
private Integer sceneId;
/**
* 对练分类ID
*/
@JsonProperty("category_id")
private Integer categoryId;
/**
* 开始时间
*/
@JsonProperty("start_time")
private LocalDateTime startTime;
/**
* 结束时间
*/
@JsonProperty("end_time")
private LocalDateTime endTime;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 题目数量
*/
@JsonProperty("qa_num")
private Integer qaNum;
}
package cn.breeze.elleai.domain.sparring.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExamineSceneCategoryRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
private Integer status;
private Integer sceneId;
}
package cn.breeze.elleai.domain.sparring.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineSceneCategorySaveModel implements Serializable {
private Integer id;
/**
* 分类名称
*/
private String name;
/**
* 场景ID描述
*/
@JsonProperty("scene_id")
private Integer sceneId;
/**
* 可见角色IDS
*/
@JsonProperty("visible_role_ids")
private String visibleRoleIds;
/**
* 分类描述
*/
private String description;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
@JsonProperty("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@JsonProperty("update_time")
private LocalDateTime updateTime;
/**
* 父级分类ID
*/
@JsonProperty("parent_id")
private Integer parentId;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExamineSceneRequestModel 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.time.LocalDateTime;
@Data
public class ExamineSceneSaveModel implements Serializable {
private Integer id;
/**
* 场景名称
*/
private String name;
/**
* 场景描述
*/
private String description;
/**
* 场景海报图
*/
private String poster;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class ProperNounRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
}
package cn.breeze.elleai.domain.sparring.model.request;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ProperNounSaveModel implements Serializable {
private Integer id;
/**
* 专有名词名称
*/
private String name;
/**
* 相似词,以逗号分隔
*/
private String similarWords;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class QaAssistantRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
}
package cn.breeze.elleai.domain.sparring.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class QaAssistantSaveModel implements Serializable {
private Integer id;
/**
* 助手名称
*/
private String name;
/**
* 助手描述
*/
private String description;
/**
* 助手图标
*/
private String iconUrl;
/**
* 知识库分类IDS,以逗号分隔
*/
private String categoryIds;
/**
* 可见角色IDS,以逗号分隔
*/
private String visibleRoleIds;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class UserQaHistoryRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String userId;
private Integer type;
private Integer chatCompletionId;
private List<Integer> chatCompletionIdList;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class UserQaRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String userId;
private String sessionId;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class WikiCategoryRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
}
package cn.breeze.elleai.domain.sparring.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class WikiCategorySaveModel implements Serializable {
private Integer id;
/**
* 分类名称
*/
private String name;
/**
* 分类描述
*/
private String description;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 父级分类ID
*/
private Integer parentId;
}
package cn.breeze.elleai.domain.sparring.model.request;
import lombok.Data;
import java.io.Serializable;
@Data
public class WikiRequestModel implements Serializable {
private Integer pageNo;
private Integer pageSize;
private String name;
}
package cn.breeze.elleai.domain.sparring.model.request;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class WikiSaveModel implements Serializable {
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 资料名称
*/
private String name;
/**
* 资料描述
*/
private String description;
/**
* 资料海报图
*/
private String poster;
/**
* 资料文件URL
*/
private String fileUrl;
/**
* 资料分类ID
*/
private Integer wikiCategoryId;
/**
* 场景分类ID
*/
private Integer sceneCategoryId;
/**
* 富文本详情
*/
private String detail;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
}
package cn.breeze.elleai.domain.sparring.model.response;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineDetailRecordResponseModel implements Serializable {
private Integer id;
/**
* 对练记录ID
*/
private Integer recordId;
/**
* 题目ID
*/
private Integer qaId;
/**
* 评分
*/
private Float score;
/**
* 评价
*/
private String evaluation;
/**
* 员工回答
*/
private String answer;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineQaResponseModel implements Serializable {
private Integer id;
/**
* 问题
*/
private String question;
/**
* 答案
*/
private String answer;
/**
* 对练分类ID
*/
@JsonProperty("category_id")
private Integer categoryId;
private String categoryName;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.response;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineQaXrefResponseModel implements Serializable {
private Integer id;
/**
* 对练ID
*/
private Integer examineId;
/**
* 题目ID
*/
private Integer qaId;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.response;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class ExamineRecordResponseModel implements Serializable {
private Integer id;
/**
* 用户ID
*/
private String userId;
/**
* 会话ID
*/
private String sessionId;
/**
* 对练ID
*/
private Integer examineId;
/**
* 对练模式(0练习 1对练)
*/
private Integer examineMode;
/**
* 已答题数量
*/
private Integer answeredNum;
/**
* 综合评分
*/
private Float overallScore;
/**
* 综合评价
*/
private String overallEvaluation;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.response;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class ExamineResponseModel implements Serializable {
private Integer id;
/**
* 对练名称
*/
private String name;
/**
* 对练描述
*/
private String description;
/**
* 海报图
*/
private String poster;
/**
* 对练场景ID
*/
private Integer sceneId;
/**
* 对练分类ID
*/
private Integer categoryId;
/**
* 开始时间
*/
private LocalDateTime startTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 题目数量
*/
private Integer qaNum;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 关联题目列表
*/
private List<ExamineQaResponseModel> qaList;
}
package cn.breeze.elleai.domain.sparring.model.response;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineSceneCategoryResponseModel implements Serializable {
private Integer id;
/**
* 分类名称
*/
private String name;
/**
* 场景ID
*/
private Integer sceneId;
/**
* 场景名称
*/
private Integer sceneName;
/**
* 可见角色IDS
*/
private String visibleRoleIds;
/**
* 可见角色名称S
*/
private String visibleRoleNames;
/**
* 分类描述
*/
private String description;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 父级分类ID
*/
private Integer parentId;
}
package cn.breeze.elleai.domain.sparring.model.response;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ExamineSceneResponseModel implements Serializable {
private Integer id;
/**
* 场景名称
*/
private String name;
/**
* 场景描述
*/
private String description;
/**
* 场景海报图
*/
private String poster;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.response;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class ProperNounResponseModel implements Serializable {
private Integer id;
/**
* 专有名词名称
*/
private String name;
/**
* 相似词,以逗号分隔
*/
private String similarWords;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class QaAssistantResponseModel implements Serializable {
private Integer id;
/**
* 助手名称
*/
private String name;
/**
* 助手描述
*/
private String description;
/**
* 助手图标
*/
private String iconUrl;
/**
* 知识库分类IDS,以逗号分隔
*/
private String categoryIds;
/**
* 可见角色IDS,以逗号分隔
*/
private String visibleRoleIds;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.response;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class UserChatCompletionHistoryResponseModel implements Serializable {
private Integer id;
/**
* 会话ID
*/
private Integer chatCompletionId;
/**
* 类型(0用户提问 1AI回答)
*/
private Integer type;
/**
* 内容
*/
private String content;
/**
* 创建时间
*/
private LocalDateTime createTime;
}
package cn.breeze.elleai.domain.sparring.model.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class UserChatCompletionResponseModel implements Serializable {
private Integer id;
/**
* 用户ID
*/
private String userId;
/**
* 会话ID
*/
private String sessionId;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class WikiCategoryResponseModel implements Serializable {
private Integer id;
/**
* 分类名称
*/
private String name;
/**
* 分类描述
*/
private String description;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 父级分类ID
*/
private Integer parentId;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.model.response;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class WikiResponseModel implements Serializable {
private Integer id;
/**
* 资料名称
*/
private String name;
/**
* 资料描述
*/
private String description;
/**
* 资料海报图
*/
private String poster;
/**
* 资料文件URL
*/
private String fileUrl;
/**
* 资料分类ID
*/
private Integer wikiCategoryId;
/**
* 场景分类ID
*/
private Integer sceneCategoryId;
/**
* 富文本详情
*/
private String detail;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.domain.sparring.service;
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.UserQaHistoryRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.UserQaRequestModel;
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.UserChatCompletionResponseModel;
import com.mybatisflex.core.paginate.Page;
import java.util.List;
public interface ChatCompletionService {
/***************************************** AI问答 *****************************************/
Page<UserChatCompletionResponseModel> userQaPaginQuery(UserQaRequestModel request);
Page<UserChatCompletionHistoryResponseModel> userQaHistoryPaginQuery(UserQaHistoryRequestModel request);
List<UserChatCompletionResponseModel> userQaList(UserQaRequestModel request);
List<UserChatCompletionHistoryResponseModel> userQaHistoryDetail(Integer sessionId);
UserChatCompletionResponseModel userQaDetail(UserQaRequestModel request);
Integer saveUserQaSession(String userId, String sessionId);
void saveUserQaRecord(Integer chatCompletionId, Integer type, String content);
/***************************************** AI助手 *****************************************/
Page<QaAssistantResponseModel> qaAssistantPaginQuery(QaAssistantRequestModel request);
List<QaAssistantResponseModel> qaAssistantList(QaAssistantRequestModel request);
QaAssistantResponseModel qaAssistantDetail(Integer id);
void updateQaAssistantStatus(Integer id, Integer status);
void deleteQaAssistant(Integer id);
void saveQaAssistant(QaAssistantSaveModel dto);
}
package cn.breeze.elleai.domain.sparring.service;
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.UserQaHistoryRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.UserQaRequestModel;
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.UserChatCompletionResponseModel;
import cn.breeze.elleai.infra.entity.ExamineEntity;
import cn.breeze.elleai.infra.entity.QaAssistantEntity;
import cn.breeze.elleai.infra.entity.UserChatCompletionEntity;
import cn.breeze.elleai.infra.entity.UserChatCompletionHistoryEntity;
import cn.breeze.elleai.infra.mapper.QaAssistantMapper;
import cn.breeze.elleai.infra.mapper.UserChatCompletionHistoryMapper;
import cn.breeze.elleai.infra.mapper.UserChatCompletionMapper;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
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.UserChatCompletionTableDef.USER_CHAT_COMPLETION_ENTITY;
@Service
@RequiredArgsConstructor
public class ChatCompletionServiceImpl implements ChatCompletionService{
private final UserChatCompletionHistoryMapper chatCompletionHistoryMapper;
private final UserChatCompletionMapper chatCompletionMapper;
private final QaAssistantMapper qaAssistantMapper;
@Override
public Page<UserChatCompletionResponseModel> userQaPaginQuery(UserQaRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create();
if(StrUtil.isNotEmpty(request.getUserId())) {
queryWrapper.where(USER_CHAT_COMPLETION_ENTITY.USER_ID.eq(request.getUserId()));
}
Page<UserChatCompletionResponseModel> page = chatCompletionMapper.paginateAs(pageNo, pageSize, queryWrapper, UserChatCompletionResponseModel.class);
return page;
}
@Override
public Page<UserChatCompletionHistoryResponseModel> userQaHistoryPaginQuery(UserQaHistoryRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create();
if(Objects.nonNull(request.getChatCompletionId())) {
queryWrapper.where(USER_CHAT_COMPLETION_HISTORY_ENTITY.CHAT_COMPLETION_ID.eq(request.getChatCompletionId()));
}
if(CollectionUtil.isNotEmpty(request.getChatCompletionIdList())) {
queryWrapper.where(USER_CHAT_COMPLETION_HISTORY_ENTITY.CHAT_COMPLETION_ID.in(request.getChatCompletionIdList()));
}
if(Objects.nonNull(request.getType())) {
queryWrapper.where(USER_CHAT_COMPLETION_HISTORY_ENTITY.TYPE.eq(request.getType()));
}
queryWrapper.orderBy(USER_CHAT_COMPLETION_HISTORY_ENTITY.CREATE_TIME, false);
Page<UserChatCompletionHistoryResponseModel> page = chatCompletionHistoryMapper.paginateAs(pageNo, pageSize, queryWrapper, UserChatCompletionHistoryResponseModel.class);
return page;
}
@Override
public List<UserChatCompletionResponseModel> userQaList(UserQaRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create();
if(StrUtil.isNotEmpty(request.getUserId())) {
queryWrapper.where(USER_CHAT_COMPLETION_ENTITY.USER_ID.eq(request.getUserId()));
}
return chatCompletionMapper.selectListByQueryAs(queryWrapper, UserChatCompletionResponseModel.class);
}
@Override
public List<UserChatCompletionHistoryResponseModel> userQaHistoryDetail(Integer sessionId) {
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.where(USER_CHAT_COMPLETION_HISTORY_ENTITY.CHAT_COMPLETION_ID.eq(sessionId));
queryWrapper.orderBy(USER_CHAT_COMPLETION_HISTORY_ENTITY.CREATE_TIME, true);
return chatCompletionHistoryMapper.selectListByQueryAs(queryWrapper, UserChatCompletionHistoryResponseModel.class);
}
@Override
public UserChatCompletionResponseModel userQaDetail(UserQaRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.where(USER_CHAT_COMPLETION_ENTITY.USER_ID.eq(request.getUserId()));
queryWrapper.where(USER_CHAT_COMPLETION_ENTITY.SESSION_ID.eq(request.getSessionId()));
queryWrapper.orderBy(USER_CHAT_COMPLETION_ENTITY.CREATE_TIME, false);
return chatCompletionMapper.selectOneByQueryAs(queryWrapper, UserChatCompletionResponseModel.class);
}
@Override
public Integer saveUserQaSession(String userId, String sessionId) {
UserChatCompletionEntity entity = new UserChatCompletionEntity();
entity.setUserId(userId);
entity.setSessionId(sessionId);
entity.setUpdateTime(LocalDateTime.now());
chatCompletionMapper.insertOrUpdateSelective(entity);
return entity.getId();
}
@Override
public void saveUserQaRecord(Integer chatCompletionId, Integer type, String content) {
UserChatCompletionHistoryEntity entity = new UserChatCompletionHistoryEntity();
entity.setChatCompletionId(chatCompletionId);
entity.setType(type);
entity.setContent(content);
entity.setCreateTime(LocalDateTime.now());
chatCompletionHistoryMapper.insertOrUpdateSelective(entity);
}
@Override
public Page<QaAssistantResponseModel> qaAssistantPaginQuery(QaAssistantRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create()
.where(QA_ASSISTANT_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(QA_ASSISTANT_ENTITY.NAME.like("%"+request.getName()+"%"));
}
queryWrapper.orderBy(QA_ASSISTANT_ENTITY.CREATE_TIME, false);
Page<QaAssistantResponseModel> page = qaAssistantMapper.paginateAs(pageNo, pageSize, queryWrapper, QaAssistantResponseModel.class);
return page;
}
@Override
public List<QaAssistantResponseModel> qaAssistantList(QaAssistantRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(QA_ASSISTANT_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(QA_ASSISTANT_ENTITY.NAME.like("%"+request.getName()+"%"));
}
queryWrapper.orderBy(QA_ASSISTANT_ENTITY.CREATE_TIME, false);
return qaAssistantMapper.selectListByQueryAs(queryWrapper, QaAssistantResponseModel.class);
}
@Override
public QaAssistantResponseModel qaAssistantDetail(Integer id) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(QA_ASSISTANT_ENTITY.ID.eq(id).and(QA_ASSISTANT_ENTITY.DELETED.eq(0)));
return qaAssistantMapper.selectOneByQueryAs(queryWrapper, QaAssistantResponseModel.class);
}
@Override
public void updateQaAssistantStatus(Integer id, Integer status) {
UpdateChain.of(QaAssistantEntity.class)
.set(QA_ASSISTANT_ENTITY.STATUS, status)
.set(QA_ASSISTANT_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(QA_ASSISTANT_ENTITY.ID.eq(id))
.update();
}
@Override
public void deleteQaAssistant(Integer id) {
UpdateChain.of(QaAssistantEntity.class)
.set(QA_ASSISTANT_ENTITY.DELETED, 1)
.set(QA_ASSISTANT_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(QA_ASSISTANT_ENTITY.ID.eq(id))
.update();
}
@Override
public void saveQaAssistant(QaAssistantSaveModel dto) {
QaAssistantEntity entity = BeanUtil.toBean(dto, QaAssistantEntity.class);
entity.setUpdateTime(LocalDateTime.now());
if(Objects.isNull(entity.getId())) {
entity.setStatus(1);
entity.setDeleted(0);
}
qaAssistantMapper.insertOrUpdateSelective(entity);
}
}
package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.*;
import cn.breeze.elleai.domain.sparring.model.response.ProperNounResponseModel;
import com.mybatisflex.core.paginate.Page;
import java.util.List;
public interface CommonService {
/***************************************** 专有名词 *****************************************/
Page<ProperNounResponseModel> properNounPaginQuery(ProperNounRequestModel request);
List<ProperNounResponseModel> properNounList(ProperNounRequestModel request);
ProperNounResponseModel properNounDetail(Integer id);
void updateProperNounStatus(Integer id, Integer status);
void deleteProperNoun(Integer id);
void saveProperNoun(ProperNounSaveModel dto);
}
package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.ProperNounRequestModel;
import cn.breeze.elleai.domain.sparring.model.request.ProperNounSaveModel;
import cn.breeze.elleai.domain.sparring.model.response.ProperNounResponseModel;
import cn.breeze.elleai.infra.entity.ProperNounEntity;
import cn.breeze.elleai.infra.mapper.ProperNounMapper;
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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import static cn.breeze.elleai.infra.entity.table.ProperNounTableDef.PROPER_NOUN_ENTITY;
@Service
@RequiredArgsConstructor
public class CommonServiceImpl implements CommonService{
private final ProperNounMapper properNounMapper;
@Override
public Page<ProperNounResponseModel> properNounPaginQuery(ProperNounRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.where(PROPER_NOUN_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(PROPER_NOUN_ENTITY.NAME.like("%"+request.getName()+"%"));
}
queryWrapper.orderBy(PROPER_NOUN_ENTITY.CREATE_TIME, false);
Page<ProperNounResponseModel> page = properNounMapper.paginateAs(pageNo, pageSize, queryWrapper, ProperNounResponseModel.class);
return page;
}
@Override
public List<ProperNounResponseModel> properNounList(ProperNounRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.where(PROPER_NOUN_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(PROPER_NOUN_ENTITY.NAME.like("%"+request.getName()+"%"));
}
queryWrapper.orderBy(PROPER_NOUN_ENTITY.CREATE_TIME, false);
return properNounMapper.selectListByQueryAs(queryWrapper, ProperNounResponseModel.class);
}
@Override
public ProperNounResponseModel properNounDetail(Integer id) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(PROPER_NOUN_ENTITY.ID.eq(id).and(PROPER_NOUN_ENTITY.DELETED.eq(0)));
return properNounMapper.selectOneByQueryAs(queryWrapper, ProperNounResponseModel.class);
}
@Override
public void updateProperNounStatus(Integer id, Integer status) {
UpdateChain.of(ProperNounEntity.class)
.set(PROPER_NOUN_ENTITY.STATUS, status)
.set(PROPER_NOUN_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(PROPER_NOUN_ENTITY.ID.eq(id))
.update();
}
@Override
public void deleteProperNoun(Integer id) {
UpdateChain.of(ProperNounEntity.class)
.set(PROPER_NOUN_ENTITY.DELETED, 1)
.set(PROPER_NOUN_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(PROPER_NOUN_ENTITY.ID.eq(id))
.update();
}
@Override
public void saveProperNoun(ProperNounSaveModel dto) {
ProperNounEntity entity = BeanUtil.toBean(dto, ProperNounEntity.class);
entity.setUpdateTime(LocalDateTime.now());
if(Objects.isNull(entity.getId())) {
entity.setStatus(1);
entity.setDeleted(0);
}
properNounMapper.insertOrUpdateSelective(entity);
}
}
package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.*;
import cn.breeze.elleai.domain.sparring.model.response.*;
import cn.hutool.db.PageResult;
import com.mybatisflex.core.paginate.Page;
import java.util.List;
/**
* 服务层。
*
* @author breeze
* @since 2024-09-18
*/
public interface ExamineService {
Page<ExamineSceneResponseModel> scenePaginQuery(ExamineSceneRequestModel request);
Page<ExamineSceneCategoryResponseModel> sceneCategoryPaginQuery(ExamineSceneCategoryRequestModel request);
/**
* 场景列表
* @return
*/
List<ExamineSceneResponseModel> sceneList(ExamineSceneRequestModel request);
List<ExamineSceneCategoryResponseModel> sceneCategoryList(ExamineSceneCategoryRequestModel request);
ExamineSceneResponseModel sceneDetail(Integer sceneId);
ExamineSceneCategoryResponseModel sceneCategoryDetail(Integer sceneCategoryId);
void updateSceneStatus(Integer sceneId, Integer status);
void updateSceneCategoryStatus(Integer sceneCategoryId, Integer status);
void deleteScene(Integer sceneId);
void deleteSceneCategory(Integer sceneCategoryId);
void saveScene(ExamineSceneSaveModel dto);
void saveSceneCategory(ExamineSceneCategorySaveModel dto);
/**
* 题目分页查询
* @return
*/
Page<ExamineQaResponseModel> examineQaPaginQuery(ExamineQaRequestModel request);
List<ExamineQaResponseModel> examineQaList(ExamineQaRequestModel request);
List<ExamineQaResponseModel> examineQaList(List<Integer> qaIds);
ExamineQaResponseModel examineQaDetail(Integer qaId);
void updateExamineQaStatus(Integer qaId, Integer status);
void deleteExamineQa(Integer qaId);
void saveExamineQa(ExamineQaSaveModel dto);
/***************************************** 对练 *****************************************/
Page<ExamineResponseModel> examinePaginQuery(ExamineRequestModel request);
List<ExamineResponseModel> examineList(ExamineRequestModel request);
ExamineResponseModel examineDetail(Integer examineId);
void updateExamineStatus(Integer examineId, Integer status);
void deleteExamine(Integer examineId);
void saveExamine(ExamineSaveModel dto);
/***************************************** 对练题目关联 *****************************************/
List<ExamineQaXrefResponseModel> examineQaXrefList(Integer examineId);
void deleteExamineQaXref(Integer examineId);
void saveExamineQaXref(Integer examineId, List<Integer> qaIdList);
/***************************************** 对练记录 *****************************************/
Page<ExamineRecordResponseModel> examineRecordPaginQuery(ExamineRecordRequestModel request);
Page<ExamineRecordResponseModel> examineRecordMobilePaginQuery(ExamineRecordRequestModel request);
List<ExamineRecordResponseModel> examineRecordList(ExamineRecordRequestModel request);
List<ExamineDetailRecordResponseModel> examineDetailRecordList(ExamineDetailRecordRequestModel request);
ExamineRecordResponseModel examineRecordDetail(Integer id);
/***************************************** 资料库分类 *****************************************/
Page<WikiCategoryResponseModel> wikiCategoryPaginQuery(WikiCategoryRequestModel request);
List<WikiCategoryResponseModel> wikiCategoryList(WikiCategoryRequestModel request);
WikiCategoryResponseModel wikiCategoryDetail(Integer id);
void updateWikiCategoryStatus(Integer id, Integer status);
void deleteWikiCategory(Integer id);
void saveWikiCategory(WikiCategorySaveModel dto);
Page<WikiResponseModel> wikiPaginQuery(WikiRequestModel request);
List<WikiResponseModel> wikiList(WikiRequestModel request);
WikiResponseModel wikiDetail(Integer id);
void updateWikiStatus(Integer id, Integer status);
void deleteWiki(Integer id);
void saveWiki(WikiSaveModel dto);
}
package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.*;
import cn.breeze.elleai.domain.sparring.model.response.*;
import cn.breeze.elleai.infra.entity.*;
import cn.breeze.elleai.infra.mapper.*;
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 lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import static cn.breeze.elleai.infra.entity.table.ExamineQaTableDef.EXAMINE_QA_ENTITY;
import static cn.breeze.elleai.infra.entity.table.ExamineQaXrefTableDef.EXAMINE_QA_XREF_ENTITY;
import static cn.breeze.elleai.infra.entity.table.ExamineSceneCategoryTableDef.EXAMINE_SCENE_CATEGORY_ENTITY;
import static cn.breeze.elleai.infra.entity.table.ExamineSceneTableDef.EXAMINE_SCENE_ENTITY;
import static cn.breeze.elleai.infra.entity.table.ExamineTableDef.EXAMINE_ENTITY;
import static cn.breeze.elleai.infra.entity.table.UserExamineDetailRecordTableDef.USER_EXAMINE_DETAIL_RECORD_ENTITY;
import static cn.breeze.elleai.infra.entity.table.UserExamineRecordTableDef.USER_EXAMINE_RECORD_ENTITY;
import static cn.breeze.elleai.infra.entity.table.WikiCategoryTableDef.WIKI_CATEGORY_ENTITY;
import static cn.breeze.elleai.infra.entity.table.WikiTableDef.WIKI_ENTITY;
/**
* 服务层实现。
*
* @author breeze
* @since 2024-09-18
*/
@Service
@RequiredArgsConstructor
public class ExamineServiceImpl implements ExamineService {
private final ExamineMapper examineMapper;
private final ExamineQaMapper qaMapper;
private final ExamineSceneMapper sceneMapper;
private final ExamineSceneCategoryMapper sceneCategoryMapper;
private final ExamineQaXrefMapper qaXrefMapper;
private final ProperNounMapper properNounMapper;
private final WikiMapper wikiMapper;
private final WikiCategoryMapper wikiCategoryMapper;
private final UserExamineRecordMapper userExamineRecordMapper;
private final UserExamineDetailRecordMapper userExamineDetailRecordMapper;
@Override
public Page<ExamineSceneResponseModel> scenePaginQuery(ExamineSceneRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.select(EXAMINE_SCENE_ENTITY.ALL_COLUMNS);
queryWrapper.from(EXAMINE_SCENE_ENTITY.getTableName());
queryWrapper.where(EXAMINE_SCENE_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(EXAMINE_SCENE_ENTITY.NAME.like("%"+request.getName()+"%"));
}
if(Objects.nonNull(request.getStatus())) {
queryWrapper.where(EXAMINE_SCENE_ENTITY.STATUS.eq(request.getStatus()));
}
Page<ExamineSceneResponseModel> page = sceneMapper.paginateAs(pageNo, pageSize, queryWrapper, ExamineSceneResponseModel.class);
return page;
}
@Override
public Page<ExamineSceneCategoryResponseModel> sceneCategoryPaginQuery(ExamineSceneCategoryRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create();
queryWrapper.select(EXAMINE_SCENE_CATEGORY_ENTITY.ALL_COLUMNS);
queryWrapper.from(EXAMINE_SCENE_CATEGORY_ENTITY.getTableName());
queryWrapper.where(EXAMINE_SCENE_CATEGORY_ENTITY.DELETED.eq(0));
if(StringUtils.isNotEmpty(request.getName())) {
queryWrapper.where(EXAMINE_SCENE_CATEGORY_ENTITY.NAME.like("%"+request.getName()+"%"));
}
if(Objects.nonNull(request.getStatus())) {
queryWrapper.where(EXAMINE_SCENE_CATEGORY_ENTITY.STATUS.eq(request.getStatus()));
}
if(Objects.nonNull(request.getSceneId())) {
queryWrapper.where(EXAMINE_SCENE_CATEGORY_ENTITY.SCENE_ID.eq(request.getSceneId()));
}
Page<ExamineSceneCategoryResponseModel> page = sceneCategoryMapper.paginateAs(pageNo, pageSize, queryWrapper, ExamineSceneCategoryResponseModel.class);
return page;
}
@Override
public List<ExamineSceneResponseModel> sceneList(ExamineSceneRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create().where(EXAMINE_SCENE_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(EXAMINE_SCENE_ENTITY.NAME.like("%"+request.getName()+"%"));
}
return sceneMapper.selectListByQueryAs(queryWrapper, ExamineSceneResponseModel.class);
}
@Override
public List<ExamineSceneCategoryResponseModel> sceneCategoryList(ExamineSceneCategoryRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create().where(EXAMINE_SCENE_CATEGORY_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(EXAMINE_SCENE_CATEGORY_ENTITY.NAME.like("%"+request.getName()+"%"));
}
return sceneCategoryMapper.selectListByQueryAs(queryWrapper, ExamineSceneCategoryResponseModel.class);
}
@Override
public ExamineSceneResponseModel sceneDetail(Integer sceneId) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_SCENE_ENTITY.ID.eq(sceneId).and(EXAMINE_SCENE_ENTITY.DELETED.eq(0)));
return sceneMapper.selectOneByQueryAs(queryWrapper, ExamineSceneResponseModel.class);
}
@Override
public ExamineSceneCategoryResponseModel sceneCategoryDetail(Integer sceneCategoryId) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_SCENE_CATEGORY_ENTITY.ID.eq(sceneCategoryId).and(EXAMINE_SCENE_CATEGORY_ENTITY.DELETED.eq(0)));
return sceneCategoryMapper.selectOneByQueryAs(queryWrapper, ExamineSceneCategoryResponseModel.class);
}
@Override
public void updateSceneStatus(Integer sceneId, Integer status) {
UpdateChain.of(ExamineSceneEntity.class)
.set(EXAMINE_SCENE_ENTITY.STATUS, status)
.set(EXAMINE_SCENE_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(EXAMINE_SCENE_ENTITY.ID.eq(sceneId))
.update();
}
@Override
public void updateSceneCategoryStatus(Integer sceneCategoryId, Integer status) {
UpdateChain.of(ExamineSceneCategoryEntity.class)
.set(EXAMINE_SCENE_CATEGORY_ENTITY.STATUS, status)
.set(EXAMINE_SCENE_CATEGORY_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(EXAMINE_SCENE_CATEGORY_ENTITY.ID.eq(sceneCategoryId))
.update();
}
@Override
public void deleteScene(Integer sceneId) {
UpdateChain.of(ExamineSceneEntity.class)
.set(EXAMINE_SCENE_ENTITY.DELETED, 1)
.set(EXAMINE_SCENE_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(EXAMINE_SCENE_ENTITY.ID.eq(sceneId))
.update();
}
@Override
public void deleteSceneCategory(Integer sceneCategoryId) {
UpdateChain.of(ExamineSceneCategoryEntity.class)
.set(EXAMINE_SCENE_CATEGORY_ENTITY.DELETED, 1)
.set(EXAMINE_SCENE_CATEGORY_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(EXAMINE_SCENE_CATEGORY_ENTITY.ID.eq(sceneCategoryId))
.update();
}
@Override
public void saveScene(ExamineSceneSaveModel dto) {
ExamineSceneEntity entity = BeanUtil.toBean(dto, ExamineSceneEntity.class);
entity.setUpdateTime(LocalDateTime.now());
if(Objects.isNull(entity.getId())) {
entity.setStatus(1);
entity.setDeleted(0);
}
sceneMapper.insertOrUpdateSelective(entity);
}
@Override
public void saveSceneCategory(ExamineSceneCategorySaveModel dto) {
ExamineSceneCategoryEntity entity = BeanUtil.toBean(dto, ExamineSceneCategoryEntity.class);
entity.setUpdateTime(LocalDateTime.now());
if(Objects.isNull(entity.getId())) {
entity.setStatus(1);
entity.setDeleted(0);
}
sceneCategoryMapper.insertOrUpdateSelective(entity);
}
@Override
public Page<ExamineQaResponseModel> examineQaPaginQuery(ExamineQaRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_QA_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(EXAMINE_QA_ENTITY.QUESTION.like("%"+request.getName()+"%"));
}
Page<ExamineQaResponseModel> page = qaMapper.paginateAs(pageNo, pageSize, queryWrapper, ExamineQaResponseModel.class);
return page;
}
@Override
public List<ExamineQaResponseModel> examineQaList(ExamineQaRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_QA_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(EXAMINE_QA_ENTITY.QUESTION.like("%"+request.getName()+"%"));
}
return qaMapper.selectListByQueryAs(queryWrapper, ExamineQaResponseModel.class);
}
@Override
public List<ExamineQaResponseModel> examineQaList(List<Integer> qaIds) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_QA_ENTITY.ID.in(qaIds).and(EXAMINE_QA_ENTITY.DELETED.eq(0)));
return qaMapper.selectListByQueryAs(queryWrapper, ExamineQaResponseModel.class);
}
@Override
public ExamineQaResponseModel examineQaDetail(Integer qaId) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_QA_ENTITY.ID.eq(qaId).and(EXAMINE_QA_ENTITY.DELETED.eq(0)));
return qaMapper.selectOneByQueryAs(queryWrapper, ExamineQaResponseModel.class);
}
private void xx() {
// @Select(value = "select max(question_id) from eleh_session_qa_record where tenant = #{tenant} and type = 0 and session_id = #{sessionId} and user_id = #{userId}")
// Long selectSessionMaxQuestionId(@Param("examine_id") Integer examineId, @Param("sessionId") String sessionId, @Param("userId") String userId);
}
@Override
public void updateExamineQaStatus(Integer qaId, Integer status) {
UpdateChain.of(ExamineQaEntity.class)
.set(EXAMINE_QA_ENTITY.STATUS, status)
.set(EXAMINE_QA_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(EXAMINE_QA_ENTITY.ID.eq(qaId))
.update();
}
@Override
public void deleteExamineQa(Integer qaId) {
UpdateChain.of(ExamineQaEntity.class)
.set(EXAMINE_QA_ENTITY.DELETED, 1)
.set(EXAMINE_QA_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(EXAMINE_QA_ENTITY.ID.eq(qaId))
.update();
}
@Override
public void saveExamineQa(ExamineQaSaveModel dto) {
ExamineQaEntity entity = BeanUtil.toBean(dto, ExamineQaEntity.class);
entity.setUpdateTime(LocalDateTime.now());
if(Objects.isNull(entity.getId())) {
entity.setStatus(1);
entity.setDeleted(0);
}
qaMapper.insertOrUpdateSelective(entity);
}
@Override
public Page<ExamineResponseModel> examinePaginQuery(ExamineRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(EXAMINE_ENTITY.NAME.like("%"+request.getName()+"%"));
}
if(Objects.nonNull(request.getStatus())) {
queryWrapper.where(EXAMINE_ENTITY.STATUS.eq(request.getStatus()));
}
if(Objects.nonNull(request.getCategoryId())) {
queryWrapper.where(EXAMINE_ENTITY.CATEGORY_ID.eq(request.getCategoryId()));
}
Page<ExamineResponseModel> page = examineMapper.paginateAs(pageNo, pageSize, queryWrapper, ExamineResponseModel.class);
return page;
}
@Override
public List<ExamineResponseModel> examineList(ExamineRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(EXAMINE_ENTITY.NAME.like("%"+request.getName()+"%"));
}
return examineMapper.selectListByQueryAs(queryWrapper, ExamineResponseModel.class);
}
@Override
public ExamineResponseModel examineDetail(Integer examineId) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_ENTITY.ID.eq(examineId).and(EXAMINE_ENTITY.DELETED.eq(0)));
return examineMapper.selectOneByQueryAs(queryWrapper, ExamineResponseModel.class);
}
@Override
public void updateExamineStatus(Integer examineId, Integer status) {
UpdateChain.of(ExamineEntity.class)
.set(EXAMINE_ENTITY.STATUS, status)
.set(EXAMINE_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(EXAMINE_ENTITY.ID.eq(examineId))
.update();
}
@Override
public void deleteExamine(Integer examineId) {
UpdateChain.of(ExamineEntity.class)
.set(EXAMINE_ENTITY.DELETED, 1)
.set(EXAMINE_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(EXAMINE_ENTITY.ID.eq(examineId))
.update();
}
@Override
public void saveExamine(ExamineSaveModel dto) {
ExamineEntity entity = BeanUtil.toBean(dto, ExamineEntity.class);
entity.setUpdateTime(LocalDateTime.now());
if(Objects.isNull(entity.getId())) {
entity.setStatus(1);
entity.setDeleted(0);
}
examineMapper.insertOrUpdateSelective(entity);
dto.setId(entity.getId());
}
@Override
public List<ExamineQaXrefResponseModel> examineQaXrefList(Integer examineId) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(EXAMINE_QA_XREF_ENTITY.EXAMINE_ID.eq(examineId).and(EXAMINE_QA_XREF_ENTITY.DELETED.eq(0)));
return qaXrefMapper.selectListByQueryAs(queryWrapper, ExamineQaXrefResponseModel.class);
}
@Override
public void deleteExamineQaXref(Integer examineId) {
UpdateChain.of(ExamineQaXrefEntity.class)
.set(EXAMINE_QA_XREF_ENTITY.DELETED, 1)
.set(EXAMINE_QA_XREF_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(EXAMINE_QA_XREF_ENTITY.EXAMINE_ID.eq(examineId).and(EXAMINE_QA_XREF_ENTITY.DELETED.eq(0)))
.update();
}
@Override
public void saveExamineQaXref(Integer examineId, List<Integer> qaIdList) {
List<ExamineQaXrefEntity> xrefs = new ArrayList<>();
qaIdList.forEach(qaId -> {
ExamineQaXrefEntity xref = new ExamineQaXrefEntity();
xref.setExamineId(examineId);
xref.setQaId(qaId);
xref.setDeleted(0);
xref.setCreateTime(LocalDateTime.now());
xref.setUpdateTime(LocalDateTime.now());
xrefs.add(xref);
});
qaXrefMapper.insertBatchSelective(xrefs);
}
@Override
public Page<ExamineRecordResponseModel> examineRecordPaginQuery(ExamineRecordRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create();
if(StrUtil.isNotEmpty(request.getUserId())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.USER_ID.eq(request.getUserId()));
}
if(Objects.nonNull(request.getExamineMode())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.EXAMINE_MODE.eq(request.getExamineMode()));
}
if(Objects.nonNull(request.getExamineId())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.EXAMINE_ID.eq(request.getExamineId()));
}
queryWrapper.orderBy(USER_EXAMINE_RECORD_ENTITY.CREATE_TIME, false);
Page<ExamineRecordResponseModel> page = userExamineRecordMapper.paginateAs(pageNo, pageSize, queryWrapper, ExamineRecordResponseModel.class);
return page;
}
@Override
public Page<ExamineRecordResponseModel> examineRecordMobilePaginQuery(ExamineRecordRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create();
if(StrUtil.isNotEmpty(request.getUserId())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.USER_ID.eq(request.getUserId()));
}
if(Objects.nonNull(request.getExamineMode())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.EXAMINE_MODE.eq(request.getExamineMode()));
}
if(Objects.nonNull(request.getExamineId())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.EXAMINE_ID.eq(request.getExamineId()));
}
Page<ExamineRecordResponseModel> page = userExamineRecordMapper.paginateAs(pageNo, pageSize, queryWrapper, ExamineRecordResponseModel.class);
return page;
}
@Override
public List<ExamineRecordResponseModel> examineRecordList(ExamineRecordRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create();
if(StrUtil.isNotEmpty(request.getUserId())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.USER_ID.eq(request.getUserId()));
}
if(Objects.nonNull(request.getExamineMode())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.EXAMINE_MODE.eq(request.getExamineMode()));
}
if(Objects.nonNull(request.getExamineId())) {
queryWrapper.where(USER_EXAMINE_RECORD_ENTITY.EXAMINE_ID.eq(request.getExamineId()));
}
return userExamineRecordMapper.selectListByQueryAs(queryWrapper, ExamineRecordResponseModel.class);
}
@Override
public List<ExamineDetailRecordResponseModel> examineDetailRecordList(ExamineDetailRecordRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create();
if(Objects.nonNull(request.getRecordId())) {
queryWrapper.where(USER_EXAMINE_DETAIL_RECORD_ENTITY.RECORD_ID.eq(request.getRecordId()));
}
queryWrapper.orderBy(USER_EXAMINE_DETAIL_RECORD_ENTITY.CREATE_TIME, false);
return userExamineDetailRecordMapper.selectListByQueryAs(queryWrapper, ExamineDetailRecordResponseModel.class);
}
@Override
public ExamineRecordResponseModel examineRecordDetail(Integer id) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(USER_EXAMINE_RECORD_ENTITY.ID.eq(id));
return userExamineRecordMapper.selectOneByQueryAs(queryWrapper, ExamineRecordResponseModel.class);
}
@Override
public Page<WikiCategoryResponseModel> wikiCategoryPaginQuery(WikiCategoryRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create()
.where(WIKI_CATEGORY_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(WIKI_CATEGORY_ENTITY.NAME.like("%"+request.getName()+"%"));
}
Page<WikiCategoryResponseModel> page = wikiCategoryMapper.paginateAs(pageNo, pageSize, queryWrapper, WikiCategoryResponseModel.class);
return page;
}
@Override
public List<WikiCategoryResponseModel> wikiCategoryList(WikiCategoryRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(WIKI_CATEGORY_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(WIKI_CATEGORY_ENTITY.NAME.like("%"+request.getName()+"%"));
}
return wikiCategoryMapper.selectListByQueryAs(queryWrapper, WikiCategoryResponseModel.class);
}
@Override
public WikiCategoryResponseModel wikiCategoryDetail(Integer id) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(WIKI_CATEGORY_ENTITY.ID.eq(id).and(WIKI_CATEGORY_ENTITY.DELETED.eq(0)));
return wikiCategoryMapper.selectOneByQueryAs(queryWrapper, WikiCategoryResponseModel.class);
}
@Override
public void updateWikiCategoryStatus(Integer id, Integer status) {
UpdateChain.of(WikiCategoryEntity.class)
.set(WIKI_CATEGORY_ENTITY.STATUS, status)
.set(WIKI_CATEGORY_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(WIKI_CATEGORY_ENTITY.ID.eq(id))
.update();
}
@Override
public void deleteWikiCategory(Integer id) {
UpdateChain.of(WikiCategoryEntity.class)
.set(WIKI_CATEGORY_ENTITY.DELETED, 1)
.set(WIKI_CATEGORY_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(WIKI_CATEGORY_ENTITY.ID.eq(id))
.update();
}
@Override
public void saveWikiCategory(WikiCategorySaveModel dto) {
WikiCategoryEntity entity = BeanUtil.toBean(dto, WikiCategoryEntity.class);
entity.setUpdateTime(LocalDateTime.now());
if(Objects.isNull(entity.getId())) {
entity.setStatus(1);
entity.setDeleted(0);
}
wikiCategoryMapper.insertOrUpdateSelective(entity);
}
@Override
public Page<WikiResponseModel> wikiPaginQuery(WikiRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
Integer pageSize = ObjectUtil.defaultIfNull(request.getPageSize(), 10);
QueryWrapper queryWrapper = QueryWrapper.create()
.where(WIKI_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(WIKI_ENTITY.NAME.like("%"+request.getName()+"%"));
}
Page<WikiResponseModel> page = wikiMapper.paginateAs(pageNo, pageSize, queryWrapper, WikiResponseModel.class);
return page;
}
@Override
public List<WikiResponseModel> wikiList(WikiRequestModel request) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(WIKI_ENTITY.DELETED.eq(0));
if(StrUtil.isNotEmpty(request.getName())) {
queryWrapper.where(WIKI_ENTITY.NAME.like("%"+request.getName()+"%"));
}
return wikiMapper.selectListByQueryAs(queryWrapper, WikiResponseModel.class);
}
@Override
public WikiResponseModel wikiDetail(Integer id) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(WIKI_ENTITY.ID.eq(id).and(WIKI_ENTITY.DELETED.eq(0)));
return wikiMapper.selectOneByQueryAs(queryWrapper, WikiResponseModel.class);
}
@Override
public void updateWikiStatus(Integer id, Integer status) {
UpdateChain.of(WikiEntity.class)
.set(WIKI_ENTITY.STATUS, status)
.set(WIKI_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(WIKI_ENTITY.ID.eq(id))
.update();
}
@Override
public void deleteWiki(Integer id) {
UpdateChain.of(WikiEntity.class)
.set(WIKI_ENTITY.DELETED, 1)
.set(WIKI_ENTITY.UPDATE_TIME, LocalDateTime.now())
.where(WIKI_ENTITY.ID.eq(id))
.update();
}
@Override
public void saveWiki(WikiSaveModel dto) {
WikiEntity entity = BeanUtil.toBean(dto, WikiEntity.class);
entity.setUpdateTime(LocalDateTime.now());
if(Objects.isNull(entity.getId())) {
entity.setStatus(1);
entity.setDeleted(0);
}
wikiMapper.insertOrUpdateSelective(entity);
}
}
...@@ -23,78 +23,73 @@ import lombok.NoArgsConstructor; ...@@ -23,78 +23,73 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table("auth_client") @Table("ai_examine")
public class ClientEntity implements Serializable { public class ExamineEntity implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto) @Id(keyType = KeyType.Auto)
private Long id; private Integer id;
/** /**
* 租户ID * 对练名称
*/ */
private Long tenant; private String name;
/** /**
* 平台self自建,tiktok,wx_mp,wx_ma等等 * 对练描述
*/ */
private String platform; private String description;
/** /**
* 应用编码 * 海报图
*/ */
private String appCode; private String poster;
/** /**
* 应用秘钥 * 对练场景ID
*/ */
private String appSecret; private Integer sceneId;
/** /**
* 应用描述 * 对练分类ID
*/ */
private String description; private Integer categoryId;
/** /**
* 授权方式 * 开始时间
*/ */
private String grantType; private LocalDateTime startTime;
/** /**
* 签名字符串 * 结束时间
*/ */
private String secretKey; private LocalDateTime endTime;
/** /**
* 令牌过期时间,单位秒 * 状态(0禁用 1启用)
*/ */
private Integer expiresIn; private Integer status;
/**
* 授权范围
*/
private String scope;
/** /**
* 是否启用自动注册用户,0停用,1启用 * 题目数量
*/ */
private Integer autoRegister; private Integer qaNum;
/** /**
* 状态,0停用,1启用 * 是否删除(0否 1是)
*/ */
private Integer status; private Integer deleted;
/** /**
* 创建时间 * 创建时间
*/ */
private LocalDateTime createAt; private LocalDateTime createTime;
/** /**
* 修改时间 * 更新时间
*/ */
private LocalDateTime updateAt; private LocalDateTime updateTime;
} }
...@@ -23,48 +23,48 @@ import lombok.NoArgsConstructor; ...@@ -23,48 +23,48 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table("auth_client_sms_sense") @Table("ai_examine_qa")
public class ClientSmsSenseEntity implements Serializable { public class ExamineQaEntity implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto) @Id(keyType = KeyType.Auto)
private Long id; private Integer id;
/** /**
* 租户ID * 问题
*/ */
private Long tenant; private String question;
/** /**
* 场景 * 答案
*/ */
private String sense; private String answer;
/** /**
* 模板ID * 对练分类ID
*/ */
private String templateId; private Integer categoryId;
/** /**
* 模板变量 * 状态(0禁用 1启用)
*/ */
private String params; private Integer status;
/** /**
* 状态,0停用,1启用 * 是否删除(0否 1是)
*/ */
private Integer status; private Integer deleted;
/** /**
* 创建时间 * 创建时间
*/ */
private LocalDateTime createAt; private LocalDateTime createTime;
/** /**
* 更新时间 * 更新时间
*/ */
private LocalDateTime updateAt; private LocalDateTime updateTime;
} }
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.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类。
*
* @author breeze
* @since 2024-09-18
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ai_examine_qa_xref")
public class ExamineQaXrefEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 对练ID
*/
private Integer examineId;
/**
* 题目ID
*/
private Integer qaId;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
...@@ -23,58 +23,58 @@ import lombok.NoArgsConstructor; ...@@ -23,58 +23,58 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table("auth_client_user") @Table("ai_examine_scene_category")
public class ClientUserEntity implements Serializable { public class ExamineSceneCategoryEntity implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto) @Id(keyType = KeyType.Auto)
private Long id; private Integer id;
/** /**
* 应用ID * 分类名称
*/ */
private Long clientId; private String name;
/** /**
* 开放ID,自由平台或者外部第三方平台都有 * 场景ID描述
*/ */
private String openId; private Integer sceneId;
/** /**
* 用户名 * 可见角色IDS
*/ */
private String username; private String visibleRoleIds;
/** /**
* 密码 * 分类描述
*/ */
private String password; private String description;
/** /**
* 邮箱 * 状态(0禁用 1启用)
*/ */
private String email; private Integer status;
/** /**
* 手机号码 * 是否删除(0否 1是)
*/ */
private String mobile; private Integer deleted;
/** /**
* 状态0停用,1启用 * 创建时间
*/ */
private Integer status; private LocalDateTime createTime;
/** /**
* 创建时间 * 更新时间
*/ */
private LocalDateTime createAt; private LocalDateTime updateTime;
/** /**
* 修改时间 * 父级分类ID
*/ */
private LocalDateTime updateAt; private Integer parentId;
} }
...@@ -23,43 +23,48 @@ import lombok.NoArgsConstructor; ...@@ -23,43 +23,48 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table("auth_client_endpoint") @Table("ai_examine_scene")
public class ClientEndpointEntity implements Serializable { public class ExamineSceneEntity implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto) @Id(keyType = KeyType.Auto)
private Long id; private Integer id;
/** /**
* 客户端应用ID * 场景名称
*/ */
private Long clientId; private String name;
/** /**
* 客户端入口 * 场景描述
*/ */
private String endpoint; private String description;
/** /**
* 描述 * 场景海报图
*/ */
private String description; private String poster;
/** /**
* 状态,0停用,1启用 * 状态(0禁用 1启用)
*/ */
private Integer status; private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/** /**
* 创建时间 * 创建时间
*/ */
private LocalDateTime createAt; private LocalDateTime createTime;
/** /**
* 更新时间 * 更新时间
*/ */
private LocalDateTime updateAt; private LocalDateTime updateTime;
} }
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.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类。
*
* @author breeze
* @since 2024-09-18
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ai_proper_noun")
public class ProperNounEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 专有名词名称
*/
private String name;
/**
* 相似词,以逗号分隔
*/
private String similarWords;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
...@@ -23,63 +23,58 @@ import lombok.NoArgsConstructor; ...@@ -23,63 +23,58 @@ import lombok.NoArgsConstructor;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table("auth_client_sms") @Table("ai_qa_assistant")
public class ClientSmsEntity implements Serializable { public class QaAssistantEntity implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto) @Id(keyType = KeyType.Auto)
private Long id; private Integer id;
/** /**
* 租户ID * 助手名称
*/ */
private Long tenant; private String name;
/** /**
* 访问秘钥 * 助手描述
*/ */
private String ak; private String description;
/** /**
* 秘钥 * 助手图标
*/ */
private String sk; private String iconUrl;
/** /**
* 区域 * 知识库分类IDS,以逗号分隔
*/ */
private String region; private String categoryIds;
/** /**
* 接入点 * 可见角色IDS,以逗号分隔
*/ */
private String endpoint; private String visibleRoleIds;
/** /**
* 签名 * 状态(0禁用 1启用)
*/ */
private String signName; private Integer status;
/**
* 时间间隔
*/
private Integer interval;
/** /**
* 状态0停用,1启用 * 是否删除(0否 1是)
*/ */
private Integer status; private Integer deleted;
/** /**
* 创建时间 * 创建时间
*/ */
private LocalDateTime createAt; private LocalDateTime createTime;
/** /**
* 修改时间 * 更新时间
*/ */
private LocalDateTime updateAt; private LocalDateTime updateTime;
} }
package cn.breeze.elleai.infra.entity;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 实体类。
*
* @author breeze
* @since 2024-09-18
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ai_user_chat_completion")
public class UserChatCompletionEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 用户ID
*/
private String userId;
/**
* 会话ID
*/
private String sessionId;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
}
package cn.breeze.elleai.infra.entity;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 实体类。
*
* @author breeze
* @since 2024-09-18
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ai_user_chat_completion_history")
public class UserChatCompletionHistoryEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 会话ID
*/
private Integer chatCompletionId;
/**
* 类型(0用户提问 1AI回答)
*/
private Integer type;
/**
* 内容
*/
private String content;
/**
* 创建时间
*/
private LocalDateTime createTime;
}
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.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类。
*
* @author breeze
* @since 2024-09-18
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ai_user_examine_detail_record")
public class UserExamineDetailRecordEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 对练记录ID
*/
private Integer recordId;
/**
* 题目ID
*/
private Integer qaId;
/**
* 评分
*/
private Float score;
/**
* 评价
*/
private String evaluation;
/**
* 员工回答
*/
private String answer;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
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.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类。
*
* @author breeze
* @since 2024-09-18
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ai_user_examine_record")
public class UserExamineRecordEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 用户ID
*/
private String userId;
/**
* 会话ID
*/
private String sessionId;
/**
* 对练ID
*/
private Integer examineId;
/**
* 对练模式(0练习 1对练)
*/
private Integer examineMode;
/**
* 已答题数量
*/
private Integer answeredNum;
/**
* 综合评分
*/
private Float overallScore;
/**
* 综合评价
*/
private String overallEvaluation;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
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.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类。
*
* @author breeze
* @since 2024-09-18
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ai_wiki_category")
public class WikiCategoryEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 分类名称
*/
private String name;
/**
* 分类描述
*/
private String description;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 父级分类ID
*/
private Integer parentId;
}
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.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 实体类。
*
* @author breeze
* @since 2024-09-18
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ai_wiki")
public class WikiEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 资料名称
*/
private String name;
/**
* 资料描述
*/
private String description;
/**
* 资料海报图
*/
private String poster;
/**
* 资料文件URL
*/
private String fileUrl;
/**
* 资料分类ID
*/
private Integer wikiCategoryId;
/**
* 场景分类ID
*/
private Integer sceneCategoryId;
/**
* 富文本详情
*/
private String detail;
/**
* 状态(0禁用 1启用)
*/
private Integer status;
/**
* 是否删除(0否 1是)
*/
private Integer deleted;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
...@@ -11,7 +11,7 @@ import java.io.Serial; ...@@ -11,7 +11,7 @@ import java.io.Serial;
* @author breeze * @author breeze
* @since 2024-09-18 * @since 2024-09-18
*/ */
public class ClientSmsSenseTableDef extends TableDef { public class ExamineQaTableDef extends TableDef {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -19,45 +19,45 @@ public class ClientSmsSenseTableDef extends TableDef { ...@@ -19,45 +19,45 @@ public class ClientSmsSenseTableDef extends TableDef {
/** /**
* *
*/ */
public static final ClientSmsSenseTableDef CLIENT_SMS_SENSE_ENTITY = new ClientSmsSenseTableDef(); public static final ExamineQaTableDef EXAMINE_QA_ENTITY = new ExamineQaTableDef();
public final QueryColumn ID = new QueryColumn(this, "id"); public final QueryColumn ID = new QueryColumn(this, "id");
/** /**
* 场景 * 答案
*/ */
public final QueryColumn SENSE = new QueryColumn(this, "sense"); public final QueryColumn ANSWER = new QueryColumn(this, "answer");
/** /**
* 模板变量 * 状态(0禁用 1启用)
*/ */
public final QueryColumn PARAMS = new QueryColumn(this, "params"); public final QueryColumn STATUS = new QueryColumn(this, "status");
/** /**
* 状态,0停用,1启用 * 是否删除(0否 1是)
*/ */
public final QueryColumn STATUS = new QueryColumn(this, "status"); public final QueryColumn DELETED = new QueryColumn(this, "deleted");
/** /**
* 租户ID * 问题
*/ */
public final QueryColumn TENANT = new QueryColumn(this, "tenant"); public final QueryColumn QUESTION = new QueryColumn(this, "question");
/** /**
* 创建时间 * 对练分类ID
*/ */
public final QueryColumn CREATE_AT = new QueryColumn(this, "create_at"); public final QueryColumn CATEGORY_ID = new QueryColumn(this, "category_id");
/** /**
* 更新时间 * 创建时间
*/ */
public final QueryColumn UPDATE_AT = new QueryColumn(this, "update_at"); public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/** /**
* 模板ID * 更新时间
*/ */
public final QueryColumn TEMPLATE_ID = new QueryColumn(this, "template_id"); public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/** /**
* 所有字段。 * 所有字段。
...@@ -67,19 +67,19 @@ public class ClientSmsSenseTableDef extends TableDef { ...@@ -67,19 +67,19 @@ public class ClientSmsSenseTableDef extends TableDef {
/** /**
* 默认字段,不包含逻辑删除或者 large 等字段。 * 默认字段,不包含逻辑删除或者 large 等字段。
*/ */
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, TENANT, SENSE, TEMPLATE_ID, PARAMS, STATUS, CREATE_AT, UPDATE_AT}; public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, QUESTION, ANSWER, CATEGORY_ID, STATUS, DELETED, CREATE_TIME, UPDATE_TIME};
public ClientSmsSenseTableDef() { public ExamineQaTableDef() {
super("", "auth_client_sms_sense"); super("", "ai_examine_qa");
} }
private ClientSmsSenseTableDef(String schema, String name, String alisa) { private ExamineQaTableDef(String schema, String name, String alisa) {
super(schema, name, alisa); super(schema, name, alisa);
} }
public ClientSmsSenseTableDef as(String alias) { public ExamineQaTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias; String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new ClientSmsSenseTableDef("", "auth_client_sms_sense", alias)); return getCache(key, k -> new ExamineQaTableDef("", "ai_examine_qa", 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-09-18
*/
public class ExamineQaXrefTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final ExamineQaXrefTableDef EXAMINE_QA_XREF_ENTITY = new ExamineQaXrefTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
/**
* 题目ID
*/
public final QueryColumn QA_ID = new QueryColumn(this, "qa_id");
/**
* 是否删除(0否 1是)
*/
public final QueryColumn DELETED = new QueryColumn(this, "deleted");
/**
* 对练ID
*/
public final QueryColumn EXAMINE_ID = new QueryColumn(this, "examine_id");
/**
* 创建时间
*/
public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/**
* 更新时间
*/
public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, EXAMINE_ID, QA_ID, DELETED, CREATE_TIME, UPDATE_TIME};
public ExamineQaXrefTableDef() {
super("", "ai_examine_qa_xref");
}
private ExamineQaXrefTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public ExamineQaXrefTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new ExamineQaXrefTableDef("", "ai_examine_qa_xref", 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-09-18
*/
public class ExamineSceneCategoryTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final ExamineSceneCategoryTableDef EXAMINE_SCENE_CATEGORY_ENTITY = new ExamineSceneCategoryTableDef();
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");
/**
* 是否删除(0否 1是)
*/
public final QueryColumn DELETED = new QueryColumn(this, "deleted");
/**
* 场景ID描述
*/
public final QueryColumn SCENE_ID = new QueryColumn(this, "scene_id");
/**
* 父级分类ID
*/
public final QueryColumn PARENT_ID = new QueryColumn(this, "parent_id");
/**
* 创建时间
*/
public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/**
* 更新时间
*/
public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/**
* 分类描述
*/
public final QueryColumn DESCRIPTION = new QueryColumn(this, "description");
/**
* 可见角色IDS
*/
public final QueryColumn VISIBLE_ROLE_IDS = new QueryColumn(this, "visible_role_ids");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, NAME, SCENE_ID, VISIBLE_ROLE_IDS, DESCRIPTION, STATUS, DELETED, CREATE_TIME, UPDATE_TIME, PARENT_ID};
public ExamineSceneCategoryTableDef() {
super("", "ai_examine_scene_category");
}
private ExamineSceneCategoryTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public ExamineSceneCategoryTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new ExamineSceneCategoryTableDef("", "ai_examine_scene_category", alias));
}
}
...@@ -11,7 +11,7 @@ import java.io.Serial; ...@@ -11,7 +11,7 @@ import java.io.Serial;
* @author breeze * @author breeze
* @since 2024-09-18 * @since 2024-09-18
*/ */
public class ClientEndpointTableDef extends TableDef { public class ExamineSceneTableDef extends TableDef {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -19,38 +19,43 @@ public class ClientEndpointTableDef extends TableDef { ...@@ -19,38 +19,43 @@ public class ClientEndpointTableDef extends TableDef {
/** /**
* *
*/ */
public static final ClientEndpointTableDef CLIENT_ENDPOINT_ENTITY = new ClientEndpointTableDef(); public static final ExamineSceneTableDef EXAMINE_SCENE_ENTITY = new ExamineSceneTableDef();
public final QueryColumn ID = new QueryColumn(this, "id"); public final QueryColumn ID = new QueryColumn(this, "id");
/** /**
* 状态,0停用,1启用 * 场景名称
*/ */
public final QueryColumn STATUS = new QueryColumn(this, "status"); public final QueryColumn NAME = new QueryColumn(this, "name");
/** /**
* 客户端应用ID * 场景海报图
*/ */
public final QueryColumn CLIENT_ID = new QueryColumn(this, "client_id"); public final QueryColumn POSTER = new QueryColumn(this, "poster");
/** /**
* 创建时间 * 状态(0禁用 1启用)
*/ */
public final QueryColumn CREATE_AT = new QueryColumn(this, "create_at"); public final QueryColumn STATUS = new QueryColumn(this, "status");
/** /**
* 客户端入口 * 是否删除(0否 1是)
*/
public final QueryColumn DELETED = new QueryColumn(this, "deleted");
/**
* 创建时间
*/ */
public final QueryColumn ENDPOINT = new QueryColumn(this, "endpoint"); public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/** /**
* 更新时间 * 更新时间
*/ */
public final QueryColumn UPDATE_AT = new QueryColumn(this, "update_at"); public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/** /**
* 描述 * 场景描述
*/ */
public final QueryColumn DESCRIPTION = new QueryColumn(this, "description"); public final QueryColumn DESCRIPTION = new QueryColumn(this, "description");
...@@ -62,19 +67,19 @@ public class ClientEndpointTableDef extends TableDef { ...@@ -62,19 +67,19 @@ public class ClientEndpointTableDef extends TableDef {
/** /**
* 默认字段,不包含逻辑删除或者 large 等字段。 * 默认字段,不包含逻辑删除或者 large 等字段。
*/ */
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, CLIENT_ID, ENDPOINT, DESCRIPTION, STATUS, CREATE_AT, UPDATE_AT}; public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, NAME, DESCRIPTION, POSTER, STATUS, DELETED, CREATE_TIME, UPDATE_TIME};
public ClientEndpointTableDef() { public ExamineSceneTableDef() {
super("", "auth_client_endpoint"); super("", "ai_examine_scene");
} }
private ClientEndpointTableDef(String schema, String name, String alisa) { private ExamineSceneTableDef(String schema, String name, String alisa) {
super(schema, name, alisa); super(schema, name, alisa);
} }
public ClientEndpointTableDef as(String alias) { public ExamineSceneTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias; String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new ClientEndpointTableDef("", "auth_client_endpoint", alias)); return getCache(key, k -> new ExamineSceneTableDef("", "ai_examine_scene", 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-09-18
*/
public class ExamineTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final ExamineTableDef EXAMINE_ENTITY = new ExamineTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
/**
* 对练名称
*/
public final QueryColumn NAME = new QueryColumn(this, "name");
/**
* 题目数量
*/
public final QueryColumn QA_NUM = new QueryColumn(this, "qa_num");
/**
* 海报图
*/
public final QueryColumn POSTER = new QueryColumn(this, "poster");
/**
* 状态(0禁用 1启用)
*/
public final QueryColumn STATUS = new QueryColumn(this, "status");
/**
* 是否删除(0否 1是)
*/
public final QueryColumn DELETED = new QueryColumn(this, "deleted");
/**
* 结束时间
*/
public final QueryColumn END_TIME = new QueryColumn(this, "end_time");
/**
* 对练场景ID
*/
public final QueryColumn SCENE_ID = new QueryColumn(this, "scene_id");
/**
* 开始时间
*/
public final QueryColumn START_TIME = new QueryColumn(this, "start_time");
/**
* 对练分类ID
*/
public final QueryColumn CATEGORY_ID = new QueryColumn(this, "category_id");
/**
* 创建时间
*/
public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/**
* 更新时间
*/
public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/**
* 对练描述
*/
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, POSTER, SCENE_ID, CATEGORY_ID, START_TIME, END_TIME, STATUS, QA_NUM, DELETED, CREATE_TIME, UPDATE_TIME};
public ExamineTableDef() {
super("", "ai_examine");
}
private ExamineTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public ExamineTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new ExamineTableDef("", "ai_examine", 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-09-18
*/
public class ProperNounTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final ProperNounTableDef PROPER_NOUN_ENTITY = new ProperNounTableDef();
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");
/**
* 是否删除(0否 1是)
*/
public final QueryColumn DELETED = new QueryColumn(this, "deleted");
/**
* 创建时间
*/
public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/**
* 更新时间
*/
public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/**
* 相似词,以逗号分隔
*/
public final QueryColumn SIMILAR_WORDS = new QueryColumn(this, "similar_words");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, NAME, SIMILAR_WORDS, STATUS, DELETED, CREATE_TIME, UPDATE_TIME};
public ProperNounTableDef() {
super("", "ai_proper_noun");
}
private ProperNounTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public ProperNounTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new ProperNounTableDef("", "ai_proper_noun", alias));
}
}
...@@ -11,7 +11,7 @@ import java.io.Serial; ...@@ -11,7 +11,7 @@ import java.io.Serial;
* @author breeze * @author breeze
* @since 2024-09-18 * @since 2024-09-18
*/ */
public class ClientSmsTableDef extends TableDef { public class QaAssistantTableDef extends TableDef {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -19,60 +19,55 @@ public class ClientSmsTableDef extends TableDef { ...@@ -19,60 +19,55 @@ public class ClientSmsTableDef extends TableDef {
/** /**
* *
*/ */
public static final ClientSmsTableDef CLIENT_SMS_ENTITY = new ClientSmsTableDef(); public static final QaAssistantTableDef QA_ASSISTANT_ENTITY = new QaAssistantTableDef();
/**
* 访问秘钥
*/
public final QueryColumn AK = new QueryColumn(this, "ak");
public final QueryColumn ID = new QueryColumn(this, "id"); public final QueryColumn ID = new QueryColumn(this, "id");
/** /**
* 秘钥 * 助手名称
*/ */
public final QueryColumn SK = new QueryColumn(this, "sk"); public final QueryColumn NAME = new QueryColumn(this, "name");
/** /**
* 区域 * 状态(0禁用 1启用)
*/ */
public final QueryColumn REGION = new QueryColumn(this, "region"); public final QueryColumn STATUS = new QueryColumn(this, "status");
/** /**
* 状态0停用,1启用 * 是否删除(0否 1是)
*/ */
public final QueryColumn STATUS = new QueryColumn(this, "status"); public final QueryColumn DELETED = new QueryColumn(this, "deleted");
/** /**
* 租户ID * 助手图标
*/ */
public final QueryColumn TENANT = new QueryColumn(this, "tenant"); public final QueryColumn ICON_URL = new QueryColumn(this, "icon_url");
/** /**
* 创建时间 * 创建时间
*/ */
public final QueryColumn CREATE_AT = new QueryColumn(this, "create_at"); public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/** /**
* 接入点 * 更新时间
*/ */
public final QueryColumn ENDPOINT = new QueryColumn(this, "endpoint"); public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/** /**
* 时间间 * 知识库分类IDS,以逗号分
*/ */
public final QueryColumn INTERVAL = new QueryColumn(this, "interval"); public final QueryColumn CATEGORY_IDS = new QueryColumn(this, "category_ids");
/** /**
* 签名 * 助手描述
*/ */
public final QueryColumn SIGN_NAME = new QueryColumn(this, "sign_name"); public final QueryColumn DESCRIPTION = new QueryColumn(this, "description");
/** /**
* 修改时间 * 可见角色IDS,以逗号分隔
*/ */
public final QueryColumn UPDATE_AT = new QueryColumn(this, "update_at"); public final QueryColumn VISIBLE_ROLE_IDS = new QueryColumn(this, "visible_role_ids");
/** /**
* 所有字段。 * 所有字段。
...@@ -82,19 +77,19 @@ public class ClientSmsTableDef extends TableDef { ...@@ -82,19 +77,19 @@ public class ClientSmsTableDef extends TableDef {
/** /**
* 默认字段,不包含逻辑删除或者 large 等字段。 * 默认字段,不包含逻辑删除或者 large 等字段。
*/ */
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, TENANT, AK, SK, REGION, ENDPOINT, SIGN_NAME, INTERVAL, STATUS, CREATE_AT, UPDATE_AT}; public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, NAME, DESCRIPTION, ICON_URL, CATEGORY_IDS, VISIBLE_ROLE_IDS, STATUS, DELETED, CREATE_TIME, UPDATE_TIME};
public ClientSmsTableDef() { public QaAssistantTableDef() {
super("", "auth_client_sms"); super("", "ai_qa_assistant");
} }
private ClientSmsTableDef(String schema, String name, String alisa) { private QaAssistantTableDef(String schema, String name, String alisa) {
super(schema, name, alisa); super(schema, name, alisa);
} }
public ClientSmsTableDef as(String alias) { public QaAssistantTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias; String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new ClientSmsTableDef("", "auth_client_sms", alias)); return getCache(key, k -> new QaAssistantTableDef("", "ai_qa_assistant", 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-09-18
*/
public class UserChatCompletionHistoryTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final UserChatCompletionHistoryTableDef USER_CHAT_COMPLETION_HISTORY_ENTITY = new UserChatCompletionHistoryTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
/**
* 类型(0用户提问 1AI回答)
*/
public final QueryColumn TYPE = new QueryColumn(this, "type");
/**
* 会话ID
*/
public final QueryColumn CHAT_COMPLETION_ID = new QueryColumn(this, "chat_completion_id");
/**
* 内容
*/
public final QueryColumn CONTENT = new QueryColumn(this, "content");
/**
* 创建时间
*/
public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, CHAT_COMPLETION_ID, TYPE, CONTENT, CREATE_TIME};
public UserChatCompletionHistoryTableDef() {
super("", "ai_user_chat_completion_history");
}
private UserChatCompletionHistoryTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public UserChatCompletionHistoryTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new UserChatCompletionHistoryTableDef("", "ai_user_chat_completion_history", 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-09-18
*/
public class UserChatCompletionTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final UserChatCompletionTableDef USER_CHAT_COMPLETION_ENTITY = new UserChatCompletionTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
/**
* 类型(0用户提问 1AI回答)
*/
public final QueryColumn TYPE = new QueryColumn(this, "type");
/**
* 用户ID
*/
public final QueryColumn USER_ID = new QueryColumn(this, "user_id");
/**
* DIFY会话ID
*/
public final QueryColumn SESSION_ID = new QueryColumn(this, "session_id");
/**
* 内容
*/
public final QueryColumn CONTENT = new QueryColumn(this, "content");
/**
* 创建时间
*/
public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/**
* 最后更新时间
*/
public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, USER_ID, SESSION_ID, TYPE, CONTENT, CREATE_TIME, UPDATE_TIME};
public UserChatCompletionTableDef() {
super("", "ai_user_chat_completion");
}
private UserChatCompletionTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public UserChatCompletionTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new UserChatCompletionTableDef("", "ai_user_chat_completion", 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-09-18
*/
public class UserExamineDetailRecordTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final UserExamineDetailRecordTableDef USER_EXAMINE_DETAIL_RECORD_ENTITY = new UserExamineDetailRecordTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
/**
* 题目ID
*/
public final QueryColumn QA_ID = new QueryColumn(this, "qa_id");
/**
* 评分
*/
public final QueryColumn SCORE = new QueryColumn(this, "score");
/**
* 对练记录ID
*/
public final QueryColumn RECORD_ID = new QueryColumn(this, "record_id");
/**
* 创建时间
*/
public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/**
* 评价
*/
public final QueryColumn EVALUATION = new QueryColumn(this, "evaluation");
/**
* 员工回答
*/
public final QueryColumn ANSWER = new QueryColumn(this, "answer");
/**
* 更新时间
*/
public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 large 等字段。
*/
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, RECORD_ID, QA_ID, SCORE, EVALUATION, ANSWER, CREATE_TIME, UPDATE_TIME};
public UserExamineDetailRecordTableDef() {
super("", "ai_user_examine_detail_record");
}
private UserExamineDetailRecordTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public UserExamineDetailRecordTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new UserExamineDetailRecordTableDef("", "ai_user_examine_detail_record", 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-09-18
*/
public class UserExamineRecordTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final UserExamineRecordTableDef USER_EXAMINE_RECORD_ENTITY = new UserExamineRecordTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
/**
* 用户ID
*/
public final QueryColumn USER_ID = new QueryColumn(this, "user_id");
/**
* 对练ID
*/
public final QueryColumn EXAMINE_ID = new QueryColumn(this, "examine_id");
/**
* 会话ID
*/
public final QueryColumn SESSION_ID = new QueryColumn(this, "session_id");
/**
* 创建时间
*/
public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/**
* 更新时间
*/
public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/**
* 已答题数量
*/
public final QueryColumn ANSWERED_NUM = new QueryColumn(this, "answered_num");
/**
* 对练模式(0练习 1对练)
*/
public final QueryColumn EXAMINE_MODE = new QueryColumn(this, "examine_mode");
/**
* 综合评分
*/
public final QueryColumn OVERALL_SCORE = new QueryColumn(this, "overall_score");
/**
* 综合评价
*/
public final QueryColumn OVERALL_EVALUATION = new QueryColumn(this, "overall_evaluation");
/**
* 所有字段。
*/
public final QueryColumn ALL_COLUMNS = new QueryColumn(this, "*");
/**
* 默认字段,不包含逻辑删除或者 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 UserExamineRecordTableDef() {
super("", "ai_user_examine_record");
}
private UserExamineRecordTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public UserExamineRecordTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new UserExamineRecordTableDef("", "ai_user_examine_record", alias));
}
}
...@@ -11,7 +11,7 @@ import java.io.Serial; ...@@ -11,7 +11,7 @@ import java.io.Serial;
* @author breeze * @author breeze
* @since 2024-09-18 * @since 2024-09-18
*/ */
public class ClientUserTableDef extends TableDef { public class WikiCategoryTableDef extends TableDef {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -19,55 +19,45 @@ public class ClientUserTableDef extends TableDef { ...@@ -19,55 +19,45 @@ public class ClientUserTableDef extends TableDef {
/** /**
* *
*/ */
public static final ClientUserTableDef CLIENT_USER_ENTITY = new ClientUserTableDef(); public static final WikiCategoryTableDef WIKI_CATEGORY_ENTITY = new WikiCategoryTableDef();
public final QueryColumn ID = new QueryColumn(this, "id"); public final QueryColumn ID = new QueryColumn(this, "id");
/** /**
* 邮箱 * 分类名称
*/ */
public final QueryColumn EMAIL = new QueryColumn(this, "email"); public final QueryColumn NAME = new QueryColumn(this, "name");
/** /**
* 手机号码 * 状态(0禁用 1启用)
*/
public final QueryColumn MOBILE = new QueryColumn(this, "mobile");
/**
* 开放ID,自由平台或者外部第三方平台都有
*/
public final QueryColumn OPEN_ID = new QueryColumn(this, "open_id");
/**
* 状态0停用,1启用
*/ */
public final QueryColumn STATUS = new QueryColumn(this, "status"); public final QueryColumn STATUS = new QueryColumn(this, "status");
/** /**
* 应用ID * 是否删除(0否 1是)
*/ */
public final QueryColumn CLIENT_ID = new QueryColumn(this, "client_id"); public final QueryColumn DELETED = new QueryColumn(this, "deleted");
/** /**
* 创建时间 * 父级分类ID
*/ */
public final QueryColumn CREATE_AT = new QueryColumn(this, "create_at"); public final QueryColumn PARENT_ID = new QueryColumn(this, "parent_id");
/** /**
* 密码 * 创建时间
*/ */
public final QueryColumn PASSWORD = new QueryColumn(this, "password"); public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/** /**
* 修改时间 * 更新时间
*/ */
public final QueryColumn UPDATE_AT = new QueryColumn(this, "update_at"); public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/** /**
* 用户名 * 分类描述
*/ */
public final QueryColumn USERNAME = new QueryColumn(this, "username"); public final QueryColumn DESCRIPTION = new QueryColumn(this, "description");
/** /**
* 所有字段。 * 所有字段。
...@@ -77,19 +67,19 @@ public class ClientUserTableDef extends TableDef { ...@@ -77,19 +67,19 @@ public class ClientUserTableDef extends TableDef {
/** /**
* 默认字段,不包含逻辑删除或者 large 等字段。 * 默认字段,不包含逻辑删除或者 large 等字段。
*/ */
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, CLIENT_ID, OPEN_ID, USERNAME, PASSWORD, EMAIL, MOBILE, STATUS, CREATE_AT, UPDATE_AT}; public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, NAME, DESCRIPTION, STATUS, DELETED, CREATE_TIME, UPDATE_TIME, PARENT_ID};
public ClientUserTableDef() { public WikiCategoryTableDef() {
super("", "auth_client_user"); super("", "ai_wiki_category");
} }
private ClientUserTableDef(String schema, String name, String alisa) { private WikiCategoryTableDef(String schema, String name, String alisa) {
super(schema, name, alisa); super(schema, name, alisa);
} }
public ClientUserTableDef as(String alias) { public WikiCategoryTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias; String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new ClientUserTableDef("", "auth_client_user", alias)); return getCache(key, k -> new WikiCategoryTableDef("", "ai_wiki_category", alias));
} }
} }
...@@ -11,7 +11,7 @@ import java.io.Serial; ...@@ -11,7 +11,7 @@ import java.io.Serial;
* @author breeze * @author breeze
* @since 2024-09-18 * @since 2024-09-18
*/ */
public class ClientTableDef extends TableDef { public class WikiTableDef extends TableDef {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -19,75 +19,65 @@ public class ClientTableDef extends TableDef { ...@@ -19,75 +19,65 @@ public class ClientTableDef extends TableDef {
/** /**
* *
*/ */
public static final ClientTableDef CLIENT_ENTITY = new ClientTableDef(); public static final WikiTableDef WIKI_ENTITY = new WikiTableDef();
public final QueryColumn ID = new QueryColumn(this, "id"); public final QueryColumn ID = new QueryColumn(this, "id");
/** /**
* 授权范围 * 资料名称
*/ */
public final QueryColumn SCOPE = new QueryColumn(this, "scope"); public final QueryColumn NAME = new QueryColumn(this, "name");
/** /**
* 状态,0停用,1启用 * 富文本详情
*/ */
public final QueryColumn STATUS = new QueryColumn(this, "status"); public final QueryColumn DETAIL = new QueryColumn(this, "detail");
/**
* 租户ID
*/
public final QueryColumn TENANT = new QueryColumn(this, "tenant");
/**
* 应用编码
*/
public final QueryColumn APP_CODE = new QueryColumn(this, "app_code");
/** /**
* 创建时间 * 资料海报图
*/ */
public final QueryColumn CREATE_AT = new QueryColumn(this, "create_at"); public final QueryColumn POSTER = new QueryColumn(this, "poster");
/** /**
* 平台self自建,tiktok,wx_mp,wx_ma等等 * 状态(0禁用 1启用)
*/ */
public final QueryColumn PLATFORM = new QueryColumn(this, "platform"); public final QueryColumn STATUS = new QueryColumn(this, "status");
/** /**
* 修改时间 * 是否删除(0否 1是)
*/ */
public final QueryColumn UPDATE_AT = new QueryColumn(this, "update_at"); public final QueryColumn DELETED = new QueryColumn(this, "deleted");
/** /**
* 应用秘钥 * 资料文件URL
*/ */
public final QueryColumn APP_SECRET = new QueryColumn(this, "app_secret"); public final QueryColumn FILE_URL = new QueryColumn(this, "file_url");
/** /**
* 令牌过期时间,单位秒 * 创建时间
*/ */
public final QueryColumn EXPIRES_IN = new QueryColumn(this, "expires_in"); public final QueryColumn CREATE_TIME = new QueryColumn(this, "create_time");
/** /**
* 授权方式 * 更新时间
*/ */
public final QueryColumn GRANT_TYPE = new QueryColumn(this, "grant_type"); public final QueryColumn UPDATE_TIME = new QueryColumn(this, "update_time");
/** /**
* 签名字符串 * 资料描述
*/ */
public final QueryColumn SECRET_KEY = new QueryColumn(this, "secret_key"); public final QueryColumn DESCRIPTION = new QueryColumn(this, "description");
/** /**
* 应用描述 * 资料分类ID
*/ */
public final QueryColumn DESCRIPTION = new QueryColumn(this, "description"); public final QueryColumn WIKI_CATEGORY_ID = new QueryColumn(this, "wiki_category_id");
/** /**
* 是否启用自动注册用户,0停用,1启用 * 场景分类ID
*/ */
public final QueryColumn AUTO_REGISTER = new QueryColumn(this, "auto_register"); public final QueryColumn SCENE_CATEGORY_ID = new QueryColumn(this, "scene_category_id");
/** /**
* 所有字段。 * 所有字段。
...@@ -97,19 +87,19 @@ public class ClientTableDef extends TableDef { ...@@ -97,19 +87,19 @@ public class ClientTableDef extends TableDef {
/** /**
* 默认字段,不包含逻辑删除或者 large 等字段。 * 默认字段,不包含逻辑删除或者 large 等字段。
*/ */
public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, TENANT, PLATFORM, APP_CODE, APP_SECRET, DESCRIPTION, GRANT_TYPE, SECRET_KEY, EXPIRES_IN, SCOPE, AUTO_REGISTER, STATUS, CREATE_AT, UPDATE_AT}; public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{ID, NAME, DESCRIPTION, POSTER, FILE_URL, WIKI_CATEGORY_ID, SCENE_CATEGORY_ID, DETAIL, STATUS, DELETED, CREATE_TIME, UPDATE_TIME};
public ClientTableDef() { public WikiTableDef() {
super("", "auth_client"); super("", "ai_wiki");
} }
private ClientTableDef(String schema, String name, String alisa) { private WikiTableDef(String schema, String name, String alisa) {
super(schema, name, alisa); super(schema, name, alisa);
} }
public ClientTableDef as(String alias) { public WikiTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias; String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new ClientTableDef("", "auth_client", alias)); return getCache(key, k -> new WikiTableDef("", "ai_wiki", alias));
} }
} }
...@@ -2,7 +2,7 @@ package cn.breeze.elleai.infra.mapper; ...@@ -2,7 +2,7 @@ package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.ClientSmsSenseEntity; import cn.breeze.elleai.infra.entity.ExamineEntity;
/** /**
* 映射层。 * 映射层。
...@@ -11,6 +11,6 @@ import cn.breeze.elleai.infra.entity.ClientSmsSenseEntity; ...@@ -11,6 +11,6 @@ import cn.breeze.elleai.infra.entity.ClientSmsSenseEntity;
* @since 2024-09-18 * @since 2024-09-18
*/ */
@Mapper @Mapper
public interface ClientSmsSenseMapper extends BaseMapper<ClientSmsSenseEntity> { public interface ExamineMapper extends BaseMapper<ExamineEntity> {
} }
...@@ -2,7 +2,7 @@ package cn.breeze.elleai.infra.mapper; ...@@ -2,7 +2,7 @@ package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.ClientSmsEntity; import cn.breeze.elleai.infra.entity.ExamineQaEntity;
/** /**
* 映射层。 * 映射层。
...@@ -11,6 +11,6 @@ import cn.breeze.elleai.infra.entity.ClientSmsEntity; ...@@ -11,6 +11,6 @@ import cn.breeze.elleai.infra.entity.ClientSmsEntity;
* @since 2024-09-18 * @since 2024-09-18
*/ */
@Mapper @Mapper
public interface ClientSmsMapper extends BaseMapper<ClientSmsEntity> { public interface ExamineQaMapper extends BaseMapper<ExamineQaEntity> {
} }
...@@ -2,7 +2,7 @@ package cn.breeze.elleai.infra.mapper; ...@@ -2,7 +2,7 @@ package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.ClientEndpointEntity; import cn.breeze.elleai.infra.entity.ExamineQaXrefEntity;
/** /**
* 映射层。 * 映射层。
...@@ -11,6 +11,6 @@ import cn.breeze.elleai.infra.entity.ClientEndpointEntity; ...@@ -11,6 +11,6 @@ import cn.breeze.elleai.infra.entity.ClientEndpointEntity;
* @since 2024-09-18 * @since 2024-09-18
*/ */
@Mapper @Mapper
public interface ClientEndpointMapper extends BaseMapper<ClientEndpointEntity> { public interface ExamineQaXrefMapper extends BaseMapper<ExamineQaXrefEntity> {
} }
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.ExamineSceneCategoryEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-09-18
*/
@Mapper
public interface ExamineSceneCategoryMapper extends BaseMapper<ExamineSceneCategoryEntity> {
}
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.ExamineSceneEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-09-18
*/
@Mapper
public interface ExamineSceneMapper extends BaseMapper<ExamineSceneEntity> {
}
...@@ -2,7 +2,7 @@ package cn.breeze.elleai.infra.mapper; ...@@ -2,7 +2,7 @@ package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.ClientUserEntity; import cn.breeze.elleai.infra.entity.ProperNounEntity;
/** /**
* 映射层。 * 映射层。
...@@ -11,6 +11,6 @@ import cn.breeze.elleai.infra.entity.ClientUserEntity; ...@@ -11,6 +11,6 @@ import cn.breeze.elleai.infra.entity.ClientUserEntity;
* @since 2024-09-18 * @since 2024-09-18
*/ */
@Mapper @Mapper
public interface ClientUserMapper extends BaseMapper<ClientUserEntity> { public interface ProperNounMapper extends BaseMapper<ProperNounEntity> {
} }
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.QaAssistantEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-09-18
*/
@Mapper
public interface QaAssistantMapper extends BaseMapper<QaAssistantEntity> {
}
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.UserChatCompletionHistoryEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-09-18
*/
@Mapper
public interface UserChatCompletionHistoryMapper extends BaseMapper<UserChatCompletionHistoryEntity> {
}
package cn.breeze.elleai.infra.mapper;
import cn.breeze.elleai.infra.entity.UserChatCompletionEntity;
import com.mybatisflex.core.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 映射层。
*
* @author breeze
* @since 2024-09-18
*/
@Mapper
public interface UserChatCompletionMapper extends BaseMapper<UserChatCompletionEntity> {
}
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.UserExamineDetailRecordEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-09-18
*/
@Mapper
public interface UserExamineDetailRecordMapper extends BaseMapper<UserExamineDetailRecordEntity> {
}
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.UserExamineRecordEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-09-18
*/
@Mapper
public interface UserExamineRecordMapper extends BaseMapper<UserExamineRecordEntity> {
}
package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.WikiCategoryEntity;
/**
* 映射层。
*
* @author breeze
* @since 2024-09-18
*/
@Mapper
public interface WikiCategoryMapper extends BaseMapper<WikiCategoryEntity> {
}
...@@ -2,7 +2,7 @@ package cn.breeze.elleai.infra.mapper; ...@@ -2,7 +2,7 @@ package cn.breeze.elleai.infra.mapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.BaseMapper;
import cn.breeze.elleai.infra.entity.ClientEntity; import cn.breeze.elleai.infra.entity.WikiEntity;
/** /**
* 映射层。 * 映射层。
...@@ -11,6 +11,6 @@ import cn.breeze.elleai.infra.entity.ClientEntity; ...@@ -11,6 +11,6 @@ import cn.breeze.elleai.infra.entity.ClientEntity;
* @since 2024-09-18 * @since 2024-09-18
*/ */
@Mapper @Mapper
public interface ClientMapper extends BaseMapper<ClientEntity> { public interface WikiMapper extends BaseMapper<WikiEntity> {
} }
spring: spring:
profiles:
active: default
mvc:
pathmatch:
matching-strategy: ant-path-matcher
application: application:
name: elle-ai name: elle-ai
jackson: jackson:
...@@ -6,9 +11,36 @@ spring: ...@@ -6,9 +11,36 @@ spring:
time-zone: GMT+8 time-zone: GMT+8
default-property-inclusion: non_null default-property-inclusion: non_null
property-naming-strategy: SNAKE_CASE property-naming-strategy: SNAKE_CASE
#springfox:
# documentation:
# swagger-ui:
# enabled: true
#swagger:
# enable: true
springdoc:
swagger-ui:
path: /swagger-ui.html
dify:
api_base: http://dify-api:5001/v1
api_key: app-ilgoEphXjLw0I7x7fGeCyKYk
---
spring:
config:
activate:
on-profile: default
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.18.5.186:4306/elle_ai?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: future
password:
future123456
data:
redis:
password: future123456
host: 127.0.0.1
port: 6379
database: 6
--- ---
spring: spring:
......
...@@ -34,8 +34,8 @@ public class CodeGen { ...@@ -34,8 +34,8 @@ public class CodeGen {
globalConfig.setBasePackage("cn.breeze.elleai.infra"); globalConfig.setBasePackage("cn.breeze.elleai.infra");
//设置表前缀和只生成哪些表 //设置表前缀和只生成哪些表
globalConfig.setTablePrefix("auth_"); globalConfig.setTablePrefix("ai_");
globalConfig.setGenerateTable("auth_*"); globalConfig.setGenerateTable("ai_*");
//设置生成 entity 并启用 Lombok //设置生成 entity 并启用 Lombok
globalConfig.setEntityGenerateEnable(true); globalConfig.setEntityGenerateEnable(true);
...@@ -52,6 +52,17 @@ public class CodeGen { ...@@ -52,6 +52,17 @@ public class CodeGen {
globalConfig.getMapperConfig().setMapperAnnotation(true); globalConfig.getMapperConfig().setMapperAnnotation(true);
// globalConfig.getMapperConfig().setOverwriteEnable(true); // globalConfig.getMapperConfig().setOverwriteEnable(true);
globalConfig.enableService();
globalConfig.setServicePackage("cn.breeze.elleai.domain.sparring.service");
globalConfig.getServiceConfig().setClassSuffix("Service");
globalConfig.getServiceConfig().setClassPrefix("I");
globalConfig.getServiceConfig().setOverwriteEnable(true);
globalConfig.enableServiceImpl();
globalConfig.setServiceImplPackage("cn.breeze.elleai.domain.sparring.service");
globalConfig.getServiceImplConfig().setClassSuffix("ServiceImpl");
globalConfig.getServiceImplConfig().setOverwriteEnable(true);
return globalConfig; return globalConfig;
} }
} }
spring: spring:
profiles:
active: default
mvc:
pathmatch:
matching-strategy: ant-path-matcher
application: application:
name: elle-ai name: elle-ai
jackson: jackson:
...@@ -6,9 +11,36 @@ spring: ...@@ -6,9 +11,36 @@ spring:
time-zone: GMT+8 time-zone: GMT+8
default-property-inclusion: non_null default-property-inclusion: non_null
property-naming-strategy: SNAKE_CASE property-naming-strategy: SNAKE_CASE
#springfox:
# documentation:
# swagger-ui:
# enabled: true
#swagger:
# enable: true
springdoc:
swagger-ui:
path: /swagger-ui.html
dify:
api_base: http://dify-api:5001/v1
api_key: app-ilgoEphXjLw0I7x7fGeCyKYk
---
spring:
config:
activate:
on-profile: default
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.18.5.186:4306/elle_ai?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: future
password:
future123456
data:
redis:
password: future123456
host: 127.0.0.1
port: 6379
database: 6
--- ---
spring: spring:
......
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