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

字典配置、任务调度

parent df093341
......@@ -8,8 +8,10 @@ import cn.breeze.elleai.application.dto.response.KnowledgeDataBaseCategoryDto;
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.DataDicResponseModel;
import cn.breeze.elleai.domain.sparring.model.response.ProperNounResponseModel;
import cn.breeze.elleai.domain.sparring.service.CommonService;
import cn.breeze.elleai.util.Codes;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
......@@ -17,10 +19,12 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mybatisflex.core.paginate.Page;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
......@@ -112,12 +116,11 @@ public class AppCommonService {
*/
public List<KnowledgeDataBaseCategoryDto> KnowledgeDataBaseCategoryList() {
List<KnowledgeDataBaseCategoryDto> result = new ArrayList<>();
KnowledgeDataBaseCategoryDto dto = new KnowledgeDataBaseCategoryDto();
dto.setId(1);
dto.setName("品项");
result.add(dto);
return result;
DataDicResponseModel dataDicByCode = commonService.getDataDicByCode(Codes.DATA_DIC_KDB_CATEGORY_LIST);
if(Objects.nonNull(dataDicByCode) && StrUtil.isNotEmpty(dataDicByCode.getDataValue())) {
return JSONObject.parseArray(dataDicByCode.getDataValue(), KnowledgeDataBaseCategoryDto.class);
}
return null;
}
/**
......@@ -126,14 +129,10 @@ public class AppCommonService {
*/
public List<AppRoleDto> appRoleList() {
List<AppRoleDto> result = new ArrayList<>();
AppRoleDto dto = new AppRoleDto();
dto.setName("顾问");
result.add(dto);
AppRoleDto dto2 = new AppRoleDto();
dto2.setName("美容师");
result.add(dto2);
return result;
DataDicResponseModel dataDicByCode = commonService.getDataDicByCode(Codes.DATA_DIC_APP_ROLE_LIST);
if(Objects.nonNull(dataDicByCode) && StrUtil.isNotEmpty(dataDicByCode.getDataValue())) {
return JSONObject.parseArray(dataDicByCode.getDataValue(), AppRoleDto.class);
}
return null;
}
}
......@@ -1184,11 +1184,9 @@ public class AppExamineService {
model.setBusinessNo(businessNo);
model.setType(0);
model.setStatus(0);
model.setUserId(userId);
model.setCreateTime(new Date());
commonService.saveEvaluateJob(model);
String redisKey = String.format(Codes.SINGLE_AI_EVALUATE_JOB_STATUS, businessNo);
redisTemplate.opsForValue().set(redisKey, "0", 7, TimeUnit.DAYS);
}
// 更新缓存
......@@ -1226,6 +1224,7 @@ public class AppExamineService {
model.setBusinessNo(businessNo);
model.setType(1);
model.setStatus(0);
model.setUserId(userId);
model.setCreateTime(new Date());
commonService.saveEvaluateJob(model);
}
......
......@@ -20,6 +20,11 @@ public class ExamineEvaluateJobSaveModel implements Serializable {
*/
private String businessNo;
/**
* 用户ID
*/
private String userId;
/**
* 类型(0单题点评 1总点评)
*/
......
package cn.breeze.elleai.domain.sparring.model.response;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class DataDicResponseModel implements Serializable {
private Integer id;
private String dataCode;
private String dataValue;
private String description;
private Date createTime;
}
package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.*;
import cn.breeze.elleai.domain.sparring.model.response.DataDicResponseModel;
import cn.breeze.elleai.domain.sparring.model.response.ExamineEvaluateJobResponseModel;
import cn.breeze.elleai.domain.sparring.model.response.ProperNounResponseModel;
import com.mybatisflex.core.paginate.Page;
......@@ -28,4 +29,6 @@ public interface CommonService {
ExamineEvaluateJobResponseModel getEvaluateJob(Integer type, Integer businessId);
List<ExamineEvaluateJobResponseModel> pendingEvaluateJobList();
DataDicResponseModel getDataDicByCode(String dataCode);
}
......@@ -3,10 +3,12 @@ package cn.breeze.elleai.domain.sparring.service;
import cn.breeze.elleai.domain.sparring.model.request.ExamineEvaluateJobSaveModel;
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.DataDicResponseModel;
import cn.breeze.elleai.domain.sparring.model.response.ExamineEvaluateJobResponseModel;
import cn.breeze.elleai.domain.sparring.model.response.ProperNounResponseModel;
import cn.breeze.elleai.infra.entity.ExamineEvaluateJobEntity;
import cn.breeze.elleai.infra.entity.ProperNounEntity;
import cn.breeze.elleai.infra.mapper.DataDicMapper;
import cn.breeze.elleai.infra.mapper.ExamineEvaluateJobMapper;
import cn.breeze.elleai.infra.mapper.ProperNounMapper;
import cn.hutool.core.bean.BeanUtil;
......@@ -24,6 +26,7 @@ import java.util.Objects;
import static cn.breeze.elleai.infra.entity.table.ProperNounTableDef.PROPER_NOUN_ENTITY;
import static cn.breeze.elleai.infra.entity.table.ExamineEvaluateJobTableDef.EXAMINE_EVALUATE_JOB_ENTITY;
import static cn.breeze.elleai.infra.entity.table.DataDicTableDef.DATA_DIC_ENTITY;
@Service
......@@ -34,6 +37,8 @@ public class CommonServiceImpl implements CommonService{
private final ExamineEvaluateJobMapper evaluateJobMapper;
private final DataDicMapper dataDicMapper;
@Override
public Page<ProperNounResponseModel> properNounPaginQuery(ProperNounRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
......@@ -126,4 +131,11 @@ public class CommonServiceImpl implements CommonService{
return evaluateJobMapper.selectListByQueryAs(queryWrapper, ExamineEvaluateJobResponseModel.class);
}
@Override
public DataDicResponseModel getDataDicByCode(String dataCode) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(DATA_DIC_ENTITY.DATA_CODE.eq(dataCode));
return dataDicMapper.selectOneByQueryAs(queryWrapper, DataDicResponseModel.class);
}
}
......@@ -102,6 +102,8 @@ public interface ExamineService {
ExamineRecordDetailResponseModel singleExamineQaDetail(Integer id);
long countUnfinishedExamineRecord(Integer examineId);
/***************************************** 资料库分类 *****************************************/
Page<WikiCategoryResponseModel> wikiCategoryPaginQuery(WikiCategoryRequestModel request);
......
......@@ -496,6 +496,14 @@ public class ExamineServiceImpl implements ExamineService {
return userExamineDetailRecordMapper.selectOneByQueryAs(queryWrapper, ExamineRecordDetailResponseModel.class);
}
@Override
public long countUnfinishedExamineRecord(Integer examineId) {
QueryWrapper queryWrapper = QueryWrapper.create()
.where(USER_EXAMINE_DETAIL_RECORD_ENTITY.RECORD_ID.eq(examineId))
.and(USER_EXAMINE_DETAIL_RECORD_ENTITY.EVALUATION.isNull().or(USER_EXAMINE_DETAIL_RECORD_ENTITY.SCORE.isNull()));
return userExamineDetailRecordMapper.selectCountByQuery(queryWrapper);
}
@Override
public Page<WikiCategoryResponseModel> wikiCategoryPaginQuery(WikiCategoryRequestModel request) {
Integer pageNo = ObjectUtil.defaultIfNull(request.getPageNo(), 1);
......
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.util.Date;
/**
* 实体类。
*
* @author breeze
* @since 2024-09-18
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("ai_data_dic")
public class DataDicEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
private String dataCode;
private String dataValue;
private String description;
private Date createTime;
}
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 DataDicTableDef extends TableDef {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
public static final DataDicTableDef DATA_DIC_ENTITY = new DataDicTableDef();
public final QueryColumn ID = new QueryColumn(this, "id");
public final QueryColumn DATA_CODE = new QueryColumn(this, "data_code");
public final QueryColumn DATA_VALUE = new QueryColumn(this, "data_value");
public final QueryColumn DESCRIPTION = new QueryColumn(this, "description");
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, DATA_CODE, DATA_VALUE, DESCRIPTION, CREATE_TIME};
public DataDicTableDef() {
super("", "ai_data_dic");
}
private DataDicTableDef(String schema, String name, String alisa) {
super(schema, name, alisa);
}
public DataDicTableDef as(String alias) {
String key = getNameWithSchema() + "." + alias;
return getCache(key, k -> new DataDicTableDef("", "ai_data_dic", alias));
}
}
package cn.breeze.elleai.infra.mapper;
import cn.breeze.elleai.infra.entity.DataDicEntity;
import cn.breeze.elleai.infra.entity.WikiCategoryEntity;
import com.mybatisflex.core.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 映射层。
*
* @author breeze
* @since 2024-09-18
*/
@Mapper
public interface DataDicMapper extends BaseMapper<DataDicEntity> {
}
......@@ -59,7 +59,11 @@ public class SingleJob extends QuartzJobBean {
log.info("定时轮询AI点评异常任务,jobList size = {}", jobList.size());
if(CollectionUtil.isNotEmpty(jobList)) {
jobList.forEach(v -> {
executeEvaluateJob(v);
try {
executeEvaluateJob(v);
} catch (Exception ex) {
ex.printStackTrace();
}
});
}
......@@ -68,7 +72,6 @@ public class SingleJob extends QuartzJobBean {
@Async
public void executeEvaluateJob(ExamineEvaluateJobResponseModel job) {
Integer id = job.getId();
Integer type = job.getType();
Integer businessId = job.getBusinessId();
String businessNo = job.getBusinessNo();
......@@ -95,16 +98,11 @@ public class SingleJob extends QuartzJobBean {
update.setId(job.getId());
update.setStatus(1);
commonService.saveEvaluateJob(update);
// 更新任务缓存信息
String redisKey = String.format(Codes.SINGLE_AI_EVALUATE_JOB_STATUS, businessNo);
redisTemplate.opsForValue().set(redisKey, "1", 7, TimeUnit.DAYS);
}
} else {
//TODO 判断所有题目是否已经单题点评完毕
String redisKey = String.format(Codes.SINGLE_AI_EVALUATE_JOB_STATUS, businessNo);
String jobStatus = redisTemplate.opsForValue().get(redisKey);
if(Objects.equals(jobStatus, "1")) {
// 判断所有题目是否已经单题点评完毕
long count = examineService.countUnfinishedExamineRecord(businessId);
if(Objects.equals(count, 0L)) {
// 获取答题结果
ExamineDetailRecordRequestModel requestModel = new ExamineDetailRecordRequestModel();
requestModel.setRecordId(businessId);
......
......@@ -64,4 +64,8 @@ public abstract class Codes {
public static final String SINGLE_AI_EVALUATE_JOB_STATUS = "ai:single_evaluate_job:%s";
public static final String TOTAL_AI_EVALUATE_JOB_STATUS = "ai:total_evaluate_job:%s";
public static final String DATA_DIC_APP_ROLE_LIST = "app_role_list";
public static final String DATA_DIC_KDB_CATEGORY_LIST = "kdb_category_list";
}
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