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.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * @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 Msg PacsEveryDayPolling() { List archiveMasterVos = archiveMasterDao.PollingPacs(); if (CollectionUtils.isEmpty(archiveMasterVos)) { return Msg.fail("无需采集数据"); } gather(archiveMasterVos); return Msg.success("采集完成"); } @Override public Msg pacsAnxu() { List archiveMasterVos = archiveMasterDao.PollingPacsAnXu(); if (CollectionUtils.isEmpty(archiveMasterVos)) { return Msg.fail("无需采集数据"); } gather(archiveMasterVos); return Msg.success("采集完成"); } @Override public Msg PacsEveryWeekPolling() { List archiveMasterVos = archiveMasterDao.PacsEveryWeekPolling(); if (CollectionUtils.isEmpty(archiveMasterVos)) { return Msg.fail("无需采集数据"); } gather(archiveMasterVos); return Msg.success("采集完成"); } @Override public Msg makeUpPacsByMasterId(String masterId) { List archiveMasterVos = archiveMasterDao.makeUpPacsByMasterId(masterId); if (CollectionUtils.isEmpty(archiveMasterVos)) { return Msg.fail("无需采集数据"); } gather(archiveMasterVos); return Msg.success("采集完成"); } @Override public Msg makeUpPacsPush() { String masterId = archiveMasterDao.selectPacsPush(); List archiveMasterVos = archiveMasterDao.makeUpPacsByMasterId(masterId); if (CollectionUtils.isEmpty(archiveMasterVos)) { return Msg.fail("无需采集数据"); } gather(archiveMasterVos); archiveMasterDao.updatePacsCompenSate(masterId); return Msg.success("采集完成"); } private void deleteFliepath(List 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 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 vo = pacsDao.getVo(dto); if (CollectionUtils.isEmpty(vo)) { logger.info("该住院号时间内无数据" + list.getInpNo() + "住院次数为:" + list.getVisitId()); continue; } //插入文件表数据集合 List ArchiveDetailList = new ArrayList<>(); //需要同步的数据 for (PacsVo pacsList : vo) { //查询文件是否存在,如果存在先删除后新增 List 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 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() + "解析不返回图片"); } } }