You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
9.7 KiB
Java
229 lines
9.7 KiB
Java
package com.shibofu.spring.db1.serviceImpl;
|
|
|
|
import com.shibofu.spring.db1.dao.ArchiveDetailDao;
|
|
import com.shibofu.spring.db1.dao.ArchiveMasterDao;
|
|
import com.shibofu.spring.db1.service.PacsPollingService;
|
|
import com.shibofu.spring.db2.dao.PacsDao;
|
|
import com.shibofu.spring.dto.ArchiveDetailDto;
|
|
import com.shibofu.spring.dto.ArchiveMasterDto;
|
|
import com.shibofu.spring.util.*;
|
|
import com.shibofu.spring.vo.ArchiveDetailVo;
|
|
import com.shibofu.spring.vo.ArchiveMasterVo;
|
|
|
|
import com.shibofu.spring.vo.PacsVo;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeansException;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.util.CollectionUtils;
|
|
import org.springframework.util.ObjectUtils;
|
|
|
|
import java.io.File;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* @ClassName PollingServiceImpl
|
|
* @Description pacs轮询实现类
|
|
* @Author linjj
|
|
* @Date 2024/1/18 9:26
|
|
* @Version 1.0
|
|
*/
|
|
@Service
|
|
@Slf4j
|
|
public class PacsPollingServiceImpl implements PacsPollingService {
|
|
@Value("${savePath}")
|
|
private String savePath;
|
|
|
|
@Autowired
|
|
private ArchiveDetailDao archiveDetailDao;
|
|
|
|
private final static Logger logger = LoggerFactory.getLogger(PacsPollingServiceImpl.class);
|
|
@Autowired
|
|
private ArchiveMasterDao archiveMasterDao;
|
|
@Autowired
|
|
private PacsDao pacsDao;
|
|
|
|
@Override
|
|
public void PacsEveryDayPolling() {
|
|
List<ArchiveMasterVo> archiveMasterVos = archiveMasterDao.PollingPacs();
|
|
if (!CollectionUtils.isEmpty(archiveMasterVos)) {
|
|
logger.info("一共:"+archiveMasterVos.size()+"条病历!!!!");
|
|
gather(archiveMasterVos);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Msg pacsAnxu() {
|
|
List<ArchiveMasterVo> archiveMasterVos = archiveMasterDao.PollingPacsAnXu();
|
|
if (CollectionUtils.isEmpty(archiveMasterVos)) {
|
|
return Msg.fail("无需采集数据");
|
|
}
|
|
gather(archiveMasterVos);
|
|
return Msg.success("采集完成");
|
|
}
|
|
|
|
|
|
@Override
|
|
public Msg PacsEveryWeekPolling() {
|
|
List<ArchiveMasterVo> archiveMasterVos = archiveMasterDao.PacsEveryWeekPolling();
|
|
if (CollectionUtils.isEmpty(archiveMasterVos)) {
|
|
return Msg.fail("无需采集数据");
|
|
}
|
|
gather(archiveMasterVos);
|
|
return Msg.success("采集完成");
|
|
}
|
|
|
|
@Override
|
|
public Msg makeUpPacsByMasterId(String masterId) {
|
|
List<ArchiveMasterVo> archiveMasterVos = archiveMasterDao.makeUpPacsByMasterId(masterId);
|
|
if (CollectionUtils.isEmpty(archiveMasterVos)) {
|
|
return Msg.fail("无需采集数据");
|
|
}
|
|
logger.info("一共:"+archiveMasterVos.size()+"条病历!!!!");
|
|
gather(archiveMasterVos);
|
|
return Msg.success("采集完成");
|
|
}
|
|
|
|
@Override
|
|
public Msg makeUpPacsPush() {
|
|
String masterId = archiveMasterDao.selectPacsPush();
|
|
List<ArchiveMasterVo> archiveMasterVos = archiveMasterDao.makeUpPacsByMasterId(masterId);
|
|
if (CollectionUtils.isEmpty(archiveMasterVos)) {
|
|
return Msg.fail("无需采集数据");
|
|
}
|
|
gather(archiveMasterVos);
|
|
archiveMasterDao.updatePacsCompenSate(masterId);
|
|
return Msg.success("采集完成");
|
|
}
|
|
|
|
|
|
private void deleteFliepath(List<ArchiveDetailVo> listPath) {
|
|
for (ArchiveDetailVo list : listPath) {
|
|
archiveDetailDao.delSubAssort(list.getId());
|
|
File file = new File(list.getPdfPath());
|
|
try {
|
|
file.delete(); // 删除照片
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private void gather(List<ArchiveMasterVo> archiveMasterVos) {
|
|
// 创建 JNI 实例
|
|
PacsAutoPrintPDF.INSTANCE.setServerInfo("10.36.116.100", 204);
|
|
for (ArchiveMasterVo list : archiveMasterVos) {
|
|
try {
|
|
ArchiveMasterDto dto = new ArchiveMasterDto();
|
|
BeanUtils.copyProperties(list, dto);
|
|
//根据入院前六小时出院后六小时住院号查询要下载pdf的路径
|
|
List<PacsVo> vo = pacsDao.getVo(dto);
|
|
if (CollectionUtils.isEmpty(vo)) {
|
|
logger.info("该住院号时间内无数据" + list.getInpNo() + "住院次数为:" + list.getVisitId());
|
|
continue;
|
|
}
|
|
logger.info("住院号为:"+list.getInpNo() + "住院次数为:" + list.getVisitId()+"当前记录为:"+vo.size()+"条");
|
|
//插入文件表数据集合
|
|
List<ArchiveDetailDto> ArchiveDetailList = new ArrayList<>();
|
|
//需要同步的数据
|
|
for (PacsVo pacsList : vo) {
|
|
//查询文件是否存在,如果存在先删除后新增
|
|
List<ArchiveDetailVo> subAssort = archiveDetailDao.getSubAssort(pacsList.getAccessionnumber());
|
|
if (subAssort.size() > 0) {
|
|
deleteFliepath(subAssort);
|
|
}
|
|
//使用yyyyMMddHHmmssSSS格式作为文件名
|
|
Date date = new Date();
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
|
|
String newDate = format.format(date);
|
|
//组织路径
|
|
String filePathdir = savePath + File.separatorChar + list.getInpNo() + File.separatorChar + list.getVisitId();
|
|
File file = new File(filePathdir);
|
|
//判断文件夹是否存在不存在创建文件夹
|
|
if (!file.exists()) {
|
|
file.mkdirs();
|
|
}
|
|
String filePath = filePathdir + File.separatorChar + newDate + ".pdf";
|
|
logger.info("-----------------文件id:" + pacsList.getAccessionnumber() + ",路径:" + filePath);
|
|
// 调用 GetPDF 函数
|
|
try {
|
|
boolean result = PacsAutoPrintPDF.INSTANCE.GetPDF(pacsList.getAccessionnumber(), filePath);
|
|
} catch (Throwable e) {
|
|
logger.info(pacsList.getAccessionnumber()+"异常处理");
|
|
continue;
|
|
}
|
|
//成功存在文件表中,不成功输出到日志中
|
|
saveArchiveDetailDto(list, dto, ArchiveDetailList, pacsList, filePath);
|
|
}
|
|
//插入文件表
|
|
boolean b = archiveDetailDao.addArchiveDetail(ArchiveDetailList);
|
|
if (b) {
|
|
ArchiveDetailList.clear();
|
|
logger.info("住院号:" + list.getInpNo() + "住院次数为:" + list.getVisitId() + "采集完成");
|
|
}
|
|
} catch (Exception e) {
|
|
logger.info(list.getId()+"异常处理");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private static void saveArchiveDetailDto(ArchiveMasterVo list, ArchiveMasterDto dto, List<ArchiveDetailDto> ArchiveDetailList, PacsVo pacsList, String filePath) {
|
|
//成功存在文件表中,不成功输出到日志中
|
|
if (new File(filePath).exists()) {
|
|
ArchiveDetailDto archiveDetailDto = new ArchiveDetailDto();
|
|
archiveDetailDto.setMasterId(dto.getId());
|
|
archiveDetailDto.setUploadDateTime(new Date());
|
|
String emrAssort = getEmrAssort(pacsList.getProf());
|
|
archiveDetailDto.setAssortId(emrAssort);
|
|
archiveDetailDto.setSource("pacs");
|
|
archiveDetailDto.setFlag("0");
|
|
archiveDetailDto.setTitle(pacsList.getExamItem());
|
|
archiveDetailDto.setPdfPath(filePath);
|
|
archiveDetailDto.setSubAssort(pacsList.getAccessionnumber());
|
|
ArchiveDetailList.add(archiveDetailDto);
|
|
//记录保存文件表
|
|
} else {
|
|
logger.info("-----------------住院号:" + list.getInpNo() + ",文件名:" + pacsList.getExamItem() + "解析不返回图片");
|
|
}
|
|
}
|
|
|
|
|
|
public static String getEmrAssort(String prof) {
|
|
Map<String, String> map = new HashMap<>();
|
|
map.put("1", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("2", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("3", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("4", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("5", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("6", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("7", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("8", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("9", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("20", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("22", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("23", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("24", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("25", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("26", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("27", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("28", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("29", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("30", "DE599D770E8347CCB5122BC357D96F37");
|
|
map.put("32", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("33", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("34", "DA342ED81CEE4A8EA827424626F3F577");
|
|
map.put("36", "DE599D770E8347CCB5122BC357D96F37");
|
|
map.put("37", "DE599D770E8347CCB5122BC357D96F37");
|
|
map.put("38", "DE599D770E8347CCB5122BC357D96F37");
|
|
map.put("39", "DA342ED81CEE4A8EA827424626F3F577");
|
|
return map.get(prof);
|
|
}
|
|
}
|