|
|
|
@ -11,16 +11,11 @@ import cn.hutool.poi.excel.ExcelUtil;
|
|
|
|
|
import cn.hutool.poi.excel.ExcelWriter;
|
|
|
|
|
import com.supervision.manage.dto.MedicalRecAnswerExcelDTO;
|
|
|
|
|
import com.supervision.manage.pojo.vo.MedicalAnswerVideoResVo;
|
|
|
|
|
import com.supervision.manage.pojo.vo.MedicalRecQaVO;
|
|
|
|
|
import com.supervision.manage.service.AnswerVideoResourceService;
|
|
|
|
|
import com.supervision.manage.service.FileManageService;
|
|
|
|
|
import com.supervision.model.AskPatientAnswer;
|
|
|
|
|
import com.supervision.model.AskTemplateQuestionLibrary;
|
|
|
|
|
import com.supervision.model.FileResource;
|
|
|
|
|
import com.supervision.model.MaterialLibrary;
|
|
|
|
|
import com.supervision.service.AskPatientAnswerService;
|
|
|
|
|
import com.supervision.service.AskTemplateQuestionLibraryService;
|
|
|
|
|
import com.supervision.service.FileResourceService;
|
|
|
|
|
import com.supervision.service.MaterialLibraryService;
|
|
|
|
|
import com.supervision.model.*;
|
|
|
|
|
import com.supervision.service.*;
|
|
|
|
|
import com.supervision.util.MinioUtil;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
@ -56,42 +51,86 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
|
|
|
|
|
|
|
|
|
|
private final FileManageService fileManageService;
|
|
|
|
|
|
|
|
|
|
private final CommonDicService commonDicService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public MedicalAnswerVideoResVo generationMedicalAnswerVideo(InputStream bookStream, String medicalId) throws Exception {
|
|
|
|
|
public MedicalAnswerVideoResVo preGenerationMedicalAnswerVideo(InputStream bookStream, String medicalId) throws Exception {
|
|
|
|
|
|
|
|
|
|
TimeInterval timer = DateUtil.timer();
|
|
|
|
|
ExcelReader reader = ExcelUtil.getReader(bookStream);
|
|
|
|
|
|
|
|
|
|
log.info("generationMedicalAnswerVideo : 读取文件耗时:{} s" , timer.intervalSecond());
|
|
|
|
|
//校验行头
|
|
|
|
|
|
|
|
|
|
assertTitle(reader);
|
|
|
|
|
|
|
|
|
|
List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS = reader.readAll(MedicalRecAnswerExcelDTO.class);
|
|
|
|
|
|
|
|
|
|
//数据合法性校验,填充不要的数据,为进一步处理准备
|
|
|
|
|
List<AskTemplateQuestionLibrary> questionLibraryList = askTemplateQuestionLibraryService.list();
|
|
|
|
|
List<AskPatientAnswer> askPatientAnswerList = askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalId).list();
|
|
|
|
|
List<MaterialLibrary> materialLibraryList = materialLibraryService.list();
|
|
|
|
|
medicalRecAnswerExcelDTOS.forEach(dto->dto.doAction(questionLibraryList,askPatientAnswerList,materialLibraryList));
|
|
|
|
|
|
|
|
|
|
// 保存诊断问询数据
|
|
|
|
|
updateAskPatientAnswer(medicalRecAnswerExcelDTOS,medicalId);
|
|
|
|
|
medicalRecAnswerExcelDoAction(medicalId, medicalRecAnswerExcelDTOS);
|
|
|
|
|
|
|
|
|
|
timer.restart();
|
|
|
|
|
// 生成错误信息excel
|
|
|
|
|
File file = writeExcel(medicalRecAnswerExcelDTOS);
|
|
|
|
|
log.info("generationMedicalAnswerVideo : 生成错误信息excel耗时:{} s" , timer.intervalSecond());
|
|
|
|
|
|
|
|
|
|
FileResource fileResource = fileManageService.uploadFile(file);
|
|
|
|
|
FileUtil.del(file);
|
|
|
|
|
|
|
|
|
|
//组装返回消息
|
|
|
|
|
return wrapperMedicalAnswerVideoResVo(medicalRecAnswerExcelDTOS,fileResource.getId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 数据合法性校验,填充必要的数据,为进一步处理准备
|
|
|
|
|
* @param medicalId 病历id
|
|
|
|
|
* @param medicalRecAnswerExcelDTOS 数据列表
|
|
|
|
|
*/
|
|
|
|
|
private void medicalRecAnswerExcelDoAction(String medicalId, List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS) {
|
|
|
|
|
|
|
|
|
|
// 查询问题库问题
|
|
|
|
|
List<AskTemplateQuestionLibrary> questionLibraryList = askTemplateQuestionLibraryService.list();
|
|
|
|
|
// 疾病id为空,不查询数据
|
|
|
|
|
List<AskPatientAnswer> askPatientAnswerList = StrUtil.isEmpty(medicalId) ?
|
|
|
|
|
CollUtil.newArrayList() :
|
|
|
|
|
askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalId).list();
|
|
|
|
|
// 查询资源库资源
|
|
|
|
|
List<MaterialLibrary> materialLibraryList = materialLibraryService.list();
|
|
|
|
|
// 查询类目字段
|
|
|
|
|
List<CommonDic> questionTypeDicList = commonDicService.lambdaQuery().eq(CommonDic::getGroupCode, "AQT").list();
|
|
|
|
|
|
|
|
|
|
medicalRecAnswerExcelDTOS.forEach(dto->dto.doAction(
|
|
|
|
|
questionLibraryList,askPatientAnswerList,materialLibraryList,questionTypeDicList));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 组装返回消息
|
|
|
|
|
* @param medicalRecAnswerExcelDTOS 数据
|
|
|
|
|
* @param fileId 文件id
|
|
|
|
|
* @return MedicalAnswerVideoResVo
|
|
|
|
|
*/
|
|
|
|
|
private MedicalAnswerVideoResVo wrapperMedicalAnswerVideoResVo(List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS,String fileId) {
|
|
|
|
|
|
|
|
|
|
MedicalAnswerVideoResVo medicalAnswerVideoResVo = new MedicalAnswerVideoResVo();
|
|
|
|
|
medicalAnswerVideoResVo.setFileId(fileResource.getId());
|
|
|
|
|
String message = StrUtil.format("共导入数据{}条,失败{}条",medicalRecAnswerExcelDTOS.size(),
|
|
|
|
|
|
|
|
|
|
medicalAnswerVideoResVo.setFileId(fileId);
|
|
|
|
|
String message = StrUtil.format("共导入数据{}条,失败{}条。",medicalRecAnswerExcelDTOS.size(),
|
|
|
|
|
medicalRecAnswerExcelDTOS.stream().filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())).count());
|
|
|
|
|
medicalAnswerVideoResVo.setMessage(message);
|
|
|
|
|
|
|
|
|
|
List<MedicalRecQaVO> medicalRecQaVOList = medicalRecAnswerExcelDTOS.stream().filter(dto -> CollUtil.isEmpty(dto.getErrorCodeEnums())).map(dto -> {
|
|
|
|
|
MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO();
|
|
|
|
|
medicalRecQaVO.setId(dto.getAskPatientAnswerId());
|
|
|
|
|
medicalRecQaVO.setLibraryQuestionId(dto.getLibraryQuestionId());
|
|
|
|
|
if (StrUtil.isNotEmpty(dto.getAnswerResourceId())) {
|
|
|
|
|
medicalRecQaVO.setDictId(Long.parseLong(dto.getDictId()));
|
|
|
|
|
}
|
|
|
|
|
medicalRecQaVO.setDictNamePath(dto.getDictNamePath());
|
|
|
|
|
medicalRecQaVO.setAnswerResourceId(dto.getAnswerResourceId());
|
|
|
|
|
medicalRecQaVO.setMedicalRecAnswer(dto.getAnswer());
|
|
|
|
|
return medicalRecQaVO;
|
|
|
|
|
}).collect(Collectors.toList());
|
|
|
|
|
medicalAnswerVideoResVo.setQaList(medicalRecQaVOList);
|
|
|
|
|
|
|
|
|
|
return medicalAnswerVideoResVo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void updateAskPatientAnswer(List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS,String medicalId){
|
|
|
|
|
|
|
|
|
@ -121,13 +160,10 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
|
|
|
|
|
|
|
|
|
|
public File writeExcel(List<MedicalRecAnswerExcelDTO> medicalRecAnswerExcelDTOS) throws Exception {
|
|
|
|
|
|
|
|
|
|
if (CollUtil.isEmpty(medicalRecAnswerExcelDTOS)){
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
List<MedicalRecAnswerExcelDTO> errorList = medicalRecAnswerExcelDTOS.stream()
|
|
|
|
|
.filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())).collect(Collectors.toList());
|
|
|
|
|
/* List<MedicalRecAnswerExcelDTO> errorList = medicalRecAnswerExcelDTOS.stream()
|
|
|
|
|
.filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())).collect(Collectors.toList());*/
|
|
|
|
|
|
|
|
|
|
List<Map<String, Object>> rowDataList = errorList.stream().map(MedicalRecAnswerExcelDTO::toExcelMap).collect(Collectors.toList());
|
|
|
|
|
List<Map<String, Object>> rowDataList = medicalRecAnswerExcelDTOS.stream().map(MedicalRecAnswerExcelDTO::toExcelMap).collect(Collectors.toList());
|
|
|
|
|
File templateFile = downLoadTemplate(templateResourceId);
|
|
|
|
|
try (ExcelWriter writer = ExcelUtil.getWriter(templateFile)){
|
|
|
|
|
writer.setHeaderAlias(MedicalRecAnswerExcelDTO.WRITE_HEADER_ALIAS);
|
|
|
|
@ -158,6 +194,11 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService {
|
|
|
|
|
}
|
|
|
|
|
return tempFile;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 校验行头
|
|
|
|
|
* @param reader
|
|
|
|
|
*/
|
|
|
|
|
private void assertTitle(ExcelReader reader){
|
|
|
|
|
List<Object> titleList = reader.readRow(0);
|
|
|
|
|
Assert.notEmpty(titleList,"标题行为空");
|
|
|
|
|