From c7fefe0ce0891f05f48073aad821ccf01f1ec4c6 Mon Sep 17 00:00:00 2001 From: wyb <1977763549@qq.com> Date: Fri, 13 Dec 2024 17:08:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B7=BB=E5=8A=A0=E5=88=86=E6=89=B9?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=9F=BA=E7=A1=80?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=AF=94=E8=BE=83=EF=BC=8C=E4=BD=8F=E9=99=A2?= =?UTF-8?q?=E6=AC=A1=E6=95=B0=E4=B8=BA=E7=A9=BA=E9=83=BD=E6=94=B9=E4=B8=BA?= =?UTF-8?q?0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SyncBasicDataController.java | 21 ++- .../demo/facade/ISyncBasicFileService.java | 3 +- .../demo/mapper/mysql/ScanAssortMapper.java | 5 +- .../docus/demo/service/SyncBasicDataImpl.java | 3 + .../docus/demo/service/SyncBasicFileImpl.java | 130 ++++++++++++++++-- .../mapper/mysql/ScanAssortMapper.xml | 3 + 6 files changed, 152 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/docus/demo/controller/SyncBasicDataController.java b/src/main/java/com/docus/demo/controller/SyncBasicDataController.java index 5da4e42..4bc8e2e 100644 --- a/src/main/java/com/docus/demo/controller/SyncBasicDataController.java +++ b/src/main/java/com/docus/demo/controller/SyncBasicDataController.java @@ -99,7 +99,7 @@ public class SyncBasicDataController { * @author linjj * @date: 2024/6/28 10:38 */ - @ApiOperation("联众同步文件上传") + @ApiOperation("联众同步文件上传,删除旧的所有联众,新的增加") @PostMapping(value = "fileUploadJpg") @ResponseBody public CommonResult fileUploadJpg(@RequestPart("files") MultipartFile[] files, UploadJpgFileParam uploadJpgFileParam) { @@ -111,4 +111,23 @@ public class SyncBasicDataController { } } + + /** + * @description: 文件上传 + * @params: files + * @params: uploadBatchFileParam + * @author linjj + * @date: 2024/6/28 10:38 + */ + @ApiOperation("联众同步文件上传,相同名字的删除,不同的添加,用于个别单次无法上传完毕的") + @PostMapping(value = "batchFileUploadJpg") + @ResponseBody + public CommonResult batchFileUploadJpg(@RequestPart("files") MultipartFile[] files, UploadJpgFileParam uploadJpgFileParam) { + try { + return syncBasicFileService.batchFileUploadJpg(files, uploadJpgFileParam); + } catch (Exception e) { + log.error("保存失败!异常处理" + e.getMessage(), e); + return CommonResult.failed("保存失败!异常处理" + e.getMessage()); + } + } } diff --git a/src/main/java/com/docus/demo/facade/ISyncBasicFileService.java b/src/main/java/com/docus/demo/facade/ISyncBasicFileService.java index 853bfca..1878bcc 100644 --- a/src/main/java/com/docus/demo/facade/ISyncBasicFileService.java +++ b/src/main/java/com/docus/demo/facade/ISyncBasicFileService.java @@ -4,7 +4,6 @@ import com.docus.demo.dto.SyncBasicDataDto; import com.docus.demo.dto.SyncFileDto; import com.docus.demo.dto.UploadJpgFileParam; import com.docus.demo.entity.CommonResult; -import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.multipart.MultipartFile; public interface ISyncBasicFileService { @@ -21,4 +20,6 @@ public interface ISyncBasicFileService { CommonResultfileUploadJpg(MultipartFile[] files, UploadJpgFileParam uploadJpgFileParam); + + CommonResult batchFileUploadJpg(MultipartFile[] files, UploadJpgFileParam uploadJpgFileParam); } diff --git a/src/main/java/com/docus/demo/mapper/mysql/ScanAssortMapper.java b/src/main/java/com/docus/demo/mapper/mysql/ScanAssortMapper.java index 8eb7309..e345976 100644 --- a/src/main/java/com/docus/demo/mapper/mysql/ScanAssortMapper.java +++ b/src/main/java/com/docus/demo/mapper/mysql/ScanAssortMapper.java @@ -1,10 +1,7 @@ package com.docus.demo.mapper.mysql; -import com.baomidou.dynamic.datasource.annotation.DS; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.docus.demo.entity.ScanAssort; -import com.docus.demo.entity.ZdAssort; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -35,4 +32,6 @@ public interface ScanAssortMapper { ListgetScanAssort(@Param("patientId")String patientId,@Param("source")String source); int updatePatientId(@Param("oldPatId") String oldBasicPatientId, @Param("newPatId") String newPatientId); + + int delScanAssortById(@Param("id") Long id); } diff --git a/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java b/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java index 629c60c..4326a97 100644 --- a/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java +++ b/src/main/java/com/docus/demo/service/SyncBasicDataImpl.java @@ -276,6 +276,9 @@ public class SyncBasicDataImpl implements ISyncBasicDataService { if(StrUtil.isNotBlank(e.getPatNo())){ e.setPatNo(e.getPatNo().toLowerCase(Locale.ROOT)); } + if (e.getPatNum()==null) { + e.setPatNum(0); + } } List fprnList = cardInfoList.stream().map(CardInfo::getPatNo).collect(Collectors.toList()); //数据map转换 diff --git a/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java b/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java index 4d268d8..ac71085 100644 --- a/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java +++ b/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java @@ -198,11 +198,12 @@ public class SyncBasicFileImpl implements ISyncBasicFileService { //解析文件上传参数 List fileUploadJpg = JSONArray.parseArray(uploadJpgFileParam.getUploadFileParams(), FileUploadJpgDto.class); String patientId = fileUploadJpg.get(0).getPatientId(); - Integer admissTimes= null; - if (fileUploadJpg.get(0).getAdmissTimes()==null){ - admissTimes= 0; - }else { - admissTimes=fileUploadJpg.get(0).getAdmissTimes(); + Integer admissTimes = null; + if (fileUploadJpg.get(0).getAdmissTimes() == null) { + admissTimes = 0; + fileUploadJpg.get(0).setAdmissTimes(0); + } else { + admissTimes = fileUploadJpg.get(0).getAdmissTimes(); } String admissId = fileUploadJpg.get(0).getAdmissId(); Date disDate = fileUploadJpg.get(0).getDisDate(); @@ -293,6 +294,119 @@ public class SyncBasicFileImpl implements ISyncBasicFileService { return CommonResult.success("上传完成"); } + @Override + public CommonResult batchFileUploadJpg(MultipartFile[] files, UploadJpgFileParam uploadJpgFileParam) { + + // 校验上传的数据 + if (Objects.isNull(uploadJpgFileParam) || Objects.isNull(uploadJpgFileParam.getUploadFileParams())) { + log.info("文件上传参数为空!"); + return CommonResult.failed("文件上传参数为空!"); + } + //解析文件上传参数 + List fileUploadJpg = JSONArray.parseArray(uploadJpgFileParam.getUploadFileParams(), FileUploadJpgDto.class); + String patientId = fileUploadJpg.get(0).getPatientId(); + Integer admissTimes = null; + if (fileUploadJpg.get(0).getAdmissTimes() == null) { + admissTimes = 0; + fileUploadJpg.get(0).setAdmissTimes(0); + } else { + admissTimes = fileUploadJpg.get(0).getAdmissTimes(); + } + String admissId = fileUploadJpg.get(0).getAdmissId(); + Date disDate = fileUploadJpg.get(0).getDisDate(); + + for (FileUploadJpgDto dto : fileUploadJpg) { + if (StrUtil.isBlank(dto.getPatientId())) { + log.info("PatientId为空"); + return CommonResult.failed("PatientId不能为空!"); + } + } + if (fileUploadJpg.size() != files.length) { + log.info(patientId + "文件上传数量与参数不一致!"); + return CommonResult.failed("文件上传数量与参数不一致"); + } + // 参数不含上传的,不匹配 + List originalFileNames = fileUploadJpg.stream().map(item -> String.valueOf(item.getUploadFileName())).collect(Collectors.toList()); + for (MultipartFile file : files) { + if (!originalFileNames.contains(file.getOriginalFilename())) { + log.info("文件名:" + file.getOriginalFilename() + "与病案号:" + patientId + "集合中文件名不匹配"); + return CommonResult.failed("文件名:" + file.getOriginalFilename() + "与病案号:" + patientId + "集合中中文名不匹配"); + } + } + final String source = "lianzhong"; + List tbasicSubList = this.getTbasicSubList(fileUploadJpg); + + //查询是否存在更新,不存在新增 + Tbasic oldBasic = getOldTbasic(fileUploadJpg.get(0)); + Tbasic tbasic = oldBasic; + if (oldBasic == null) { + ArrayList tbasics = new ArrayList<>(); + //组织基础数据 + Tbasic addTbasic = this.getTbasic(fileUploadJpg); + tbasics.add(addTbasic); + basicDeptService.handleDept(tbasics); + tbasic = addTbasic; + basicMapper.addBasic(tbasics); + log.info("批次新增PatientId为:" + patientId + "的基础数据成功"); + } else { + //删除tbasic拓展表 + basicMapper.delTbasicSub(oldBasic.getPatientId()); + } + for (TbasicSub sub : tbasicSubList) { + sub.setPatientId(tbasic.getPatientId()); + } + basicMapper.insertOrUpdateTbasicSub(tbasicSubList); + + // 删除旧的存在的同名的联众文件数据、图像 + if (oldBasic != null) { + List scanAssort = scanAssortMapper.getScanAssort(oldBasic.getPatientId(), source); + if (!CollectionUtils.isEmpty(scanAssort)) { + for (MultipartFile file : files) { + String originalFilename = file.getOriginalFilename(); + for (ScanAssort assort : scanAssort) { + if (originalFilename.equals(assort.getScanPage())) { + File oldFile = new File(assort.getImagePath() + File.separatorChar + assort.getScanPage()); + try { + oldFile.delete(); // 删除照片 + int i = scanAssortMapper.delScanAssortById(assort.getId()); + break; + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + } + + // 保存文件和文件数据 + String filePathdir = createDirectory(patientId, admissTimes, admissId, disDate); + //保存文件 + ArrayList scanAssorts = new ArrayList<>(); + for (MultipartFile file : files) { + for (FileUploadJpgDto dto : fileUploadJpg) { + //上传原文件名与实际文件名一致 + if (dto.getUploadFileName().equals(file.getOriginalFilename())) { + //记录排序 + final int[] sort = {0}; + ScanAssort tScanAssortDto = addScanAssort(tbasic.getPatientId(), filePathdir, file, dto, sort); + if (Objects.isNull(tScanAssortDto)) { + log.info("批次病案主键:" + tbasic.getPatientId() + "中" + dto.getFileTitle() + "中保存失败"); + } else { + tScanAssortDto.setSource(source); + scanAssorts.add(tScanAssortDto); + } + } + } + } + if (!scanAssortMapper.addScanAssort(scanAssorts)) { + log.info(patientId + "保存数据库失败"); + return CommonResult.failed(patientId + "保存数据库失败"); + } + log.info("本次批次传输成功病案主键为:" + patientId); + return CommonResult.success("上传完成"); + } + private Tbasic getOldTbasic(FileUploadJpgDto fileUploadJpgDto) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // String admissId = fileUploadJpgDto.getAdmissId(); @@ -328,7 +442,7 @@ public class SyncBasicFileImpl implements ISyncBasicFileService { String month = parts[1]; String day = parts[2]; //文件保存目录 - String filePathdir = savePath + File.separatorChar + year + File.separatorChar + month + File.separatorChar + day+File.separatorChar+ admissId +"_"+ admissTimes +File.separatorChar+ patientId; + String filePathdir = savePath + File.separatorChar + year + File.separatorChar + month + File.separatorChar + day + File.separatorChar + admissId + "_" + admissTimes + File.separatorChar + patientId; File filePath = new File(filePathdir); //判断文件夹是否存在不存在创建文件夹 if (!filePath.exists()) { @@ -339,7 +453,7 @@ public class SyncBasicFileImpl implements ISyncBasicFileService { private List getTbasicSubList(List tbasicList) { - return tbasicList.stream().map(m->{ + return tbasicList.stream().map(m -> { TbasicSub tbasicSub = new TbasicSub(); tbasicSub.setBirthday(m.getBirthday()); tbasicSub.setPatientId(m.getPatientId()); @@ -379,7 +493,7 @@ public class SyncBasicFileImpl implements ISyncBasicFileService { Tbasic addTbasic = new Tbasic(); addTbasic.setPatientId(String.valueOf(SnowflakeIdWorker.idWorker.nextId())); addTbasic.setAdmissTimes(fileUploadJpgDto.getAdmissTimes()); - if(addTbasic.getAdmissTimes()==null){ + if (addTbasic.getAdmissTimes() == null) { addTbasic.setAdmissTimes(0); } addTbasic.setInpatientNo(fileUploadJpgDto.getInpatientNo()); diff --git a/src/main/resources/mapper/mysql/ScanAssortMapper.xml b/src/main/resources/mapper/mysql/ScanAssortMapper.xml index 931bb75..7c33b4b 100644 --- a/src/main/resources/mapper/mysql/ScanAssortMapper.xml +++ b/src/main/resources/mapper/mysql/ScanAssortMapper.xml @@ -59,6 +59,9 @@ delete from docus_archivefile.t_scan_assort where patient_id=#{patientId} and source=#{source} + + delete from docus_archivefile.t_scan_assort where id=#{id}; +