diff --git a/src/main/java/com/docus/demo/controller/SyncBasicDataController.java b/src/main/java/com/docus/demo/controller/SyncBasicDataController.java index e006fff..ab42458 100644 --- a/src/main/java/com/docus/demo/controller/SyncBasicDataController.java +++ b/src/main/java/com/docus/demo/controller/SyncBasicDataController.java @@ -19,6 +19,7 @@ import java.util.Objects; @Api(value = "数据同步接口", tags = "数据同步接口") @RestController("/sync") +@Slf4j public class SyncBasicDataController { @Autowired @@ -68,11 +69,16 @@ 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) { - return syncBasicFileService.fileUploadJpg(files,uploadJpgFileParam); + try { + return syncBasicFileService.fileUploadJpg(files, uploadJpgFileParam); + } catch (Exception e) { + log.error("保存失败!异常处理" + e.getMessage(), e); + return CommonResult.failed("保存失败!异常处理" + e.getMessage()); + } } } diff --git a/src/main/java/com/docus/demo/mapper/mysql/BasicMapper.java b/src/main/java/com/docus/demo/mapper/mysql/BasicMapper.java index 379ce39..8e57a8e 100644 --- a/src/main/java/com/docus/demo/mapper/mysql/BasicMapper.java +++ b/src/main/java/com/docus/demo/mapper/mysql/BasicMapper.java @@ -39,6 +39,6 @@ public interface BasicMapper { Tbasic getTbasicPatientId(@Param("admissId")String admissId); - Boolean delTbasicByPatientId(@Param("admissId")String admissId); + Boolean delTbasicByAdmissId(@Param("admissId")String admissId); } 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 56de854..83bc81c 100644 --- a/src/main/java/com/docus/demo/mapper/mysql/ScanAssortMapper.java +++ b/src/main/java/com/docus/demo/mapper/mysql/ScanAssortMapper.java @@ -30,7 +30,7 @@ public interface ScanAssortMapper { int deleteByPid(@Param("pidList") List pidList); - int delScanAssort(@Param("patientId")String patientId); + int delScanAssort(@Param("patientId")String patientId,@Param("source")String source); - ListgetScanAssort(@Param("patientId")String patientId); + ListgetScanAssort(@Param("patientId")String patientId,@Param("source")String source); } diff --git a/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java b/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java index dde62ce..c9fb250 100644 --- a/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java +++ b/src/main/java/com/docus/demo/service/SyncBasicFileImpl.java @@ -12,7 +12,6 @@ import com.docus.demo.utils.SnowflakeIdWorker; import com.docus.demo.vo.BasicVo; import com.github.xiaoymin.knife4j.core.util.StrUtil; -import com.google.gson.Gson; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; @@ -24,10 +23,7 @@ import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.concurrent.*; import java.util.stream.Collectors; @@ -190,117 +186,129 @@ public class SyncBasicFileImpl implements ISyncBasicFileService { @Override public CommonResult fileUploadJpg(MultipartFile[] files, UploadJpgFileParam uploadJpgFileParam) { - try { - if (Objects.isNull(uploadJpgFileParam) || Objects.isNull(uploadJpgFileParam.getUploadFileParams())) { - log.info("文件上传参数为空!"); - return CommonResult.failed("文件上传参数为空!"); + + // 校验上传的数据 + 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; + }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不能为空!"); } - //解析文件上传参数 - List fileUploadJpg = JSONArray.parseArray(uploadJpgFileParam.getUploadFileParams(), FileUploadJpgDto.class); - 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<>(); - ArrayList scanAssorts = new ArrayList<>(); - String patientId = fileUploadJpg.get(0).getPatientId(); - Integer admissTimes= null; - if (fileUploadJpg.get(0).getAdmissTimes()==null){ - admissTimes= 0; - }else { - admissTimes=fileUploadJpg.get(0).getAdmissTimes(); - } - String admissId = fileUploadJpg.get(0).getAdmissId(); - Date disDate = fileUploadJpg.get(0).getDisDate(); //组织基础数据 Tbasic addTbasic = this.getTbasic(fileUploadJpg); - List tbasicSubList = this.getTbasicSubList(fileUploadJpg); tbasics.add(addTbasic); - //查询是否存在更新,不存在新增 - Tbasic tBasic = basicMapper.getTbasicPatientId(admissId); - - if (ObjectUtil.isEmpty(tBasic)) { - if (basicMapper.addBasic(tbasics)) { - basicMapper.insertOrUpdateTbasicSub(tbasicSubList); - log.info("新增PatientId为:" + patientId + "的基础数据成功"); - } else { - log.info("新增PatientId为:" + patientId + "的基础数据失败"); - return CommonResult.failed("新增PatientId为:" + patientId + "的基础数据失败"); - } - } else { - - if (!StringUtils.isBlank(tBasic.getPh())){ - return CommonResult.success("存在盘号,保存成功"); - } - //存在时先删除基础数据图像数据,后新增 - if (basicMapper.delTbasicByPatientId(admissId)) { - //删除tbasic拓展表 - basicMapper.delTbasicSub(tBasic.getPatientId()); - //薪资拓展表 - basicMapper.insertOrUpdateTbasicSub(tbasicSubList); - //删除路径图像 - List scanAssort = scanAssortMapper.getScanAssort(tBasic.getPatientId()); - if (!CollectionUtils.isEmpty(scanAssort)) { - for (ScanAssort list : scanAssort) { - File file = new File(list.getImagePath() + File.separatorChar + list.getScanPage()); - try { - file.delete(); // 删除照片 - } catch (Exception e) { - e.printStackTrace(); - } - } - } - //删除文件数据 - scanAssortMapper.delScanAssort(tBasic.getPatientId()); - if (!basicMapper.addBasic(tbasics)) { - log.info("新增PatientId为:" + patientId + "的基础数据失败"); - return CommonResult.failed("新增PatientId为:" + patientId + "的基础数据失败"); - } else { - log.info("新增PatientId为:" + patientId + "的基础数据成功"); + 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 (ScanAssort list : scanAssort) { + File file = new File(list.getImagePath() + File.separatorChar + list.getScanPage()); + try { + file.delete(); // 删除照片 + } catch (Exception e) { + e.printStackTrace(); } } } - 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 + "集合中中文名不匹配"); - } - } - String filePathdir = createDirectory(patientId, admissTimes, admissId, disDate); - //保存文件 - for (MultipartFile file : files) { - for (FileUploadJpgDto dto : fileUploadJpg) { - //上传原文件名与实际文件名一致 - if (dto.getUploadFileName().equals(file.getOriginalFilename())) { - //记录排序 - final int[] sort = {0}; - ScanAssort tScanAssortDto = addScanAssort(addTbasic.getPatientId(), filePathdir, file, dto, sort); - if (Objects.isNull(tScanAssortDto)) { - log.info("病案主键:" + addTbasic.getPatientId() + "中" + dto.getFileTitle() + "中保存失败"); - } else { - scanAssorts.add(tScanAssortDto); - } + + scanAssortMapper.delScanAssort(oldBasic.getPatientId(), source); + } + // 保存文件和文件数据 + 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 + "保存数据库失败"); + } + if (!scanAssortMapper.addScanAssort(scanAssorts)) { + log.info(patientId + "保存数据库失败"); + return CommonResult.failed(patientId + "保存数据库失败"); + } + log.info("本次传输成功病案主键为:" + patientId); + return CommonResult.success("上传完成"); + } + + private Tbasic getOldTbasic(FileUploadJpgDto fileUploadJpgDto) { + String admissId = fileUploadJpgDto.getAdmissId(); + Tbasic getByAdmissId = basicMapper.getTbasicPatientId(admissId); + if (getByAdmissId != null) { + return getByAdmissId; + } + String jpgDtoInpatientNo = fileUploadJpgDto.getInpatientNo(); + Integer jpgDtoAdmissTimes = fileUploadJpgDto.getAdmissTimes(); + List inpatientNos = Collections.singletonList(jpgDtoInpatientNo); + SyncBasicDataDto dto = new SyncBasicDataDto(); + List oldBasicList = basicMapper.getOldBasicList(inpatientNos, dto); + for (Tbasic tbasic : oldBasicList) { + // 名字,病案号,住院次数 相同 ,人为是一个数据 + if (ObjectUtil.equals(tbasic.getName(), fileUploadJpgDto.getName()) + && tbasic.getInpatientNo().equalsIgnoreCase(jpgDtoInpatientNo) + && ObjectUtil.equals(jpgDtoAdmissTimes, tbasic.getAdmissTimes())) { + return tbasic; } - log.info("本次传输成功病案主键为:" + patientId); - } catch (Exception e) { - log.error("保存失败!异常处理" + e.getMessage(),e); - return CommonResult.failed("保存失败!异常处理" + e); } - return CommonResult.success("完成"); + return null; } private String createDirectory(String patientId, Integer admissTimes, String admissId, Date disDate) { diff --git a/src/main/resources/mapper/mysql/BasicMapper.xml b/src/main/resources/mapper/mysql/BasicMapper.xml index ab759fa..9fd9731 100644 --- a/src/main/resources/mapper/mysql/BasicMapper.xml +++ b/src/main/resources/mapper/mysql/BasicMapper.xml @@ -71,7 +71,7 @@ WHERE patient_id = #{pid} - + delete from docus_medicalrecord.t_basic where admiss_id=#{admissId} @@ -165,7 +165,15 @@ limit #{pageStart} ,#{pageEnd} diff --git a/src/main/resources/mapper/mysql/ScanAssortMapper.xml b/src/main/resources/mapper/mysql/ScanAssortMapper.xml index 300bb12..2b81450 100644 --- a/src/main/resources/mapper/mysql/ScanAssortMapper.xml +++ b/src/main/resources/mapper/mysql/ScanAssortMapper.xml @@ -54,7 +54,7 @@ ) - delete from docus_archivefile.t_scan_assort where patient_id=#{patientId} + delete from docus_archivefile.t_scan_assort where patient_id=#{patientId} and source=#{source} \ No newline at end of file