增加异常处理机制,修改日志保存路径

master
linjj 3 months ago
parent 42caa9dfa8
commit d5d95978e8

@ -19,6 +19,7 @@ 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.StringUtils;
import java.io.File;
import java.io.FileOutputStream;
@ -55,40 +56,51 @@ public class SubordinateServiceImpl implements SubordinateService {
return CommonResult.success("当前没有需要补偿的数据");
}
for (MessageSubordinateVo messageSubordinate : list) {
//判断消息中是否包含甲亢核医学PET-CT门诊不包含直接跳过不需要采集
if (!messageSubordinate.getContentJson().contains("甲亢核医学PET-CT门诊")) {
log.info("消息id为:" + messageSubordinate.getId() + "不包含甲亢核医学PET-CT门诊");
//不是甲亢核医学PET-CT门诊的报告将状态改为5
messageSubordinateDao.updateStatus(4, messageSubordinate.getId());
continue;
}
//解析json返回患者基础信息
MessageDto messageDto = parseMessage(messageSubordinate);
if (messageDto == null) {
//不存在数据时,将该记录状态改为4
messageSubordinateDao.updateStatus(4, messageSubordinate.getMessageId());
//解释json信息失败将状态改为4
messageSubordinateDao.updateStatus(4, messageSubordinate.getId());
continue;
}
//采集失败将状态该为2,成功将状态改为1
if (!compensate(messageDto)){
log.info("采集失败:"+messageSubordinate.getMessageId());
messageSubordinateDao.updateStatus(2, messageSubordinate.getMessageId());
}else {
log.info("采集成功:"+messageSubordinate.getMessageId());
messageSubordinateDao.updateStatus(1, messageSubordinate.getMessageId());
if (!compensate(messageDto)) {
log.info("采集失败:" + messageSubordinate.getId());
messageSubordinateDao.updateStatus(2, messageSubordinate.getId());
} else {
log.info("采集成功:" + messageSubordinate.getId());
messageSubordinateDao.updateStatus(1, messageSubordinate.getId());
}
}
return CommonResult.success("采集完成");
}
private Boolean compensate(MessageDto messageDto) {
//获取下载地址
String reportAddress = messageDto.getReportAddress();
//查询该患者主键id
List<String> ids = archiveMasterDao.getMasterIdByInpNoAndVisitId(messageDto.getInpNo(), messageDto.getVisitId());
if (CollectionUtils.isEmpty(ids)) {
return false;
}
//根据患者id查询文件表该文件的保存路径
List<String> pdfPaths = archiveDetailDao.getPdfPath(ids.get(0), messageDto.getApplyId());
//删除原地址文件
if (!delPdf(pdfPaths)) {
return false;
}
if (!DownloadFile(reportAddress, pdfPaths.get(0))) {
try {
//获取下载地址
String reportAddress = messageDto.getReportAddress();
//查询该患者主键id
List<String> ids = archiveMasterDao.getMasterIdByInpNoAndVisitId(messageDto.getInpNo(), messageDto.getVisitId());
if (CollectionUtils.isEmpty(ids)) {
return false;
}
//根据患者id查询文件表该文件的保存路径
List<String> pdfPaths = archiveDetailDao.getPdfPath(ids.get(0), messageDto.getApplyId());
//删除原地址文件
if (!delPdf(pdfPaths)) {
log.info("删除源文件失败:" + pdfPaths.get(0));
}
if (!DownloadFile(reportAddress, pdfPaths.get(0))) {
return false;
}
} catch (Exception e) {
return false;
}
return true;
@ -102,9 +114,9 @@ public class SubordinateServiceImpl implements SubordinateService {
* @Return java.lang.Boolean
*/
private Boolean delPdf(List<String> pdfPaths) {
//删除原地址文件
File file = new File(pdfPaths.get(0));
try {
//删除原地址文件
File file = new File(pdfPaths.get(0));
file.delete(); // 删除照片
} catch (Exception e) {
log.error("删除图像失败地址:" + pdfPaths.get(0) + e.getMessage(), e);
@ -123,11 +135,6 @@ public class SubordinateServiceImpl implements SubordinateService {
private MessageDto parseMessage(MessageSubordinateVo messageSubordinate) {
MessageDto messageDto = null;
String id = messageSubordinate.getId();
//判断消息中是否包含甲亢核医学PET-CT门诊不包含直接跳过不需要采集
if (!messageSubordinate.getContentJson().contains("甲亢核医学PET-CT门诊")) {
log.info("消息id为:" + id + "不包含甲亢核医学PET-CT门诊");
return messageDto;
}
// 解析内容
MessageLog messageLog = JSON.parseObject(messageSubordinate.getContentJson(), MessageLog.class);
if (messageLog == null) {
@ -137,7 +144,7 @@ public class SubordinateServiceImpl implements SubordinateService {
//获取患者基本信息
String outJson = messageLog.getOutJson();
if (outJson == null) {
log.info("消息id为:" + id + "outJson");
log.info("消息id为:" + id + "outJson为空");
return messageDto;
}
messageDto = JSON.parseObject(outJson, MessageDto.class);

@ -1,51 +1,42 @@
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
<!-- appender是configuration的子节点是负责写日志的组件。 -->
<!-- ConsoleAppender把日志输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback</contextName>
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%contextName] [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n</pattern>
<!-- 控制台也要使用UTF-8不要使用GBK否则会中文乱码 -->
<charset>UTF-8</charset>
<pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- RollingFileAppender滚动记录文件先将日志记录到指定文件当符合某个条件时将日志记录到其他文件 -->
<!-- 以下的大概意思是1.先按日期存日志日期变了将前一天的日志文件名重命名为XXX%日期%索引新的日志仍然是demo.log -->
<!-- 2.如果日期没有发生变化但是当前日志的文件大小超过1KB时对当前日志进行分割 重命名-->
<appender name="demolog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>D:\tool_zj\tool.log</File>
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
<!-- TimeBasedRollingPolicy 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
<!--按天生成日志,即一天只生成一个文件夹和一个日志文件-->
<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<Prudent>true</Prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活动文件的名字会根据fileNamePattern的值每隔一段时间改变一次 -->
<!-- 文件名log/demo.2017-12-05.0.log -->
<fileNamePattern>log/demo.%d.%i.log</fileNamePattern>
<!-- 每产生一个日志文件该日志文件的保存期限为15天 -->
<maxHistory>15</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小默认值是10MB测试时可改成1KB看效果 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>
D:/jsWorking/tool_zj/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
</FileNamePattern>
</rollingPolicy>
<encoder>
<!-- pattern节点用来设置日志的输入格式 -->
<pattern>
[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%X{traceId}] [%L] [%-5p] %m%n
</pattern>
<charset>utf-8</charset>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} -%msg%n
</Pattern>
</layout>
</appender>
<!-- 控制台输出日志级别 -->
<!-- logger节点可选节点作用是指明具体的包或类的日志输出级别
以及要使用的<appender>(可以把<appender>理解为一个日志模板)。
addtivity非必写属性是否向上级loger传递打印信息。默认是true-->
<logger name="com.framework.job" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="logFile"/>
</logger>
<!--项目的整体的日志打印级别为info-->
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="console"/>
<appender-ref ref="logFile"/>
</root>
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
<!-- com.liyan为根包也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
<!-- 级别依次为【从高到低】FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<logger name="com.example" level="INFO">
<appender-ref ref="demolog" />
</logger>
</configuration>

Loading…
Cancel
Save