修改采集保存路径

master
linjj 1 year ago
parent 06362c4b26
commit 01b36302ab

@ -25,4 +25,8 @@ public interface ArchiveMasterDao {
List<ArchiveMasterVo> makeUpPacsByMasterId(String masterId);
int updatePacsCompenSate(String masterId);
String selectPacsPush();
}

@ -35,6 +35,16 @@ public interface PacsPollingService {
* @date: 2024/1/18 9:29
*/
Msg PacsEveryWeekPolling() ;
/**
* @description: pacs
* @author linjj
* @date: 2024/4/29 10:36
*/
Msg makeUpPacsByMasterId(String masterId);
/**
* @description: pacs
* @author linjj
* @date: 2024/4/29 10:36
*/
Msg makeUpPacsPush();
}

@ -15,6 +15,7 @@ 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;
@ -56,71 +57,7 @@ public class PacsPollingServiceImpl implements PacsPollingService {
if (CollectionUtils.isEmpty(archiveMasterVos)) {
return Msg.fail("无需采集数据");
}
// 创建 JNI 实例
PacsAutoPrintPDF.INSTANCE.setServerInfo("10.36.116.100", 204);
for (ArchiveMasterVo list : archiveMasterVos) {
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;
}
//插入文件表数据集合
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);
//判断文件夹是否存在不存在创建文件夹
logger.info("创建文件的路径:" + file.getAbsolutePath());
if (!file.exists()) {
logger.info("尝试创建文件:" + file.getAbsolutePath());
file.mkdirs();
}
String filePath = filePathdir + File.separatorChar + newDate + ".pdf";
logger.info("-----------------文件id:" + pacsList.getAccessionnumber() + ",路径:" + filePath);
// 调用 GetPDF 函数
boolean result = PacsAutoPrintPDF.INSTANCE.GetPDF(pacsList.getAccessionnumber(), filePath);
//成功存在文件表中,不成功输出到日志中
if (result) {
if (new File(filePath).exists()) {
ArchiveDetailDto archiveDetailDto = new ArchiveDetailDto();
archiveDetailDto.setMasterId(dto.getId());
archiveDetailDto.setUploadDateTime(new Date());
archiveDetailDto.setAssortId("EABEEB5D628449A7930F4C0A9953A754");
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() + "解析不返回图片");
}
} else {
logger.info("-----------------住院号:" + list.getInpNo() + ",文件名:" + pacsList.getExamItem() + "解析失败");
}
}
//插入文件表
boolean b = archiveDetailDao.addArchiveDetail(ArchiveDetailList);
if (b) {
ArchiveDetailList.clear();
logger.info("住院号:" + list.getInpNo() + "住院次数为:" + list.getVisitId() + "采集完成");
}
}
gather(archiveMasterVos);
return Msg.success("采集完成");
}
@ -130,145 +67,18 @@ public class PacsPollingServiceImpl implements PacsPollingService {
if (CollectionUtils.isEmpty(archiveMasterVos)) {
return Msg.fail("无需采集数据");
}
// 创建 JNI 实例
PacsAutoPrintPDF.INSTANCE.setServerInfo("10.36.116.100", 204);
for (ArchiveMasterVo list : archiveMasterVos) {
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;
}
//插入文件表数据集合
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);
//判断文件夹是否存在不存在创建文件夹
logger.info("创建文件的路径:" + file.getAbsolutePath());
if (!file.exists()) {
logger.info("尝试创建文件:" + file.getAbsolutePath());
file.mkdirs();
}
String filePath = filePathdir + File.separatorChar + newDate + ".pdf";
logger.info("-----------------文件id:" + pacsList.getAccessionnumber() + ",路径:" + filePath);
// 调用 GetPDF 函数
boolean result = PacsAutoPrintPDF.INSTANCE.GetPDF(pacsList.getAccessionnumber(), filePath);
//成功存在文件表中,不成功输出到日志中
if (result) {
if (new File(filePath).exists()) {
ArchiveDetailDto archiveDetailDto = new ArchiveDetailDto();
archiveDetailDto.setMasterId(dto.getId());
archiveDetailDto.setUploadDateTime(new Date());
archiveDetailDto.setAssortId("EABEEB5D628449A7930F4C0A9953A754");
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() + "解析不返回图片");
}
} else {
logger.info("-----------------住院号:" + list.getInpNo() + ",文件名:" + pacsList.getExamItem() + "解析失败");
}
}
//插入文件表
boolean b = archiveDetailDao.addArchiveDetail(ArchiveDetailList);
if (b) {
ArchiveDetailList.clear();
logger.info("住院号:" + list.getInpNo() + "住院次数为:" + list.getVisitId() + "采集完成");
}
}
gather(archiveMasterVos);
return Msg.success("采集完成");
}
@Override
public Msg PacsEveryWeekPolling() {
List<ArchiveMasterVo> archiveMasterVos = archiveMasterDao.PacsEveryWeekPolling();
if (CollectionUtils.isEmpty(archiveMasterVos)) {
return Msg.fail("无需采集数据");
}
// 创建 JNI 实例
PacsAutoPrintPDF.INSTANCE.setServerInfo("10.36.116.100", 204);
for (ArchiveMasterVo list : archiveMasterVos) {
logger.info(list.getVisitId());
ArchiveMasterDto dto = new ArchiveMasterDto();
BeanUtils.copyProperties(list, dto);
logger.info("该住院号时间内无数据" + dto.getInpNo() + "住院次数为:" + dto.getVisitId());
//根据入院前六小时出院后六小时住院号查询要下载pdf的路径
List<PacsVo> vo = pacsDao.getVo(dto);
if (CollectionUtils.isEmpty(vo)) {
logger.info("该住院号时间内无数据" + list.getInpNo() + "住院次数为:" + list.getVisitId());
continue;
}
//插入文件表数据集合
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 函数
boolean result = PacsAutoPrintPDF.INSTANCE.GetPDF(pacsList.getAccessionnumber(), filePath);
//成功存在文件表中,不成功输出到日志中
if (result) {
if (new File(filePath).exists()) {
ArchiveDetailDto archiveDetailDto = new ArchiveDetailDto();
archiveDetailDto.setMasterId(dto.getId());
archiveDetailDto.setUploadDateTime(new Date());
archiveDetailDto.setAssortId("EABEEB5D628449A7930F4C0A9953A754");
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() + "解析不返回图片");
}
} else {
logger.info("-----------------住院号:" + list.getInpNo() + ",文件名:" + pacsList.getExamItem() + "解析失败");
}
}
//插入文件表
boolean b = archiveDetailDao.addArchiveDetail(ArchiveDetailList);
if (b) {
ArchiveDetailList.clear();
logger.info("住院号:" + list.getInpNo() + "住院次数为:" + list.getVisitId() + "采集完成");
}
}
gather(archiveMasterVos);
return Msg.success("采集完成");
}
@ -278,76 +88,23 @@ public class PacsPollingServiceImpl implements PacsPollingService {
if (CollectionUtils.isEmpty(archiveMasterVos)) {
return Msg.fail("无需采集数据");
}
// 创建 JNI 实例
PacsAutoPrintPDF.INSTANCE.setServerInfo("10.36.116.100", 204);
for (ArchiveMasterVo list : archiveMasterVos) {
logger.info("本次需要采集病历数量:" + list.getVisitId());
ArchiveMasterDto dto = new ArchiveMasterDto();
BeanUtils.copyProperties(list, dto);
logger.info("该住院号时间内无数据" + dto.getInpNo() + "住院次数为:" + dto.getVisitId());
//根据入院前六小时出院后六小时住院号查询要下载pdf的路径
List<PacsVo> vo = pacsDao.getVo(dto);
if (CollectionUtils.isEmpty(vo)) {
logger.info("该住院号时间内无数据" + list.getInpNo() + "住院次数为:" + list.getVisitId());
continue;
}
//插入文件表数据集合
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);
//判断文件夹是否存在不存在创建文件夹
logger.info("创建文件的路径:" + file.getAbsolutePath());
if (!file.exists()) {
logger.info("尝试创建文件:" + file.getAbsolutePath());
file.mkdirs();
}
String filePath = filePathdir + File.separatorChar + newDate + ".pdf";
logger.info("-----------------文件id:" + pacsList.getAccessionnumber() + ",路径:" + filePath);
// 调用 GetPDF 函数
boolean result = PacsAutoPrintPDF.INSTANCE.GetPDF(pacsList.getAccessionnumber(), filePath);
//成功存在文件表中,不成功输出到日志中
if (result) {
if (new File(filePath).exists()) {
ArchiveDetailDto archiveDetailDto = new ArchiveDetailDto();
archiveDetailDto.setMasterId(dto.getId());
archiveDetailDto.setUploadDateTime(new Date());
archiveDetailDto.setAssortId("EABEEB5D628449A7930F4C0A9953A754");
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() + "解析不返回图片");
}
} else {
logger.info("-----------------住院号:" + list.getInpNo() + ",文件名:" + pacsList.getExamItem() + "解析失败");
}
}
//插入文件表
boolean b = archiveDetailDao.addArchiveDetail(ArchiveDetailList);
if (b) {
ArchiveDetailList.clear();
logger.info("住院号:" + list.getInpNo() + "住院次数为:" + list.getVisitId() + "采集完成");
}
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());
@ -359,4 +116,82 @@ public class PacsPollingServiceImpl implements PacsPollingService {
}
}
}
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;
}
//插入文件表数据集合
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());
archiveDetailDto.setAssortId("EABEEB5D628449A7930F4C0A9953A754");
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() + "解析不返回图片");
}
}
}

