|
|
|
@ -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<FileUploadJpgDto> 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<FileUploadJpgDto> 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<String> 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<TbasicSub> tbasicSubList = this.getTbasicSubList(fileUploadJpg);
|
|
|
|
|
|
|
|
|
|
//查询是否存在更新,不存在新增
|
|
|
|
|
Tbasic oldBasic = getOldTbasic(fileUploadJpg.get(0));
|
|
|
|
|
Tbasic tbasic = oldBasic;
|
|
|
|
|
if (oldBasic == null) {
|
|
|
|
|
ArrayList<Tbasic> tbasics = new ArrayList<>();
|
|
|
|
|
ArrayList<ScanAssort> 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<TbasicSub> 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> 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> 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<String> 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<ScanAssort> 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<String> inpatientNos = Collections.singletonList(jpgDtoInpatientNo);
|
|
|
|
|
SyncBasicDataDto dto = new SyncBasicDataDto();
|
|
|
|
|
List<Tbasic> 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) {
|
|
|
|
|