From 70ebf659c9aa8db10ae09e31534f6a06a34a82b7 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Sun, 4 Feb 2024 15:43:46 +0800 Subject: [PATCH] =?UTF-8?q?manage:=20=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MedicalRecManageController.java | 2 +- .../manage/pojo/vo/MedicalRecQaVO.java | 3 + .../AskQuestionLibraryManageServiceImpl.java | 28 ++++++-- .../service/impl/FileManageServiceImpl.java | 2 +- .../impl/MedicalRecManageServiceImpl.java | 48 +++++++++++-- .../impl/OfflineAnswerVideoResource.java | 66 ++++++++++-------- .../病历问诊问题导入模板-error.xlsx | Bin 0 -> 12067 bytes .../病历问诊问题导入模板.xlsx | Bin 0 -> 12249 bytes .../template/知识导入模板-error.xlsx | Bin 0 -> 12013 bytes .../template/知识导入模板.xlsx | Bin 0 -> 12168 bytes 10 files changed, 104 insertions(+), 45 deletions(-) create mode 100644 virtual-patient-manage/src/main/resources/template/病历问诊问题导入模板-error.xlsx create mode 100644 virtual-patient-manage/src/main/resources/template/病历问诊问题导入模板.xlsx create mode 100644 virtual-patient-manage/src/main/resources/template/知识导入模板-error.xlsx create mode 100644 virtual-patient-manage/src/main/resources/template/知识导入模板.xlsx diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/medicalrec/MedicalRecManageController.java b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/medicalrec/MedicalRecManageController.java index 2114ba46..ace029f9 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/medicalrec/MedicalRecManageController.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/medicalrec/MedicalRecManageController.java @@ -125,7 +125,7 @@ public class MedicalRecManageController { @ApiOperation("查询病例默认问题") - @PostMapping("/queryMedicalDefaultAnswer") + @GetMapping("/queryMedicalDefaultAnswer") public List queryMedicalDefaultAnswer(@ApiParam("病例id") @RequestParam(value = "medicalRecId",required = false) String medicalRecId) { diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecQaVO.java b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecQaVO.java index afd40552..f04bfa2a 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecQaVO.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecQaVO.java @@ -32,6 +32,9 @@ public class MedicalRecQaVO { @ApiModelProperty("回答的资源id,新增更新时需要") private String answerResourceId; + @ApiModelProperty("回答的资源视频名,新增更新时需要") + private String answerResourceName; + @ApiModelProperty("针对病例的特定回答,新增更新时必填") private String medicalRecAnswer; diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java index a3517b76..fb466a9f 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/AskQuestionLibraryManageServiceImpl.java @@ -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.io.IoUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.ExcelReader; @@ -23,14 +24,18 @@ import com.supervision.vo.manage.AskQuestionLibraryResVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.BufferedOutputStream; import java.io.File; import java.io.InputStream; +import java.net.URLEncoder; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -40,17 +45,16 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryManageService { - @Value("${ask.offline.template.error}") - private String errorTemplateResourceId; - - @Value("${ask.offline.template.empty}") - private String emptyTemplateResourceId; + private final ResourceLoader resourceLoader; private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService; private final CommonDicService commonDicService; private final FileManageService fileManageService; + + private final String ASK_QUESTION_LIBRARY_TEMPLATE_ERROR_EXCEL_PATH = "classpath:template/知识导入模板-error.xlsx"; + private final String ASK_QUESTION_LIBRARY_TEMPLATE_EXCEL_PATH = "classpath:template/知识导入模板.xlsx"; @Override public List queryList(AskQuestionLibraryReqVo askQuestionLibraryReqVo) { @@ -164,7 +168,15 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa @Override public void downloadMedicalAnswerTemplate(HttpServletResponse response) throws Exception { - fileManageService.downloadFile(emptyTemplateResourceId,response); + + Resource resource = resourceLoader.getResource(ASK_QUESTION_LIBRARY_TEMPLATE_EXCEL_PATH); + ServletOutputStream outputStream = response.getOutputStream(); + File file = resource.getFile(); + response.setContentType(FileUtil.getMimeType(file.getPath())); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode(FileUtil.getName(file), "UTF-8")); + + IoUtil.copy(resource.getInputStream(),outputStream); } @@ -195,7 +207,9 @@ public class AskQuestionLibraryManageServiceImpl implements AskQuestionLibraryMa .filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())).collect(Collectors.toList()); List> collect = errorList.stream().map(UploadQuestionLibraryDTO::toExcelMap).collect(Collectors.toList()); - File templateFile = fileManageService.downloadFile(errorTemplateResourceId); + File templateFile = FileUtil.copy( + resourceLoader.getResource(ASK_QUESTION_LIBRARY_TEMPLATE_ERROR_EXCEL_PATH).getFile(), + FileUtil.createTempFile("导入详情",".xlsx",true), true); try (ExcelWriter writer = ExcelUtil.getWriter(templateFile)){ writer.setHeaderAlias(UploadQuestionLibraryDTO.WRITE_HEADER_ALIAS); writer.setOnlyAlias(true); diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/FileManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/FileManageServiceImpl.java index 12540c52..613f5c66 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/FileManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/FileManageServiceImpl.java @@ -84,7 +84,7 @@ public class FileManageServiceImpl implements FileManageService { String contentType = StrUtil.isEmpty(fileResource.getFileType()) ? "application/octet-stream" : fileResource.getFileType(); response.setContentType(contentType); - if (Objects.nonNull(fileResource.getFileName())){ + if (StrUtil.isNotEmpty(fileResource.getFileName())){ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileResource.getFileName(), "UTF-8")); } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java index c6bb12e4..955f8719 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java @@ -2,6 +2,8 @@ package com.supervision.manage.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -20,12 +22,16 @@ import com.supervision.vo.manage.DiseaseTreatmentPlanResVo; import com.supervision.vo.manage.MedicalRecPageResVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.net.URLEncoder; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -34,9 +40,9 @@ import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class MedicalRecManageServiceImpl implements MedicalRecManageService { + private final String MEDICAL_ANSWER_EXCEL_PATH = "classpath:template/病历问诊问题导入模板.xlsx"; - @Value("${answer.offline.template.empty}") - private String emptyTemplateResourceId; + private final ResourceLoader resourceLoader; private final DiseaseService diseaseService; @@ -58,7 +64,7 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { private final AnswerVideoResourceService answerVideoResourceService; - private final FileManageService fileManageService; + private final MaterialLibraryService materialLibraryService; public List queryDiseaseListByDropList() { return diseaseService.lambdaQuery().list(); @@ -241,6 +247,15 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { Set dictIdSet = askTemplateQuestionLibraryList.stream().map(AskTemplateQuestionLibrary::getDictId).collect(Collectors.toSet()); Map dictMap = commonDicService.listByIds(dictIdSet).stream().collect(Collectors.toMap(CommonDic::getId, Function.identity())); + // 获取视频资源名 + Set answerResourceIds = medicalRecQaList.stream().map(MedicalRecQaVO::getAnswerResourceId).filter(StrUtil::isNotEmpty).collect(Collectors.toSet()); + Map videoInfoMaps = new HashMap<>(); + if (CollUtil.isNotEmpty(answerResourceIds)){ + Map videoInfoMapsTmp = materialLibraryService.listByIds(answerResourceIds).stream() + .collect(Collectors.toMap(MaterialLibrary::getId, MaterialLibrary::getMaterialName)); + videoInfoMaps.putAll(videoInfoMapsTmp); + } + for (MedicalRecQaVO medicalRecQaVO : medicalRecQaList) { AskTemplateQuestionLibrary questionLibrary = askQuestionMap.get(medicalRecQaVO.getLibraryQuestionId()); if (ObjectUtil.isNotEmpty(questionLibrary)) { @@ -252,6 +267,8 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { medicalRecQaVO.setDictNamePath(dictMap.getOrDefault(questionLibrary.getDictId(), new CommonDic()).getNameZhPath()); // 默认回答 medicalRecQaVO.setDefaultAnswer(questionLibrary.getDefaultAnswer()); + // 回答视频 + medicalRecQaVO.setAnswerResourceName(videoInfoMaps.get(medicalRecQaVO.getAnswerResourceId())); } } } @@ -287,6 +304,15 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { if (StrUtil.isNotEmpty(medicalRecId)) { List askPatientAnswerList = askPatientAnswerService.lambdaQuery() .eq(AskPatientAnswer::getMedicalId, medicalRecId).eq(AskPatientAnswer::getAnswerType, "0").list(); + + final Map libraryMap = new HashMap<>(); + if (CollUtil.isNotEmpty(askPatientAnswerList)){ + List questionIds = askPatientAnswerList.stream() + .map(AskPatientAnswer::getLibraryQuestionId).filter(Objects::nonNull).collect(Collectors.toList()); + Map libraryMapTemp = askTemplateQuestionLibraryService.listByIds(questionIds) + .stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, Function.identity())); + libraryMap.putAll(libraryMapTemp); + } return askPatientAnswerList.stream().map(e -> { MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO(); medicalRecQaVO.setId(e.getId()); @@ -294,6 +320,10 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { medicalRecQaVO.setDictId(systemDicId); medicalRecQaVO.setDictNamePath(systemDic.getNameZhPath()); medicalRecQaVO.setMedicalRecAnswer(e.getAnswer()); + AskTemplateQuestionLibrary askTemplateQuestionLibrary = libraryMap.get(e.getLibraryQuestionId()); + if (Objects.nonNull(askTemplateQuestionLibrary)){ + medicalRecQaVO.setQuestionList(askTemplateQuestionLibrary.getQuestion()); + } return medicalRecQaVO; }).collect(Collectors.toList()); } @@ -304,12 +334,20 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService { medicalRecQaVO.setDictId(systemDicId); medicalRecQaVO.setDictNamePath(systemDic.getNameZhPath()); medicalRecQaVO.setMedicalRecAnswer(e.getDefaultAnswer()); + medicalRecQaVO.setQuestionList(e.getQuestion()); return medicalRecQaVO; }).collect(Collectors.toList()); } @Override public void downloadMedicalAnswerTemplate(HttpServletResponse response) throws Exception { - fileManageService.downloadFile(emptyTemplateResourceId,response); + Resource resource = resourceLoader.getResource(MEDICAL_ANSWER_EXCEL_PATH); + ServletOutputStream outputStream = response.getOutputStream(); + File file = resource.getFile(); + response.setContentType(FileUtil.getMimeType(file.getPath())); + response.setHeader("Content-Disposition", "attachment;filename=" + + URLEncoder.encode(FileUtil.getName(file), "UTF-8")); + + IoUtil.copy(resource.getInputStream(),outputStream); } } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/OfflineAnswerVideoResource.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/OfflineAnswerVideoResource.java index dc5f8ed2..d11b2bda 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/OfflineAnswerVideoResource.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/OfflineAnswerVideoResource.java @@ -18,7 +18,7 @@ import com.supervision.model.*; import com.supervision.service.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; import java.io.*; @@ -34,8 +34,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor public class OfflineAnswerVideoResource implements AnswerVideoResourceService { - @Value("${answer.offline.template.error}") - private String errorTemplateResourceId; + private final ResourceLoader resourceLoader; private final AskPatientAnswerService askPatientAnswerService; @@ -46,6 +45,8 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { private final FileManageService fileManageService; private final CommonDicService commonDicService; + private final String MEDICAL_ANSWER_ERROR_EXCEL_PATH = "classpath:template/病历问诊问题导入模板-error.xlsx"; + @Override public MedicalAnswerVideoResVo preGenerationMedicalAnswerVideo(InputStream inputStream, String medicalId) throws Exception { @@ -74,7 +75,6 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { FileUtil.del(file); } - return wrapperMedicalAnswerVideoResVo(medicalRecAnswerExcelDTOS,fileResource.getId()); } @@ -100,6 +100,32 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { questionLibraryList,askPatientAnswerList,materialLibraryList,questionTypeDicList)); } + public void updateAskPatientAnswer(List medicalRecAnswerExcelDTOS,String medicalId){ + + if (CollUtil.isEmpty(medicalRecAnswerExcelDTOS)){ + return; + } + for (MedicalRecAnswerExcelDTO dto : medicalRecAnswerExcelDTOS) { + if (CollUtil.isNotEmpty(dto.getErrorCodeEnums())){ + // 校验不通过,不进行入库处理 + continue; + } + String askPatientAnswerId = dto.getAskPatientAnswerId(); + if (StrUtil.isNotEmpty(askPatientAnswerId)){ + //更新操作 + AskPatientAnswer askPatientAnswer = dto.toAskPatientAnswer(); + askPatientAnswerService.lambdaUpdate().eq(AskPatientAnswer::getId,askPatientAnswerId) + .set(AskPatientAnswer::getAnswerResourceId,askPatientAnswer.getAnswerResourceId()) + .update(); + }else { + //新增操作 + AskPatientAnswer askPatientAnswer = dto.toAskPatientAnswer(); + askPatientAnswer.setMedicalId(medicalId); + askPatientAnswerService.save(askPatientAnswer); + } + } + } + /** * 组装返回消息 * @param medicalRecAnswerExcelDTOS 数据 @@ -121,8 +147,10 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { if (StrUtil.isNotEmpty(dto.getAnswerResourceId())) { medicalRecQaVO.setDictId(Long.parseLong(dto.getDictId())); } + medicalRecQaVO.setQuestionList(CollUtil.newArrayList(dto.getQuestion())); medicalRecQaVO.setDictNamePath(dto.getDictNamePath()); medicalRecQaVO.setAnswerResourceId(dto.getAnswerResourceId()); + medicalRecQaVO.setAnswerResourceName(dto.getAnswerVideoName()); medicalRecQaVO.setMedicalRecAnswer(dto.getAnswer()); return medicalRecQaVO; }).collect(Collectors.toList()); @@ -132,39 +160,15 @@ public class OfflineAnswerVideoResource implements AnswerVideoResourceService { } - public void updateAskPatientAnswer(List medicalRecAnswerExcelDTOS,String medicalId){ - - if (CollUtil.isEmpty(medicalRecAnswerExcelDTOS)){ - return; - } - for (MedicalRecAnswerExcelDTO dto : medicalRecAnswerExcelDTOS) { - if (CollUtil.isNotEmpty(dto.getErrorCodeEnums())){ - // 校验不通过,不进行入库处理 - continue; - } - String askPatientAnswerId = dto.getAskPatientAnswerId(); - if (StrUtil.isNotEmpty(askPatientAnswerId)){ - //更新操作 - AskPatientAnswer askPatientAnswer = dto.toAskPatientAnswer(); - askPatientAnswerService.lambdaUpdate().eq(AskPatientAnswer::getId,askPatientAnswerId) - .set(AskPatientAnswer::getAnswerResourceId,askPatientAnswer.getAnswerResourceId()) - .update(); - }else { - //新增操作 - AskPatientAnswer askPatientAnswer = dto.toAskPatientAnswer(); - askPatientAnswer.setMedicalId(medicalId); - askPatientAnswerService.save(askPatientAnswer); - } - } - } - public File writeExcel(List medicalRecAnswerExcelDTOS) throws Exception { List> errorList = medicalRecAnswerExcelDTOS.stream() .filter(dto -> CollUtil.isNotEmpty(dto.getErrorCodeEnums())) .map(MedicalRecAnswerExcelDTO::toExcelMap).collect(Collectors.toList()); - File templateFile = fileManageService.downloadFile(errorTemplateResourceId); + File templateFile = FileUtil.copy( + resourceLoader.getResource(MEDICAL_ANSWER_ERROR_EXCEL_PATH).getFile(), + FileUtil.createTempFile("导入详情",".xlsx",true), true); try (ExcelWriter writer = ExcelUtil.getWriter(templateFile)){ writer.setHeaderAlias(MedicalRecAnswerExcelDTO.WRITE_HEADER_ALIAS); writer.setOnlyAlias(true); diff --git a/virtual-patient-manage/src/main/resources/template/病历问诊问题导入模板-error.xlsx b/virtual-patient-manage/src/main/resources/template/病历问诊问题导入模板-error.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f231d27825465a19ae77fa5170a9e79523ebbc31 GIT binary patch literal 12067 zcmaJ{1z225vc}!r-Q6JscXtUI++lDA53a!>fk3d}7J}R0?m>gQ26qVXAbGpFH+y&c z`#5u$De11RQ`L3qSCNN=LI8UnVM=Qv&!7Jq@J}~p08%go|Rehuqz4$%04#ECgpRPXHZ`fw9;2A2s)ORHW9s--DNbdrL{Gncp5deQRg zV@wPkJe?xFtu0xB9-J%7^F2t>c{`en&oz`S|}oQ<>9 z-Svl%s@0dmklz*!WDbH>m`8L~tOVh2c?^Z}HgsWj2wdjmD)QQA7rMWW?ax7>`!&6fx)*nncv`tXFLy<3v8!SIV z9Q3eOzpKrAcjIsZ{deoK?iXLHK3P})$-3x&wXP|^+5FkOAqnkroosl$M}bFAyOZed zB4hPZ1)qcnPK#zq?9`sI)>FFNGllGf7t;<$yPwPoQ`1(R;a@L!UNJ{tlK@O zvfb~o4s)HkcuVKXDWA=hgU71MNmxQn)atl0q(}Vyb$pqFlDownkSN0;#it|Ikk)=V zf29oWGzZQR%o=|?&Zxt9Xbo)*&UC=qu=~R)F>sw;A)vr!w|IF&ua|#ziVcMK(%h~S zp0U$>sKW$ZGD-V`B$}3FYM1~;v@m8$))6p}h2Rm(1UGv=?Bz^V2I1hgpH-d7?W(ks z2zfThyI47etF850)yQxGvu*!5z(79P7HIb~wEQyx$}a*BfU~WOmASd=pJC|8 zXp-U!G#HrQ(=Ort2klQ5_UGNId9@gm%Y)ZaG3oKS-iDP2s;@Oc2l`8H%w(C?{J~`! z`3MwpJ63xC5aT(t*LVr2?XppM@=))5mZmEvW8D1{gWQ|WcW1u6LZn7p6{H@}o>^{* zRnDu>Eg)&D)JiwQCFbT#A^p}g;HOpV1|>wTuOU|wghv-sGp~nHOF@9zBxi`wFFHWI zk&@IS-ft;~U-Nqzbk~MLr<#)1KZDLb6zA{iK3HpC8@CFddRQBJMH*}Q!^6(ooko|x zs$CvWU`$BEp_jfN=BY@doL|3bx)BLV7qe8Aq zQ|Z1a+vS~(L`?f!-o-u03wjM<&Ebquw4rj>*j_{r$(Fhm*2TKshf5@HL;H;d+wo TKUz9 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 literal 0 HcmV?d00001 diff --git a/virtual-patient-manage/src/main/resources/template/病历问诊问题导入模板.xlsx b/virtual-patient-manage/src/main/resources/template/病历问诊问题导入模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..83edd079abd77c2a2672b3ec7c217719554b91af GIT binary patch literal 12249 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 G_5L3tk|Qtx literal 0 HcmV?d00001 diff --git a/virtual-patient-manage/src/main/resources/template/知识导入模板-error.xlsx b/virtual-patient-manage/src/main/resources/template/知识导入模板-error.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ac61e1eef194cbb94dcc287a8823fa2d2041832c GIT binary patch literal 12013 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