|
|
|
@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
import cn.hutool.core.date.TimeInterval;
|
|
|
|
|
import cn.hutool.core.io.FileUtil;
|
|
|
|
|
import cn.hutool.core.lang.Assert;
|
|
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
|
|
import cn.hutool.poi.excel.ExcelReader;
|
|
|
|
|
import cn.hutool.poi.excel.ExcelUtil;
|
|
|
|
@ -20,11 +21,9 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.io.BufferedOutputStream;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
import java.util.HashSet;
|
|
|
|
|
import java.io.*;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -49,21 +48,15 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
|
|
|
|
|
private final CommonDicService commonDicService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MedicalAnswerVideoResVo preGenerationMedicalAnswerVideo(InputStream bookStream, String medicalId) throws Exception {
|
|
|
|
|
public MedicalAnswerVideoResVo preGenerationMedicalAnswerVideo(InputStream inputStream, String medicalId) throws Exception {
|
|
|
|
|
|
|
|
|
|
TimeInterval timer = DateUtil.timer();
|
|
|
|
|
ExcelReader reader = ExcelUtil.getReader(bookStream);
|
|
|
|
|
|
|
|
|
|
ExcelReader reader = ExcelUtil.getReader(inputStream);
|
|
|
|
|
log.info("generationMedicalAnswerVideo : 读取文件耗时:{} s" , timer.intervalSecond());
|
|
|
|
|
|
|
|
|
|
// 校验模板是否正确
|
|
|
|
|
List<String> assertTitle = assertTitle(reader);
|
|
|
|
|
if (CollUtil.isNotEmpty(assertTitle)){
|
|
|
|
|
FileResource fileResource = fileManageService.uploadFile(bookStream);
|
|
|
|
|
MedicalAnswerVideoResVo medicalAnswerVideoResVo = new MedicalAnswerVideoResVo();
|
|
|
|
|
medicalAnswerVideoResVo.setFileId(fileResource.getId());
|
|
|
|
|
medicalAnswerVideoResVo.setTemplateErrorFlag(false);
|
|
|
|
|
return medicalAnswerVideoResVo;
|
|
|
|
|
}
|
|
|
|
|
assertTitle(reader);
|
|
|
|
|
|
|
|
|
|
List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS = reader.readAll(MedicalRecAnswerExcelDTO.class);
|
|
|
|
|
|
|
|
|
@ -118,9 +111,8 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
|
|
|
|
|
MedicalAnswerVideoResVo medicalAnswerVideoResVo = new MedicalAnswerVideoResVo();
|
|
|
|
|
|
|
|
|
|
medicalAnswerVideoResVo.setFileId(fileId);
|
|
|
|
|
String message = StrUtil.format("共导入数据{}条,失败{}条。",medicalRecAnswerExcelDTOS.size(),
|
|
|
|
|
medicalRecAnswerExcelDTOS.stream().filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())).count());
|
|
|
|
|
medicalAnswerVideoResVo.setMessage(message);
|
|
|
|
|
medicalAnswerVideoResVo.setTotalCount(medicalRecAnswerExcelDTOS.size());
|
|
|
|
|
medicalAnswerVideoResVo.setFailCount((int) medicalRecAnswerExcelDTOS.stream().filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())).count());
|
|
|
|
|
|
|
|
|
|
List<MedicalRecQaVO> medicalRecQaVOList = medicalRecAnswerExcelDTOS.stream().filter(dto -> CollUtil.isEmpty(dto.getErrorCodeEnums())).map(dto -> {
|
|
|
|
|
MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO();
|
|
|
|
@ -168,8 +160,9 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
|
|
|
|
|
|
|
|
|
|
public File writeExcel(List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS) throws Exception {
|
|
|
|
|
|
|
|
|
|
List<MedicalRecAnswerExcelDTO> errorList = medicalRecAnswerExcelDTOS.stream()
|
|
|
|
|
.filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())).collect(Collectors.toList());
|
|
|
|
|
List<Map<String, Object>> errorList = medicalRecAnswerExcelDTOS.stream()
|
|
|
|
|
.filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums()))
|
|
|
|
|
.map(MedicalRecAnswerExcelDTO::toExcelMap).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
File templateFile = fileManageService.downloadFile(errorTemplateResourceId);
|
|
|
|
|
try (ExcelWriter writer = ExcelUtil.getWriter(templateFile)){
|
|
|
|
@ -186,23 +179,13 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
|
|
|
|
|
* 校验行头
|
|
|
|
|
* @param reader
|
|
|
|
|
*/
|
|
|
|
|
private List<String> assertTitle(ExcelReader reader){
|
|
|
|
|
HashSet<String> messages = new HashSet<>();
|
|
|
|
|
private void assertTitle(ExcelReader reader){
|
|
|
|
|
List<Object> titleList = reader.readRow(0);
|
|
|
|
|
if (CollUtil.isEmpty(titleList)){
|
|
|
|
|
messages.add("标题行为空");
|
|
|
|
|
return CollUtil.newArrayList(messages);
|
|
|
|
|
}
|
|
|
|
|
Assert.isTrue(CollUtil.isNotEmpty(titleList), "表头格式有误,请重新导入");
|
|
|
|
|
for (int i = 0; i < MedicalRecAnswerExcelDTO.READ_ANSWER_VIDEO_TITLE.size(); i++) {
|
|
|
|
|
if (titleList.size() <= i){
|
|
|
|
|
messages.add("标题行长度不匹配");
|
|
|
|
|
return CollUtil.newArrayList(messages);
|
|
|
|
|
}
|
|
|
|
|
if (!MedicalRecAnswerExcelDTO.READ_ANSWER_VIDEO_TITLE.get(i).equals(titleList.get(i))){
|
|
|
|
|
messages.add("标题行不匹配");
|
|
|
|
|
}
|
|
|
|
|
Assert.isTrue(titleList.size() > i, "表头格式有误,请重新导入");
|
|
|
|
|
Assert.isTrue(MedicalRecAnswerExcelDTO.READ_ANSWER_VIDEO_TITLE.get(i).equals(titleList.get(i)), "表头格式有误,请重新导入");
|
|
|
|
|
}
|
|
|
|
|
return CollUtil.newArrayList(messages);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|