Merge remote-tracking branch 'origin/master' into master-wangwei
This commit is contained in:
commit
dfb9286d03
@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.dto.DataJsonTemplate;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetPageReqVO;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetRespVO;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetSaveReqVO;
|
||||
|
@ -1,10 +1,17 @@
|
||||
package cn.iocoder.yudao.module.llm.controller.admin.dataset;
|
||||
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetAnswerRespVO;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetQuestionPageReqVO;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetQuestionRespVO;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetQuestionSaveReqVO;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.dataset.DatasetQuestionDO;
|
||||
import cn.iocoder.yudao.module.llm.service.dataset.DatasetQuestionService;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.VerticalAlignment;
|
||||
import org.apache.poi.ss.util.CellRangeAddress;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -18,6 +25,7 @@ import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
@ -56,6 +64,63 @@ public class DatasetQuestionController {
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出数据集数据文件 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('llm:dataset-files:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exportDatasetFilesExcel(@Valid DatasetQuestionPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
HSSFWorkbook template = new HSSFWorkbook();
|
||||
HSSFSheet sheet = template.createSheet();
|
||||
// 创建样式并设置垂直居中
|
||||
HSSFCellStyle cellStyle = template.createCellStyle();
|
||||
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
int count = 0;
|
||||
HSSFRow row = sheet.createRow(count);
|
||||
row.createCell(0).setCellValue("问题内容");
|
||||
row.createCell(1).setCellValue("标注内容");
|
||||
count++;
|
||||
List<Integer> id = new ArrayList<>();
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<DatasetQuestionRespVO> list = datasetQuestionService.getDatasetQuestionPage(pageReqVO).getList();
|
||||
for (DatasetQuestionRespVO item : list){
|
||||
String question = item.getQuestion();
|
||||
List<DatasetAnswerRespVO> datasetAnswerRespVO = item.getDatasetAnswerRespVO();
|
||||
List<String> collect = datasetAnswerRespVO.stream().map(DatasetAnswerRespVO::getAnswer).collect(Collectors.toList());
|
||||
if (collect.size() == 0){
|
||||
row = sheet.createRow(count);
|
||||
row.createCell(0).setCellValue(question);
|
||||
row.createCell(1).setCellValue("");
|
||||
id.add(count);
|
||||
count++;
|
||||
}else {
|
||||
for (String s : collect) {
|
||||
row = sheet.createRow(count);
|
||||
row.createCell(0).setCellValue(question);
|
||||
row.createCell(1).setCellValue(s);
|
||||
count++;
|
||||
}
|
||||
id.add(count-1);
|
||||
}
|
||||
}
|
||||
//合并相同内容的单元格
|
||||
for (int i = 0; i < id.size() - 1; i++){
|
||||
if (id.get(i+1)-id.get(i)>1) {
|
||||
sheet.addMergedRegion(new CellRangeAddress(id.get(i)+1, id.get(i + 1), 0, 0));
|
||||
}
|
||||
}
|
||||
// 导出 Excel
|
||||
try {
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.setContentType("application/vnd.ms-excel");
|
||||
template.write(response.getOutputStream());
|
||||
response.getOutputStream().close();
|
||||
template.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/* @PutMapping("/update")
|
||||
@Operation(summary = "更新数据集数据问题")
|
||||
@PreAuthorize("@ss.hasPermission('llm:dataset-question:update')")
|
||||
@ -104,4 +169,4 @@ public class DatasetQuestionController {
|
||||
return success(datasetQuestionService.createDatasetQuestion(createReqVO));
|
||||
}*/
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,12 @@
|
||||
package cn.iocoder.yudao.module.llm.controller.admin.dataset.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class DataJsonTemplate {
|
||||
private String system;
|
||||
private String question;
|
||||
private List<String> answers;
|
||||
}
|
@ -47,6 +47,6 @@ public class DatasetPageReqVO extends PageParam {
|
||||
private Long dataLength;
|
||||
|
||||
@Schema(description = "标注进度", example = "20")
|
||||
private String annotateProgress;
|
||||
private Integer annotateProgress;
|
||||
|
||||
}
|
||||
|
@ -35,7 +35,8 @@ public class DatasetQuestionRespVO {
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "系统身份")
|
||||
private String system;
|
||||
@Schema(description = "标注内容")
|
||||
private List<DatasetAnswerRespVO> datasetAnswerRespVO;
|
||||
|
||||
|
@ -24,7 +24,10 @@ public class DatasetQuestionSaveReqVO {
|
||||
|
||||
@Schema(description = "标注状态,使用字典(llm_dataset_mark_status)", example = "1")
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "系统身份")
|
||||
private String system;
|
||||
@Schema(description = "标注内容")
|
||||
private List<DatasetAnswerSaveReqVO> datasetAnswerSaveReqVO;
|
||||
private List<DatasetAnswerSaveReqVO> datasetAnswerRespVO;
|
||||
|
||||
}
|
@ -55,7 +55,7 @@ public class DatasetRespVO {
|
||||
private Long dataLength;
|
||||
|
||||
@Schema(description = "标注进度", example = "20")
|
||||
private String annotateProgress;
|
||||
private Integer annotateProgress;
|
||||
|
||||
/* @Schema(description = "数据集数据文件", example = "[]")
|
||||
private List<DatasetQuestionRespVO> datasetQuestionRespVOS;*/
|
||||
|
@ -42,7 +42,7 @@ public class DatasetSaveReqVO {
|
||||
private Long dataLength;
|
||||
|
||||
@Schema(description = "标注进度", example = "20")
|
||||
private String annotateProgress;
|
||||
private Integer annotateProgress;
|
||||
|
||||
@Schema(description = "数据集数据文件", example = "[]")
|
||||
private List<DatasetFilesSaveReqVO> datasetFiles;
|
||||
|
@ -1,5 +1,7 @@
|
||||
package cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskauto;
|
||||
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.vo.ModelAssessTaskManualPageReqVO;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual.vo.ModelAssessTaskManualRespVO;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskauto.ModelAssessTaskStoplistDO;
|
||||
import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskauto.ModelAssessTaskStoplistMapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@ -98,4 +100,30 @@ public class ModelAssessTaskAutoController {
|
||||
BeanUtils.toBean(list, ModelAssessTaskAutoRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
@GetMapping("/gitReport")
|
||||
@Operation(summary = "查看报告详情")
|
||||
@PreAuthorize("@ss.hasPermission('llm:model-assess-task-manual:query')")
|
||||
public CommonResult<PageResult<ModelAssessTaskManualRespVO>> gitViewTheReportDetails(@Valid ModelAssessTaskManualPageReqVO pageReqVO) {
|
||||
//TODO 自动评估-查看报告待补充
|
||||
return success(new PageResult<>());
|
||||
}
|
||||
|
||||
@PostMapping("/backedUp")
|
||||
@Operation(summary = "备份")
|
||||
public void backedUp(ModelAssessTaskManualPageReqVO pageReqVO) {
|
||||
//TODO 自动评估-备份待补充
|
||||
}
|
||||
|
||||
@PostMapping("/cancelTheBackUp")
|
||||
@Operation(summary = "取消备份")
|
||||
public void cancelTheBackUp(ModelAssessTaskManualPageReqVO pageReqVO) {
|
||||
//TODO 自动评估-取消备份待补充
|
||||
}
|
||||
|
||||
@PostMapping("/reEvaluation")
|
||||
@Operation(summary = "重新评估")
|
||||
public void reEvaluation(ModelAssessTaskManualPageReqVO pageReqVO) {
|
||||
//TODO 自动评估-重新评估待补充
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.llm.controller.admin.modelassesstaskmanual;
|
||||
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.DatasetQuestionPageReqVO;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.modelassesstaskmanual.ModelAssessTaskDimensionDO;
|
||||
import cn.iocoder.yudao.module.llm.dal.mysql.modelassesstaskmanual.ModelAssessTaskDimensionMapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@ -97,4 +98,40 @@ public class ModelAssessTaskManualController {
|
||||
BeanUtils.toBean(list, ModelAssessTaskManualRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
@GetMapping("/gitReport")
|
||||
@Operation(summary = "查看报告详情")
|
||||
@PreAuthorize("@ss.hasPermission('llm:model-assess-task-manual:query')")
|
||||
public CommonResult<PageResult<ModelAssessTaskManualRespVO>> gitViewTheReportDetails(@Valid ModelAssessTaskManualPageReqVO pageReqVO) {
|
||||
//TODO 人工评估-查看报告待补充
|
||||
return success(new PageResult<>());
|
||||
}
|
||||
|
||||
@GetMapping("/getManualAssessment")
|
||||
@Operation(summary = "人工评估")
|
||||
@PreAuthorize("@ss.hasPermission('llm:model-assess-task-manual:query')")
|
||||
public CommonResult<PageResult<ModelAssessTaskManualRespVO>> getManualAssessment(ModelAssessTaskManualPageReqVO pageReqVO) {
|
||||
//TODO 人工评估-人工评估标注补充
|
||||
return success(new PageResult<>());
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/backedUp")
|
||||
@Operation(summary = "备份")
|
||||
public void backedUp(ModelAssessTaskManualPageReqVO pageReqVO) {
|
||||
//TODO 人工评估-备份待补充
|
||||
}
|
||||
|
||||
@PostMapping("/cancelTheBackUp")
|
||||
@Operation(summary = "取消备份")
|
||||
public void cancelTheBackUp(ModelAssessTaskManualPageReqVO pageReqVO) {
|
||||
//TODO 人工评估-取消备份待补充
|
||||
}
|
||||
|
||||
@PostMapping("/saveTheLabelData")
|
||||
@Operation(summary = "保存标注数据")
|
||||
@PreAuthorize("@ss.hasPermission('llm:model-assess-task-manual:create')")
|
||||
public void saveTheLabelData(ModelAssessTaskManualSaveReqVO updateReqV){
|
||||
//TODO 人工评估-保存标注数据待补充
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -66,6 +66,6 @@ public class DatasetDO extends BaseDO {
|
||||
/**
|
||||
* 标注进度
|
||||
*/
|
||||
private String annotateProgress;
|
||||
private Integer annotateProgress;
|
||||
|
||||
}
|
||||
|
@ -44,4 +44,6 @@ public class DatasetQuestionDO extends BaseDO {
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
private String system;
|
||||
|
||||
}
|
@ -33,6 +33,6 @@ public interface DatasetMapper extends BaseMapperX<DatasetDO> {
|
||||
.orderByDesc(DatasetDO::getId));
|
||||
}
|
||||
|
||||
@Update("update llm_dataset set annotate_progress = CONCAT(#{formattedRatio}, '%') where id = #{datasetId}")
|
||||
void updateProcess(@Param("formattedRatio") String formattedRatio, @Param("datasetId") Long datasetId);
|
||||
@Update("update llm_dataset set annotate_progress = #{formattedRatio} where id = #{datasetId}")
|
||||
void updateProcess(@Param("formattedRatio") Integer formattedRatio, @Param("datasetId") Long datasetId);
|
||||
}
|
||||
|
@ -97,9 +97,11 @@ public class DatasetQuestionServiceImpl implements DatasetQuestionService {
|
||||
updateReqVOS.forEach(updateReqVO -> {
|
||||
DatasetQuestionDO datasetQuestionDO = BeanUtils.toBean(updateReqVO, DatasetQuestionDO.class);
|
||||
datasetQuestionMapper.updateById(datasetQuestionDO);
|
||||
List<DatasetAnswerSaveReqVO> datasetAnswerSaveReqVO = updateReqVO.getDatasetAnswerSaveReqVO();
|
||||
List<DatasetAnswerSaveReqVO> datasetAnswerSaveReqVO = updateReqVO.getDatasetAnswerRespVO();
|
||||
List<DatasetAnswerDO> datasetAnswerDOS = BeanUtils.toBean(datasetAnswerSaveReqVO, DatasetAnswerDO.class);
|
||||
datasetAnswerMapper.insertOrUpdate(datasetAnswerDOS);
|
||||
if (CollectionUtils.isNotEmpty(datasetAnswerDOS)){
|
||||
datasetAnswerMapper.insertOrUpdate(datasetAnswerDOS);
|
||||
}
|
||||
});
|
||||
// 标注进度修改
|
||||
LambdaQueryWrapper<DatasetQuestionDO> wrapper = new LambdaQueryWrapper<DatasetQuestionDO>()
|
||||
@ -108,7 +110,7 @@ public class DatasetQuestionServiceImpl implements DatasetQuestionService {
|
||||
wrapper.eq(DatasetQuestionDO::getStatus,2);
|
||||
Long annoCount = datasetQuestionMapper.selectCount(wrapper);
|
||||
double ratio = sumCount == 0 ? 0 : ((double) annoCount / sumCount) *100;
|
||||
String formattedRatio = String.format("%.2f", ratio);
|
||||
Integer formattedRatio = ratio == 0 ? 0 : (int) ratio;
|
||||
datasetMapper.updateProcess(formattedRatio, updateReqVOS.get(0).getDatasetId());
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.llm.service.dataset;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.dto.DataJsonTemplate;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.*;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.dataset.DatasetDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
|
@ -4,10 +4,13 @@ package cn.iocoder.yudao.module.llm.service.dataset;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.llm.constant.DataConstants;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.dto.DataJsonTemplate;
|
||||
import cn.iocoder.yudao.module.llm.controller.admin.dataset.vo.*;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.dataset.DatasetAnswerDO;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.dataset.DatasetDO;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.dataset.DatasetFilesDO;
|
||||
import cn.iocoder.yudao.module.llm.dal.dataobject.dataset.DatasetQuestionDO;
|
||||
import cn.iocoder.yudao.module.llm.dal.mysql.dataset.DatasetAnswerMapper;
|
||||
import cn.iocoder.yudao.module.llm.dal.mysql.dataset.DatasetFilesMapper;
|
||||
import cn.iocoder.yudao.module.llm.dal.mysql.dataset.DatasetMapper;
|
||||
import cn.iocoder.yudao.module.llm.dal.mysql.dataset.DatasetQuestionMapper;
|
||||
@ -49,6 +52,8 @@ public class DatasetServiceImpl implements DatasetService {
|
||||
private DatasetFilesMapper datasetFilesMapper;
|
||||
@Resource
|
||||
private DatasetQuestionMapper datasetQuestionMapper;
|
||||
@Resource
|
||||
private DatasetAnswerMapper datasetAnswerMapper;
|
||||
|
||||
@Override
|
||||
public Long createDataset(DatasetSaveReqVO createReqVO) {
|
||||
@ -107,7 +112,7 @@ public class DatasetServiceImpl implements DatasetService {
|
||||
.eq(DatasetQuestionDO::getDatasetId, updateObj.getId())
|
||||
.eq(DatasetQuestionDO::getStatus,2));
|
||||
double ratio = count == 0 ? 0 : ((double) annoCount / count) *100;
|
||||
String formattedRatio = String.format("%.2f%%", ratio);
|
||||
Integer formattedRatio = ratio == 0 ? 0 : (int) ratio;
|
||||
if (formattedRatio != null){
|
||||
updateObj.setAnnotateProgress(formattedRatio);
|
||||
}
|
||||
@ -186,16 +191,27 @@ public class DatasetServiceImpl implements DatasetService {
|
||||
content.append(line);
|
||||
}
|
||||
// 使用Jackson解析 Json 字符串为List<String>对象
|
||||
// 使用Jackson解析 Json 字符串为List<String>对象
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
// 使用 TypeReference 解析 JSON 字符串为 List<String>
|
||||
List<String> stringList = mapper.readValue(content.toString(), new TypeReference<List<String>>() {});
|
||||
stringList.forEach(
|
||||
string -> {
|
||||
DatasetQuestionDO datasetQuestionDO = new DatasetQuestionDO();
|
||||
List<DataJsonTemplate> jsonList = mapper.readValue(content.toString(), new TypeReference<List<DataJsonTemplate>>() {});
|
||||
jsonList.forEach(
|
||||
dataJsonTemplate -> {
|
||||
DatasetQuestionDO datasetQuestionDO = BeanUtils.toBean(dataJsonTemplate, DatasetQuestionDO.class);
|
||||
datasetQuestionDO.setDatasetId(datasetFilesDO.getDatasetId());
|
||||
datasetQuestionDO.setQuestion(string);
|
||||
datasetQuestionDO.setDatasetFilesId(datasetFilesDO.getId());
|
||||
datasetQuestionMapper.insert(datasetQuestionDO);
|
||||
List<String> answers = dataJsonTemplate.getAnswers();
|
||||
if (CollectionUtils.isNotEmpty(answers)){
|
||||
for (String answer : answers) {
|
||||
DatasetAnswerDO datasetAnswerDO = new DatasetAnswerDO();
|
||||
datasetAnswerDO.setDatasetId(datasetFilesDO.getDatasetId());
|
||||
datasetAnswerDO.setDatasetFilesId(datasetFilesDO.getId());
|
||||
datasetAnswerDO.setQuestionId(datasetQuestionDO.getId());
|
||||
datasetAnswerDO.setAnswer(answer);
|
||||
datasetAnswerMapper.insert(datasetAnswerDO);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}catch (Exception e){
|
||||
|
@ -125,19 +125,20 @@ public class ModelAssessTaskAutoServiceImpl implements ModelAssessTaskAutoServic
|
||||
List<ModelAssessTaskStoplistRespVO> stoplistRespVOS = BeanUtils.toBean(modelAssessTaskStoplistDOS, ModelAssessTaskStoplistRespVO.class);
|
||||
// 提取id
|
||||
List<Long> stoplistIds = modelAssessTaskStoplistDOS.stream().map(ModelAssessTaskStoplistDO::getStoplistId).collect(Collectors.toList());
|
||||
// 查询停用词表 将词表word返回
|
||||
LambdaQueryWrapper<ModelAssessStoplistDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.in(ModelAssessStoplistDO::getId,stoplistIds);
|
||||
List<ModelAssessStoplistDO> modelAssessStoplistDOs = modelAssessStoplistMapper.selectList(wrapper);
|
||||
Map<Long, ModelAssessStoplistDO> longModelServiceDOMap = cn.iocoder.yudao.framework.common.util.collection.
|
||||
CollectionUtils.convertMap(modelAssessStoplistDOs, ModelAssessStoplistDO::getId);
|
||||
stoplistRespVOS.stream().forEach(stoplistRespVO -> {
|
||||
ModelAssessStoplistDO modelAssessStoplistDO = longModelServiceDOMap.get(stoplistRespVO.getStoplistId());
|
||||
if(modelAssessStoplistDO != null){
|
||||
stoplistRespVO.setStoplistName(modelAssessStoplistDO.getWord());
|
||||
}
|
||||
});
|
||||
|
||||
if (!CollectionUtils.isEmpty(stoplistIds)){
|
||||
// 查询停用词表 将词表word返回
|
||||
LambdaQueryWrapper<ModelAssessStoplistDO> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.in(ModelAssessStoplistDO::getId,stoplistIds);
|
||||
List<ModelAssessStoplistDO> modelAssessStoplistDOs = modelAssessStoplistMapper.selectList(wrapper);
|
||||
Map<Long, ModelAssessStoplistDO> longModelServiceDOMap = cn.iocoder.yudao.framework.common.util.collection.
|
||||
CollectionUtils.convertMap(modelAssessStoplistDOs, ModelAssessStoplistDO::getId);
|
||||
stoplistRespVOS.stream().forEach(stoplistRespVO -> {
|
||||
ModelAssessStoplistDO modelAssessStoplistDO = longModelServiceDOMap.get(stoplistRespVO.getStoplistId());
|
||||
if(modelAssessStoplistDO != null){
|
||||
stoplistRespVO.setStoplistName(modelAssessStoplistDO.getWord());
|
||||
}
|
||||
});
|
||||
}
|
||||
result.setStoplists(stoplistRespVOS);
|
||||
|
||||
ModelServiceDO modelServiceDO = modelServiceMapper.selectById(modelAssessTaskAutoDO.getModelService());
|
||||
|
@ -122,19 +122,20 @@ public class ModelAssessTaskManualServiceImpl implements ModelAssessTaskManualSe
|
||||
// 提取id
|
||||
List<Long> dimensionIds = modelAssessTaskDimensionDOS.stream().map(ModelAssessTaskDimensionDO::getDimensionId).collect(Collectors.toList());
|
||||
// 查询模型评估维度 将维度名称返回
|
||||
List<ModelAssessDimensionDO> modelAssessDimensionDOS = modelAssessDimensionMapper.selectList(new LambdaQueryWrapper<ModelAssessDimensionDO>()
|
||||
.in(ModelAssessDimensionDO::getId, dimensionIds));
|
||||
Map<Long, ModelAssessDimensionDO> longModelDimesionDOMap = cn.iocoder.yudao.framework.common.util.collection.
|
||||
CollectionUtils.convertMap(modelAssessDimensionDOS, ModelAssessDimensionDO::getId);
|
||||
modelAssessTaskDimensionRespVOS.stream().forEach(
|
||||
modelAssessTaskDimensionRespVO -> {
|
||||
ModelAssessDimensionDO modelAssessDimensionDO = longModelDimesionDOMap.get(modelAssessTaskDimensionRespVO.getDimensionId());
|
||||
if (modelAssessDimensionDO != null){
|
||||
modelAssessTaskDimensionRespVO.setDimensionName(modelAssessDimensionDO.getDimension());
|
||||
if (!CollectionUtils.isEmpty(dimensionIds)){
|
||||
List<ModelAssessDimensionDO> modelAssessDimensionDOS = modelAssessDimensionMapper.selectList(new LambdaQueryWrapper<ModelAssessDimensionDO>()
|
||||
.in(ModelAssessDimensionDO::getId, dimensionIds));
|
||||
Map<Long, ModelAssessDimensionDO> longModelDimesionDOMap = cn.iocoder.yudao.framework.common.util.collection.
|
||||
CollectionUtils.convertMap(modelAssessDimensionDOS, ModelAssessDimensionDO::getId);
|
||||
modelAssessTaskDimensionRespVOS.stream().forEach(
|
||||
modelAssessTaskDimensionRespVO -> {
|
||||
ModelAssessDimensionDO modelAssessDimensionDO = longModelDimesionDOMap.get(modelAssessTaskDimensionRespVO.getDimensionId());
|
||||
if (modelAssessDimensionDO != null){
|
||||
modelAssessTaskDimensionRespVO.setDimensionName(modelAssessDimensionDO.getDimension());
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
);
|
||||
}
|
||||
result.setDimensions(modelAssessTaskDimensionRespVOS);
|
||||
ModelServiceDO modelServiceDO = modelServiceMapper.selectById(modelAssessTaskManual.getModelService());
|
||||
if (modelServiceDO != null){
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.user;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
@ -27,6 +28,7 @@ import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.Valid;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -142,6 +144,57 @@ public class UserController {
|
||||
UserConvert.INSTANCE.convertList(list, deptMap));
|
||||
}
|
||||
|
||||
@GetMapping("/student/export")
|
||||
@Operation(summary = "导出学生")
|
||||
@PreAuthorize("@ss.hasPermission('system:user:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exporStudent(@Validated UserPageReqVO exportReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<AdminUserDO> list = userService.getUserPage(exportReqVO).getList();
|
||||
|
||||
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
|
||||
convertList(list, AdminUserDO::getDeptId));
|
||||
|
||||
List<UserRespVO> userRespVOS = UserConvert.INSTANCE.convertList(list, deptMap);
|
||||
//将用户转换成学生的标头
|
||||
List<UserStudentExcelVO> studentUserList = new ArrayList<>();
|
||||
if (!userRespVOS.isEmpty()) {
|
||||
userRespVOS.stream().forEach(sysUser ->{
|
||||
UserStudentExcelVO student = new UserStudentExcelVO();
|
||||
BeanUtil.copyProperties(sysUser, student);
|
||||
studentUserList.add(student);
|
||||
});
|
||||
}
|
||||
// 输出 Excel
|
||||
ExcelUtils.write(response, "学生数据.xls", "数据", UserStudentExcelVO.class, studentUserList );
|
||||
}
|
||||
|
||||
@GetMapping("/teacher/export")
|
||||
@Operation(summary = "导出教师")
|
||||
@PreAuthorize("@ss.hasPermission('system:user:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exporTeacher(@Validated UserPageReqVO exportReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
exportReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<AdminUserDO> list = userService.getUserPage(exportReqVO).getList();
|
||||
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
|
||||
convertList(list, AdminUserDO::getDeptId));
|
||||
List<UserRespVO> userRespVOS = UserConvert.INSTANCE.convertList(list, deptMap);
|
||||
//将用户转换成教师的标头
|
||||
List<UserTeacherExcelVO> studentUserList = new ArrayList<>();
|
||||
if (!userRespVOS.isEmpty()) {
|
||||
userRespVOS.stream().forEach(sysUser ->{
|
||||
UserTeacherExcelVO student = new UserTeacherExcelVO();
|
||||
BeanUtil.copyProperties(sysUser, student);
|
||||
studentUserList.add(student);
|
||||
});
|
||||
}
|
||||
// 输出 Excel
|
||||
ExcelUtils.write(response, "教师数据.xls", "数据", UserTeacherExcelVO.class,
|
||||
studentUserList);
|
||||
}
|
||||
|
||||
@GetMapping("/get-import-template")
|
||||
@Operation(summary = "获得导入用户模板")
|
||||
public void importTemplate(HttpServletResponse response) throws IOException {
|
||||
@ -169,4 +222,65 @@ public class UserController {
|
||||
return success(userService.importUserList(list, updateSupport));
|
||||
}
|
||||
|
||||
@PostMapping("/student/import")
|
||||
@Operation(summary = "导入学生")
|
||||
@Parameters({
|
||||
@Parameter(name = "file", description = "Excel 文件", required = true),
|
||||
})
|
||||
@PreAuthorize("@ss.hasPermission('system:user:import')")
|
||||
public CommonResult<String> importExcelStudent(@RequestParam("file") MultipartFile file) throws Exception {
|
||||
List<UserStudentExcelVO> list = ExcelUtils.read(file, UserStudentExcelVO.class);
|
||||
List<AdminUserDO> userList = new ArrayList<>();
|
||||
if (!list.isEmpty()) {
|
||||
list.stream().forEach(sysStudentUser ->{
|
||||
AdminUserDO user = new AdminUserDO();
|
||||
BeanUtil.copyProperties(sysStudentUser, user);
|
||||
user.setUserType(2);
|
||||
userList.add(user);
|
||||
});
|
||||
}
|
||||
return success(userService.importUserStudentTeacher(userList));
|
||||
}
|
||||
|
||||
@PostMapping("/teacher/import")
|
||||
@Operation(summary = "导入教师")
|
||||
@Parameters({
|
||||
@Parameter(name = "file", description = "Excel 文件", required = true)
|
||||
})
|
||||
@PreAuthorize("@ss.hasPermission('system:user:import')")
|
||||
public CommonResult<String> importExcelTeacher(@RequestParam("file") MultipartFile file) throws Exception {
|
||||
List<UserTeacherExcelVO> list = ExcelUtils.read(file, UserTeacherExcelVO.class);
|
||||
List<AdminUserDO> userList = new ArrayList<>();
|
||||
if (!list.isEmpty()) {
|
||||
list.stream().forEach(sysStudentUser ->{
|
||||
AdminUserDO user = new AdminUserDO();
|
||||
BeanUtil.copyProperties(sysStudentUser, user);
|
||||
user.setUserType(1);
|
||||
userList.add(user);
|
||||
});
|
||||
}
|
||||
return success(userService.importUserStudentTeacher(userList));
|
||||
}
|
||||
|
||||
@GetMapping("/student/importTemplate")
|
||||
@Operation(summary = "导出学生")
|
||||
@PreAuthorize("@ss.hasPermission('system:user:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void importStudentTemplate(HttpServletResponse response) throws IOException {
|
||||
List<UserStudentExcelVO> list = new ArrayList<>();
|
||||
// 输出 Excel
|
||||
ExcelUtils.write(response, "学生模板.xls", "数据", UserStudentExcelVO.class,list);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/teacher/importTemplate")
|
||||
@Operation(summary = "导出教师模板")
|
||||
@PreAuthorize("@ss.hasPermission('system:user:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void importTeacherTemplate(HttpServletResponse response) throws IOException {
|
||||
List<UserTeacherExcelVO> list = new ArrayList<>();
|
||||
// 输出 Excel
|
||||
ExcelUtils.write(response, "教师模板.xls", "数据", UserTeacherExcelVO.class,list);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -38,4 +38,16 @@ public class UserPageReqVO extends PageParam {
|
||||
@Schema(description = "角色编号", example = "1024")
|
||||
private Long roleId;
|
||||
|
||||
@Schema(description = "用户类型", example = "0 管理员 1教师 2学生")
|
||||
private Integer userType;
|
||||
|
||||
@Schema(description = "教职工号/学生编号", example = "1")
|
||||
private String userNo;
|
||||
|
||||
@Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
|
||||
private LocalDateTime birthDate;
|
||||
|
||||
@Schema(description = "当userType为学生时 0 学生 1学员,当userType为教师时 0 教师 1培训教师", example = "1")
|
||||
private Integer statusType;
|
||||
|
||||
}
|
||||
|
@ -72,4 +72,16 @@ public class UserRespVO{
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "用户类型", example = "0 管理员 1教师 2学生")
|
||||
private Integer userType;
|
||||
|
||||
@Schema(description = "教职工号/学生编号", example = "1")
|
||||
private String userNo;
|
||||
|
||||
@Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
|
||||
private LocalDateTime birthDate;
|
||||
|
||||
@Schema(description = "当userType为学生时 0 学生 1学员,当userType为教师时 0 教师 1培训教师", example = "1")
|
||||
private Integer statusType;
|
||||
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Set;
|
||||
|
||||
@Schema(description = "管理后台 - 用户创建/修改 Request VO")
|
||||
@ -77,4 +78,16 @@ public class UserSaveReqVO {
|
||||
|| (ObjectUtil.isAllNotEmpty(password)); // 新增时,必须都传递 password
|
||||
}
|
||||
|
||||
@Schema(description = "用户类型", example = "0 管理员 1教师 2学生")
|
||||
private Integer userType;
|
||||
|
||||
@Schema(description = "教职工号/学生编号", example = "1")
|
||||
private String userNo;
|
||||
|
||||
@Schema(description = "出生日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
|
||||
private LocalDateTime birthDate;
|
||||
|
||||
@Schema(description = "当userType为学生时 0 学生 1学员,当userType为教师时 0 教师 1培训教师", example = "1")
|
||||
private Integer statusType;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,31 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.user.vo.user;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class UserStudentExcelVO {
|
||||
|
||||
@ExcelProperty("登录账号")
|
||||
private String username;
|
||||
|
||||
@ExcelProperty("学生姓名")
|
||||
private String nickname;
|
||||
|
||||
@ExcelProperty("学生编号")
|
||||
private String userNo;
|
||||
|
||||
@ExcelProperty("学生类型")
|
||||
private String statusType;
|
||||
|
||||
@ExcelProperty("性别")
|
||||
private String sex;
|
||||
|
||||
@ExcelProperty("手机号码")
|
||||
private String mobile;
|
||||
|
||||
@ExcelProperty("状态")
|
||||
private String status;
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.user.vo.user;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class UserTeacherExcelVO {
|
||||
|
||||
@ExcelProperty("登录账号")
|
||||
private String username;
|
||||
|
||||
@ExcelProperty("教职工号")
|
||||
private String userNo;
|
||||
|
||||
@ExcelProperty("姓名")
|
||||
private String nickname;
|
||||
|
||||
@ExcelProperty("邮箱")
|
||||
private String email;
|
||||
|
||||
@ExcelProperty("手机号码")
|
||||
private String mobile;
|
||||
|
||||
@ExcelProperty("性别")
|
||||
private String sex;
|
||||
|
||||
@ExcelProperty("状态")
|
||||
private String status;
|
||||
|
||||
@ExcelProperty("出生日期")
|
||||
private String birthDate;
|
||||
|
||||
@ExcelProperty("教师类型类型")
|
||||
private String statusType;
|
||||
|
||||
|
||||
|
||||
}
|
@ -96,4 +96,20 @@ public class AdminUserDO extends TenantBaseDO {
|
||||
* 用户类型:0 - 管理员、1-老师、2-学生
|
||||
*/
|
||||
private Integer userType;
|
||||
|
||||
/**
|
||||
* 教职工号/学生编号
|
||||
*/
|
||||
private String userNo;
|
||||
|
||||
/**
|
||||
* 出生日期
|
||||
*/
|
||||
private LocalDateTime birthDate;
|
||||
|
||||
/**
|
||||
* 当userType为学生时 0 学生 1学员
|
||||
* 当userType为教师时 0 教师 1培训教师
|
||||
*/
|
||||
private Integer statusType;
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
|
||||
.likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername())
|
||||
.likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile())
|
||||
.eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
|
||||
.eqIfPresent(AdminUserDO::getUserType, reqVO.getUserType())
|
||||
.betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime())
|
||||
.inIfPresent(AdminUserDO::getDeptId, deptIds)
|
||||
.inIfPresent(AdminUserDO::getId, userIds)
|
||||
|
@ -199,6 +199,8 @@ public interface AdminUserService {
|
||||
*/
|
||||
UserImportRespVO importUserList(List<UserImportExcelVO> importUsers, boolean isUpdateSupport);
|
||||
|
||||
String importUserStudentTeacher(List<AdminUserDO> importUsers);
|
||||
|
||||
/**
|
||||
* 获得指定状态的用户们
|
||||
*
|
||||
|
@ -33,8 +33,10 @@ import com.google.common.annotations.VisibleForTesting;
|
||||
import com.mzt.logapi.context.LogRecordContext;
|
||||
import com.mzt.logapi.service.impl.DiffParseFunction;
|
||||
import com.mzt.logapi.starter.annotation.LogRecord;
|
||||
import com.thoughtworks.xstream.core.SecurityUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@ -508,6 +510,33 @@ public class AdminUserServiceImpl implements AdminUserService {
|
||||
return respVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String importUserStudentTeacher(List<AdminUserDO> importUsers) {
|
||||
if (importUsers == null || importUsers.size() == 0) {
|
||||
throw new ServiceException(500,"导入用户数据不能为空!");
|
||||
}
|
||||
StringBuilder successMsg = new StringBuilder();
|
||||
for (AdminUserDO user : importUsers) {
|
||||
if(user.getUsername() == null || user.getUsername().equals("")){
|
||||
successMsg.append("用户名不能为空,导入失败/n" );
|
||||
continue;
|
||||
}
|
||||
AdminUserDO adminUserDO = userMapper.selectByUsername(user.getUsername());
|
||||
if(adminUserDO != null){
|
||||
successMsg.append("用户名:" + user.getUsername() + "已存在,导入失败/n" );
|
||||
continue;
|
||||
}
|
||||
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||
String password = passwordEncoder.encode("123456");
|
||||
user.setPassword(password);
|
||||
user.setStatus(0);
|
||||
userMapper.insert(user);
|
||||
successMsg.append("用户名:" + user.getUsername() + "已导入成功/n" );
|
||||
}
|
||||
successMsg.insert(0, "导入完成,数据如下:");
|
||||
return successMsg.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AdminUserDO> getUserListByStatus(Integer status) {
|
||||
return userMapper.selectListByStatus(status);
|
||||
|
@ -237,6 +237,12 @@ llm:
|
||||
# 登录 POST
|
||||
login: http://localhost:8123/login
|
||||
|
||||
#### 大模型对话
|
||||
# 模型列表 GET
|
||||
model_list: http://api.xhllm.xinnuojinzhi.com/model/v1/models
|
||||
# 模型对话 POST
|
||||
model_completions: http://api.xhllm.xinnuojinzhi.com/model/v1/chat/completions
|
||||
|
||||
--- #################### iot相关配置 TODO 芋艿:再瞅瞅 ####################
|
||||
iot:
|
||||
emq:
|
||||
|
@ -246,7 +246,7 @@ justauth:
|
||||
--- #################### 大模型训练相关配置 ###################
|
||||
llm:
|
||||
backend:
|
||||
# RAG服务
|
||||
#### RAG服务
|
||||
#RAG健康检查 GET
|
||||
rag_health: http://localhost:8123/health
|
||||
#上传并向量化 POST
|
||||
@ -262,7 +262,7 @@ llm:
|
||||
#支持多个文件id查询向量 GET
|
||||
rag_query_multiple: http://localhost:8123/query_multiple
|
||||
|
||||
# LLM train and service api
|
||||
#### LLM train and service api
|
||||
# 训练集列表 GET
|
||||
dataset_list: http://localhost:8123/api/mgr/datasets/list
|
||||
# 上传训练集 POST
|
||||
@ -280,6 +280,12 @@ llm:
|
||||
# 登录 POST
|
||||
login: http://localhost:8123/login
|
||||
|
||||
#### 大模型对话
|
||||
# 模型列表 GET
|
||||
model_list: http://api.xhllm.xinnuojinzhi.com/model/v1/models
|
||||
# 模型对话 POST
|
||||
model_completions: http://api.xhllm.xinnuojinzhi.com/model/v1/chat/completions
|
||||
|
||||
--- #################### iot相关配置 TODO 芋艿:再瞅瞅 ####################
|
||||
iot:
|
||||
emq:
|
||||
|
Loading…
x
Reference in New Issue
Block a user