@ -0,0 +1,29 @@
package com.shibofu.spring.quartz;
import com.shibofu.spring.db1.dao.ArchiveMasterDao;
import com.shibofu.spring.db1.service.PacsPollingService;
import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import javax.annotation.Resource;
/**
* @description: pacs
* @author linjj
* @date: 2024/41/29 9:22
*/
public class PacsPushQuartz extends QuartzJobBean {
@Resource
private PacsPollingService pacsPollingService;
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext) {
//查询1条需要采集的记录
pacsPollingService.makeUpPacsPush();
}
}

@ -18,6 +18,9 @@ public class QuartzConfig {
@Value("${quartzTime}")
private String quartzTime;
@Value("${pacsQuartzTime}")
private String pacsQuartzTime;
@Bean
public JobDetail teatQuartzDetail() {
@ -25,6 +28,13 @@ public class QuartzConfig {
}
@Bean
public JobDetail pacsPush() {
return JobBuilder.newJob(PacsPushQuartz.class).withIdentity("PacsPushQuartz").storeDurably().build();
}
@Bean
public Trigger testQuartzTrigger() {
@ -37,4 +47,17 @@ public class QuartzConfig {
}
@Bean
public Trigger pacsPushTrigger() {
return TriggerBuilder.newTrigger().forJob(pacsPush())
.withIdentity("PacsPushQuartz")
.withSchedule(CronScheduleBuilder.cronSchedule(pacsQuartzTime))
.build();
}
}

@ -1,9 +1,9 @@
server.port=3391
#spring.datasource.hikari.db1.jdbc-url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=gm_record
#spring.datasource.hikari.db1.jdbc-url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=yd_record
#spring.datasource.hikari.db1.username=sa
#spring.datasource.hikari.db1.password=admin123
#spring.datasource.hikari.db1.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
#spring.datasource.hikari.db2.jdbc-url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=gm_record
#spring.datasource.hikari.db2.jdbc-url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=yd_record
#spring.datasource.hikari.db2.username=sa
#spring.datasource.hikari.db2.password=admin123
#spring.datasource.hikari.db2.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

@ -2,4 +2,6 @@
savePath: F:\jiashi\reload
#定时补偿任务时间
quartzTime: 0 0 1 * * ?
#定时轮速pacs任务表时间
pacsQuartzTime: 0 */1 * * * ?
#quartzTime: "0 10 16 * * ?

@ -3,6 +3,9 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shibofu.spring.db1.dao.ArchiveMasterDao">
<update id="updatePacsCompenSate">
update pacs_compensate set compensateState=1 where masterId=#{masterId}
</update>
<select id="PollingPacs" resultType="com.shibofu.spring.vo.ArchiveMasterVo">
SELECT
@ -54,4 +57,9 @@
FROM
archive_master order by discharge_date_time ASC
</select>
<select id="selectPacsPush" resultType="java.lang.String">
select top 1 masterId from pacs_compensate where compensateState=0
</select>
</mapper>
Loading…
Cancel
Save