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.

262 lines
16 KiB
Java

5 years ago
package com.ann.service.impl;
import com.alibaba.fastjson.JSON;
import com.ann.entity.constant.AliasName;
import com.ann.entity.constant.InterfaceName;
import com.ann.entity.filing.ArchiveDetail;
import com.ann.entity.filing.MessageSubordinate;
import com.ann.entity.filing.dto.MessageDto;
import com.ann.entity.interfaceEntity.ArchiveMaster;
import com.ann.entity.interfaceEntity.MessageLog;
import com.ann.entity.interfaceEntity.ScanningFile;
import com.ann.service.ArchiveDetailService;
import com.ann.service.ArchiveMasterService;
import com.ann.service.MessageService;
import com.ann.service.MessageSubordinateService;
import com.ann.utils.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* @Author: LeiJiaXin
* @Date: 2019/7/11 22:00
*/
@Service
public class QueueService {
@Autowired
MessageSubordinateService messageSubordinateService;
@Autowired
ArchiveMasterService archiveMasterService;
@Autowired
ArchiveDetailService archiveDetailService;
@Autowired
MessageService messageService;
//---------------------定时器
public void doSomething(List<MessageSubordinate> all) throws Exception {
if (all.size() > 0) {
for (MessageSubordinate messageSubordinate : all) {
Integer status = 2;
ArchiveDetail archiveDetail = null;
try {
// 解析内容
MessageLog messageLog = JSON.parseObject(messageSubordinate.getContentJson(), MessageLog.class);
5 years ago
if (messageLog != null) {
String outJson = messageLog.getOutJson();
if (outJson != null) {
MessageDto messageDto = JSON.parseObject(outJson, MessageDto.class);
if (messageDto.getSource().equals(InterfaceName.NURSE_DATA) && (messageDto.getReportAddress().endsWith(".jpg")
|| messageDto.getReportAddress().endsWith(".JPG") )){
5 years ago
messageSubordinate.setRemark("住院号:" + messageDto.getInpNo() + "pdf路径为空可能出现下载问题。。。");
} else {
ArchiveMaster archiveMaster = archiveMasterService.findByInpNoAndVisitIdAndIsValid(messageDto.getInpNo(), messageDto.getVisitId());
if (archiveMaster != null) {
if(!Objects.equals(messageDto.getType(),AliasName.PATHOLOGY_REPORT)){
if(archiveMaster.getArchiveState().equals("初审") || archiveMaster.getArchiveState().equals("已归档")
|| archiveMaster.getArchiveState().equals("复审退回")
|| archiveMaster.getArchiveState().equals("病案召回") ){
messageSubordinate.setStatus(3);
messageSubordinateService.save(messageSubordinate);
continue;
}
}
String address = messageDto.getReportAddress();
if (address != null && (!address.equals(""))) {
// 如果是老数据
if(Objects.equals(messageDto.getIsOld(),"0")){
5 years ago
archiveDetail = new ArchiveDetail(archiveMaster.getId(), new Date(), messageDto.getType(), messageDto.getSource(), messageDto.getApplyId(),messageDto.getDetailType(),1);
archiveDetailService.save(archiveDetail);
}else{
// 查询库中是否存在 如果存在就更新
archiveDetail = archiveDetailService.isExit(archiveMaster.getId(), messageDto.getType(), messageDto.getSource(), messageDto.getApplyId());
if (archiveDetail == null) {
archiveDetail = new ArchiveDetail(archiveMaster.getId(), new Date(), messageDto.getType(), messageDto.getSource(), messageDto.getApplyId(),
messageDto.getDetailType(),1);
archiveDetailService.save(archiveDetail);
}
}
String pdfPath = null;
String emrPath = "";
if(messageDto.getSource().equals(InterfaceName.NURSE_DATA)){
//医生 护理单独做处理
if(archiveMaster.getEmrNurseCmt() == null){
archiveMaster.setEmrNurseCmt("提交");
archiveMasterService.save(archiveMaster);
5 years ago
}
String a = "";
if(messageDto.getApplyId().lastIndexOf("_") != -1){
a = messageDto.getApplyId().substring(0, messageDto.getApplyId().indexOf(".pdf"));
}else{
a = address.substring(0, address.lastIndexOf("_"));
}
emrPath = messageDto.getType() + "~" + (a.substring(a.lastIndexOf("_") + 1, a.length())) + "~";
} else if(messageDto.getSource().equals(InterfaceName.DOCTOR_DATA)){
//护士 护理单独做处理
if(archiveMaster.getEmrDoctorCmt() == null){
archiveMaster.setEmrDoctorCmt("提交");
archiveMasterService.save(archiveMaster);
}
emrPath = messageDto.getType() + "~" + messageDto.getCaptionDateTime() + "~";
5 years ago
}else{
// 20200518 给重症系统的文件排序
if(messageDto.getType().equals(AliasName.ICU_REPORT)){
emrPath = messageDto.getDetailType() + "~" + messageDto.getCaptionDateTime() + "~";
}
}
5 years ago
File pdfFile = FileUtils.createFile("pdfs", messageDto.getInpNo(), messageDto.getVisitId(), archiveDetail.getId(), emrPath);
if (pdfFile != null) {
if (address.endsWith(".pdf") || address.endsWith(".PDF")) {
String path = DownloadUtils.downLoadPdfFile(pdfFile, address, messageDto.getType());
if (path != null) {
pdfPath = path;
}
} else {
if (Objects.equals(messageDto.getType(), AliasName.ICU_REPORT)) {
// 多个图片那么转成pdf
File imageFile = FileUtils.createDir("images", messageDto.getInpNo(), messageDto.getVisitId());
String imageFiles = DownloadUtils.downloadImageFiles(address, imageFile.getParent());
pdfPath = PdfUtils.imageDirToPdf(imageFiles, pdfFile);
} else {
// 一张图片转成pdf
File imageFile = FileUtils.createFile("images", messageDto.getInpNo(), messageDto.getVisitId(), archiveDetail.getId(), emrPath);
if (DownloadUtils.downloadImageFile(address, messageDto.getType(), imageFile)) {
pdfPath = PdfUtils.imagesToPdf(imageFile, pdfFile);
}
}
}
}
//存入pdf地址
if (pdfPath != null) {
// 转成格式
archiveDetail.setPdfPath(pdfPath);
archiveDetailService.save(archiveDetail);
//更新messageLog的最后执行时间
Date xmlCreateTime = messageLog.getXmlCreateTime();
long beginTime = xmlCreateTime.getTime();
long endTime = new Date().getTime();
messageLog.setXmlExecutionTime(endTime - beginTime);
messageService.save(messageLog);
// 成功
status = 1;
} else {
status = 2;
messageSubordinate.setRemark("住院号:" + messageDto.getInpNo() + "pdf路径为空可能出现下载问题。。。");
if (archiveDetail.getId() != null) {
archiveDetailService.delete(archiveDetail.getId());
}
}
} else {
// 判断是否是扫描文件
if(messageDto.getType().equals(AliasName.SCANNING_FILE)){
String outContent = this.handlePdfFile(messageDto, archiveMaster.getId());
if(outContent == null){
status = 1;
//更新messageLog的最后执行时间
Date xmlCreateTime = messageLog.getXmlCreateTime();
long beginTime = xmlCreateTime.getTime();
long endTime = new Date().getTime();
messageLog.setXmlExecutionTime(endTime - beginTime);
messageService.save(messageLog);
}else{
messageSubordinate.setRemark(outContent);
}
}else{
messageSubordinate.setRemark("地址为空。。。。");
}
}
} else {
messageSubordinate.setRemark("住院号为:" + messageDto.getInpNo() + "的ArchiveMaster为空。。。。");
}
}
}
}
} catch (Exception e) {
// 设置参数
messageSubordinate.setRemark(e + "");
// 报错删掉患者报告详情信息
if (archiveDetail != null) {
if (archiveDetail.getId() != null) {
archiveDetailService.delete(archiveDetail.getId());
}
}
}
messageSubordinate.setStatus(status);
// 判断次数等于多少
if (messageSubordinate.getRuns() < 6 && messageSubordinate.getStatus() == 2) {
Integer runs = messageSubordinate.getRuns();
messageSubordinate.setRuns(runs + 1);
}
messageSubordinateService.save(messageSubordinate);
}
}
}
// 定时器:根据第一次 没有成功的消息 重新尝试
public void doSomethingByError(List<MessageSubordinate> all) throws Exception {
if (all.size() > 0) {
for (MessageSubordinate messageSubordinate : all) {
messageSubordinate.setStatus(0);
messageSubordinateService.save(messageSubordinate);
}
}
}
public String handlePdfFile(MessageDto messageDto,String masterId) throws Exception {
try {
ScanningFile scanningFile = JSON.parseObject(messageDto.getObject().toString(), ScanningFile.class);
if (scanningFile == null) {
return "扫描文件解析实体错误。。。";
}
Object[] objects = WebServiceUtils.connect(scanningFile.getPath() + "\\" + scanningFile.getFileName());
if (objects == null) {
return "扫描文件下载图片出错了。。。";
}
byte[] bytes = (byte[]) objects[0];
String path = (scanningFile.getApplyId() != null ? scanningFile.getApplyId() : "") + "~" + (scanningFile.getNumber() != null ? scanningFile.getNumber() : "");
// 给临时图片填充内容
File imageTempFile = FileUtils.createFile("images", messageDto.getInpNo(), messageDto.getVisitId(), path);
File imageFile = FileUtils.getImageFileByByteArray(bytes, imageTempFile);
if (imageFile == null) {
return "扫描文件填充临时图片出错了。。。";
}
File pdfFile = FileUtils.createFile("pdfs", messageDto.getInpNo(), messageDto.getVisitId(), path);
String pdfPath = PdfUtils.imagesToPdf(imageFile, pdfFile);
//存入pdf地址
if (pdfPath == null) {
return "扫描文件image转成pdf出错了。。。";
}
// 如果存在 那就更新
ArchiveDetail archiveDetail = archiveDetailService.isExit(masterId, messageDto.getType(), messageDto.getSource(), messageDto.getApplyId() + "~" + (scanningFile.getNumber() != null ? scanningFile.getNumber() : ""));
if (archiveDetail == null) {
archiveDetail = new ArchiveDetail(masterId, new Date(), messageDto.getType(), messageDto.getSource(), messageDto.getApplyId() + "~" + (scanningFile.getNumber() != null ? scanningFile.getNumber() : ""), pdfPath);
archiveDetailService.save(archiveDetail);
}
} catch (Exception e) {
return e + "";
}
return null;
}
}