fix: 市一联众采集上传接口,来源设置为lianzhong,区分删除的文件

jp2demo1.0
wyb 11 months ago
parent 3da5f80397
commit 10ca2a5838

@ -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());
}
}
}

@ -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);
}

@ -30,7 +30,7 @@ public interface ScanAssortMapper {
int deleteByPid(@Param("pidList") List<String> pidList);
int delScanAssort(@Param("patientId")String patientId);
int delScanAssort(@Param("patientId")String patientId,@Param("source")String source);
List<ScanAssort>getScanAssort(@Param("patientId")String patientId);
List<ScanAssort>getScanAssort(@Param("patientId")String patientId,@Param("source")String source);
}

@ -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) {

@ -71,7 +71,7 @@
WHERE patient_id = #{pid}
</update>
<delete id="delTbasicByPatientId">
<delete id="delTbasicByAdmissId">
delete from docus_medicalrecord.t_basic where admiss_id=#{admissId}
</delete>
<delete id="delTbasicSub">
@ -165,7 +165,15 @@
limit #{pageStart} ,#{pageEnd}
</select>
<select id="getTbasicPatientId" resultType="com.docus.demo.entity.Tbasic">
select patient_id,ph from docus_medicalrecord.t_basic where admiss_id=#{admissId}
select patient_id,
ph,
admiss_times,
inpatient_no,
admiss_date,
`name`,
dis_date
from docus_medicalrecord.t_basic
where admiss_id = #{admissId}
</select>

@ -54,7 +54,7 @@
)
</delete>
<delete id="delScanAssort">
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}
</delete>
<select id="getListByPid" resultType="com.docus.demo.entity.ScanAssort">
SELECT id,
@ -90,7 +90,7 @@
</select>
<select id="getScanAssort" resultType="com.docus.demo.entity.ScanAssort">
SELECT * FROM docus_archivefile.t_scan_assort WHERE patient_id=#{patientId}
SELECT * FROM docus_archivefile.t_scan_assort WHERE patient_id=#{patientId} and source=#{source}
</select>
</mapper>
Loading…
Cancel
Save