From bde5eed2370c3448916c354dee582be18bb3e224 Mon Sep 17 00:00:00 2001 From: qiaoqinzheng Date: Thu, 21 Mar 2024 10:28:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5mdc=E5=88=86=E6=94=AF?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg/common/constant/DictConstant.java | 4 + .../common/constant/MonitorConstant.java | 1 + .../org/jeecg/common/email/EmailLogEvent.java | 32 +- .../jeecg/common/email/EmailLogManager.java | 36 +- .../common/email/EmailServiceManager.java | 65 +- .../properties/SpectrumPathProperties.java | 5 + .../common/properties/TaskProperties.java | 10 + .../java/org/jeecg/common/util/FTPUtil.java | 62 +- .../java/org/jeecg/common/util/NumUtil.java | 62 + .../org/jeecg/common/util/TemplateUtil.java | 55 + .../modules/base/bizVo/NuclideAvgVo.java | 4 + .../jeecg/modules/base/dto/AnalysesDto.java | 2 + .../jeecg/modules/base/dto/DatabaseDto.java | 25 +- .../org/jeecg/modules/base/dto/NameValue.java | 7 - .../jeecg/modules/base/dto/NuclideAvgDto.java | 4 + .../jeecg/modules/base/dto/NuclideInfo.java | 8 + .../org/jeecg/modules/base/dto/ServerDto.java | 6 +- .../entity/configuration/GardsStations.java | 3 + .../postgre/AlarmAnalysisNuclideAvg.java | 8 + .../org/jeecg/modules/base/enums/DSType.java | 16 +- .../org/jeecg/modules/base/enums/Item.java | 4 +- .../jeecg/modules/base/enums/StationType.java | 11 + .../org/jeecg/modules/entity/vo/PHDFile.java | 9 + jeecg-module-abnormal-alarm/pom.xml | 8 +- .../jeecg/modules/aspect/StatusAspect.java | 72 +- .../AlarmAnalysisLogController.java | 6 + .../AlarmAnalysisNuclideAvgController.java | 2 +- .../AlarmAnalysisNuclideParamController.java | 6 - .../controller/AlarmItemController.java | 3 +- .../controller/AlarmLogController.java | 7 + .../controller/CalculateConcController.java | 4 +- .../controller/SysDatabaseController.java | 6 + .../controller/SysEmailController.java | 6 + .../controller/SysServerController.java | 6 + .../modules/feignclient/MonitorAlarm.java | 14 +- .../jeecg/modules/mapper/AlarmItemMapper.java | 4 +- .../xml/AlarmAnalysisNuclideAvgMapper.xml | 9 +- .../modules/mapper/xml/AlarmItemMapper.xml | 9 + .../mapper/xml/GardsNuclIdedAutoMapper.xml | 2 + .../mapper/xml/GardsNuclIdedManMapper.xml | 2 + .../mapper/xml/GardsXeResultsAutoMapper.xml | 2 + .../mapper/xml/GardsXeResultsManMapper.xml | 2 + .../modules/redisStream/AnalysisConsumer.java | 101 +- .../modules/service/CalculateConcService.java | 2 +- .../IAlarmAnalysisNuclideParamService.java | 2 +- .../modules/service/IAlarmItemService.java | 4 +- .../service/IGardsXeResultsAutoService.java | 2 +- .../service/IGardsXeResultsManService.java | 2 +- .../modules/service/ISysDatabaseService.java | 2 - .../impl/AlarmAnalysisLogServiceImpl.java | 3 +- .../AlarmAnalysisNuclideAvgServiceImpl.java | 12 +- .../AlarmAnalysisNuclideParamServiceImpl.java | 16 +- .../service/impl/AlarmItemServiceImpl.java | 46 +- .../service/impl/AlarmRuleServiceImpl.java | 6 +- .../impl/CalculateConcServiceImpl.java | 188 +- .../impl/GardsXeResultsAutoServiceImpl.java | 28 +- .../impl/GardsXeResultsManServiceImpl.java | 28 +- .../service/impl/SysDatabaseServiceImpl.java | 125 +- .../service/impl/SysEmailServiceImpl.java | 14 +- .../service/impl/SysServerServiceImpl.java | 64 +- .../modules/controller/StationController.java | 12 +- .../modules/feignclient/StationService.java | 6 + .../org/jeecg/modules/AutoProcessManager.java | 254 ++- .../jeecg/modules/EmailParsingActuator.java | 63 +- .../jeecg/modules/UndealHandleManager.java | 4 +- .../exception/AnalySpectrumException.java | 9 + .../org/jeecg/modules/file/FileOperation.java | 44 + .../impl/SpectrumBaseBlockServiceImpl.java | 2 +- .../AbstractS_D_Q_G_SpectrumHandler.java | 4 + .../spectrum/AbstractSpectrumHandler.java | 33 +- .../jeecg/modules/spectrum/AlertSpectrum.java | 2 +- .../modules/spectrum/DetbkphdSpectrum.java | 2 +- .../modules/spectrum/GasbkphdSpectrum.java | 2 +- .../spectrum/HealthStatusSpectrum.java | 6 - .../jeecg/modules/spectrum/MetSpectrum.java | 2 +- .../jeecg/modules/spectrum/QcphdSpectrum.java | 2 +- .../modules/spectrum/Sample_G_Analysis.java | 44 +- .../modules/spectrum/SamplephdSpectrum.java | 3 +- .../spectrum/SpectrumParsingActuator.java | 76 +- .../spectrum/SpectrumServiceQuotes.java | 4 +- .../org/jeecg/common/util/GammaFileUtil.java | 394 +++-- .../impl/SysDefaultNuclideServiceImpl.java | 26 +- .../test/controller/JeecgDemoController.java | 42 +- .../org/jeecg/common/util/PHDFileUtil.java | 334 ++++ .../modules/controller/GammaController.java | 47 +- .../SpectrumAnalysesController.java | 17 +- .../GardsCalibrationSpectrumMapper.java | 3 + .../mapper/SpectrumAnalysisMapper.java | 4 +- .../xml/GardsCalibrationSpectrumMapper.xml | 28 + .../mapper/xml/SpectrumAnalysisMapper.xml | 2 - .../jeecg/modules/service/IGammaService.java | 4 +- ...IGardsCalibrationPairsSpectrumService.java | 3 +- .../IGardsCalibrationSpectrumService.java | 3 +- .../IGardsROIChannelsSpectrumService.java | 3 +- .../IGardsROIResultsSpectrumService.java | 3 +- .../IGardsXeResultsSpectrumService.java | 3 +- .../service/ISpectrumAnalysisService.java | 2 +- .../service/impl/GammaServiceImpl.java | 433 +---- ...dsCalibrationPairsSpectrumServiceImpl.java | 91 +- .../GardsCalibrationSpectrumServiceImpl.java | 121 +- .../GardsROIChannelsSpectrumServiceImpl.java | 50 +- .../GardsROIResultsSpectrumServiceImpl.java | 26 +- .../GardsXeResultsSpectrumServiceImpl.java | 8 +- .../impl/SpectrumAnalysisServiceImpl.java | 1547 +++++++---------- .../service/impl/SpectrumFileServiceImpl.java | 8 +- .../org/jeecg/DataReceivingStatusManager.java | 22 +- .../org/jeecg/common/StationTypeUtil.java | 10 +- .../StationOperationController.java | 27 +- .../SysUserFocusStationController.java | 11 + .../entity/SysUserFocusStationStation.java | 6 + .../service/IStationOperationService.java | 2 +- .../service/ISysUserFocusStationService.java | 7 + .../impl/StationOperationServiceImpl.java | 78 +- .../impl/SysUserFocusStationServiceImpl.java | 199 ++- .../feignclient/AbnormalAlarmClient.java | 4 + .../jeecg/modules/feignclient/ManageUtil.java | 34 +- .../jeecg/modules/message/SendMessage.java | 50 +- .../handle/impl/EmailPushMsgHandle.java | 7 +- .../modules/message/util/PushAppUtil.java | 2 - .../jeecg/modules/quartz/job/DatabaseJob.java | 39 +- .../jeecg/modules/quartz/job/ServerJob.java | 8 +- .../modules/quartz/jobs/DatabaseJob.java | 36 +- .../jeecg/modules/quartz/jobs/ServerJob.java | 8 +- .../modules/quartz/jobs/TableSpaceJob.java | 160 ++ .../system/controller/LoginController.java | 42 +- .../controller/SysAnnouncementController.java | 8 +- .../SysAnnouncementSendController.java | 39 +- .../system/controller/SysRoleController.java | 26 +- .../system/mapper/GardsSampleDataMapper.java | 2 +- .../mapper/xml/GardsSampleDataMapper.xml | 11 +- .../system/mapper/xml/SysUserDepartMapper.xml | 2 +- .../impl/GardsSampleDataServiceImpl.java | 49 +- .../service/impl/SysUserServiceImpl.java | 3 +- .../controller/RadionuclideController.java | 24 +- .../controller/WebStatisticsController.java | 10 + .../impl/GardsSampleDataWebServiceImpl.java | 23 +- .../jeecg/JeecgAutoProcessApplication.java | 13 +- .../JeecgSpectrumAnalysisApplication.java | 16 +- .../jeecg/JeecgWebStatisticsApplication.java | 9 +- jeecg-server-cloud/pom.xml | 1 + pom.xml | 8 +- 141 files changed, 3819 insertions(+), 2207 deletions(-) create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/StationType.java create mode 100644 jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/AnalySpectrumException.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/TableSpaceJob.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/DictConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/DictConstant.java index 9eef2a99..8ecfeb7b 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/DictConstant.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/DictConstant.java @@ -9,4 +9,8 @@ public interface DictConstant { String ANALYSE_SOURCE = "alarm_analyse_rule_source"; String DATASOURCE_TYPE = "database_type"; + + String NOBLE_GAS_BETAGAMMA = "Noble Gas Beta-Gamma"; + + String NOBLE_GAS_HPGE = "Noble Gas HPGe"; } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MonitorConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MonitorConstant.java index 01f21c00..dfed1ac0 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MonitorConstant.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/MonitorConstant.java @@ -9,6 +9,7 @@ public interface MonitorConstant { // 监控项名称 String ITEM_CPUUSED = "cpuUtilization"; String ITEM_SWAPUSED = "swapUtilization"; + String ITEM_MEMORYFREESIZE = "memoryFreeSize"; // byte String ITEM_MEMORYUSED = "memoryUtilization"; String ITEM_RUNTIME = "uptime"; String ITEM_RAMSIZE = "totalMemory"; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailLogEvent.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailLogEvent.java index c086e40a..95f3cc70 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailLogEvent.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailLogEvent.java @@ -2,7 +2,6 @@ package org.jeecg.common.email; import lombok.Data; import org.jeecg.modules.base.entity.postgre.SysEmail; - import java.util.Date; /** @@ -34,7 +33,7 @@ public class EmailLogEvent { /** * 接收时间 */ - private Date recieveTime; + private String recieveTime; /** * 能谱文件名称 */ @@ -49,6 +48,10 @@ public class EmailLogEvent { */ private Date logTime; + private Long threadId; + + private Integer batchesCounter; + public EmailLogEvent(){ } @@ -61,7 +64,9 @@ public class EmailLogEvent { this.logTime = new Date(); } - public EmailLogEvent(String gsType,String logProcess) { + public EmailLogEvent(Integer batchesCounter,Long threadId,String gsType,String logProcess) { + this.batchesCounter = batchesCounter; + this.threadId = threadId; this.gsType = gsType; this.logProcess = logProcess; this.logTime = new Date(); @@ -74,7 +79,18 @@ public class EmailLogEvent { this.logTime = new Date(); } - public EmailLogEvent(String gsType,String state, String logProcess,String phdMailLoadPath) { + public EmailLogEvent(Integer batchesCounter,Long threadId,String gsType,String state, String logProcess) { + this.batchesCounter = batchesCounter; + this.threadId = threadId; + this.gsType = gsType; + this.state = state; + this.logProcess = logProcess; + this.logTime = new Date(); + } + + public EmailLogEvent(Integer batchesCounter,Long threadId,String gsType,String state, String logProcess,String phdMailLoadPath) { + this.batchesCounter = batchesCounter; + this.threadId = threadId; this.gsType = gsType; this.state = state; this.logProcess = logProcess; @@ -82,7 +98,9 @@ public class EmailLogEvent { this.logTime = new Date(); } - public EmailLogEvent(String gsType,String state, String logProcess,String subject,Date recieveTime,String emlPath) { + public EmailLogEvent(Integer batchesCounter,Long threadId,String gsType,String state, String logProcess,String subject,String recieveTime,String emlPath) { + this.batchesCounter = batchesCounter; + this.threadId = threadId; this.gsType = gsType; this.state = state; this.logProcess = logProcess; @@ -92,7 +110,9 @@ public class EmailLogEvent { this.logTime = new Date(); } - public EmailLogEvent(String gsType,String state, String logProcess,String subject,Date recieveTime) { + public EmailLogEvent(Integer batchesCounter,Long threadId,String gsType,String state, String logProcess,String subject,String recieveTime) { + this.batchesCounter = batchesCounter; + this.threadId = threadId; this.gsType = gsType; this.state = state; this.logProcess = logProcess; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailLogManager.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailLogManager.java index de0596ef..00b8c7c9 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailLogManager.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailLogManager.java @@ -201,6 +201,11 @@ public class EmailLogManager { */ private String getIdHeaderLog(EmailLogEvent event){ StringBuilder logContent = new StringBuilder(); + logContent.append("Batches: "); + logContent.append(event.getBatchesCounter()); + logContent.append(" ThreadId: "); + logContent.append(event.getThreadId()); + logContent.append(StringConstant.SPACE); logContent.append(DateUtils.formatDate(event.getLogTime(),"yyyy-MM-dd HH:mm:ss")); logContent.append(" Get FileNameHeader "); logContent.append(event.getState()); @@ -217,6 +222,11 @@ public class EmailLogManager { */ private String getIdBodyLog(EmailLogEvent event){ StringBuilder logContent = new StringBuilder(); + logContent.append("Batches: "); + logContent.append(event.getBatchesCounter()); + logContent.append(" ThreadId: "); + logContent.append(event.getThreadId()); + logContent.append(StringConstant.SPACE); logContent.append(DateUtils.formatDate(event.getLogTime(),"yyyy-MM-dd HH:mm:ss")); logContent.append(" Get File "); logContent.append(event.getPhdMailLoadPath()); @@ -234,11 +244,16 @@ public class EmailLogManager { */ private String getIdEmlLog(EmailLogEvent event){ StringBuilder logContent = new StringBuilder(); + logContent.append("Batches: "); + logContent.append(event.getBatchesCounter()); + logContent.append(" ThreadId: "); + logContent.append(event.getThreadId()); + logContent.append(StringConstant.SPACE); logContent.append(DateUtils.formatDate(event.getLogTime(),"yyyy-MM-dd HH:mm:ss")); logContent.append(" Get File subject:"); logContent.append(event.getSubject()); logContent.append(" recieve datetime:"); - logContent.append(DateUtils.formatDate(event.getRecieveTime(),"yyyy-MM-dd HH:mm:ss:SSS")); + logContent.append(event.getRecieveTime()); logContent.append(event.getState()); logContent.append(" EmlFile "); logContent.append(event.getEmlPath()); @@ -255,11 +270,16 @@ public class EmailLogManager { */ private String getDeleteLog(EmailLogEvent event){ StringBuilder logContent = new StringBuilder(); + logContent.append("Batches: "); + logContent.append(event.getBatchesCounter()); + logContent.append(" ThreadId: "); + logContent.append(event.getThreadId()); + logContent.append(StringConstant.SPACE); logContent.append(DateUtils.formatDate(event.getLogTime(),"yyyy-MM-dd HH:mm:ss")); logContent.append(" Delete File subject:"); logContent.append(event.getSubject()); logContent.append(" recieve datetime:"); - logContent.append(DateUtils.formatDate(event.getRecieveTime(),"yyyy-MM-dd HH:mm:ss:SSS")); + logContent.append(event.getRecieveTime()); logContent.append(event.getState()); logContent.append(LOG_SUFFIX); logContent.append(System.lineSeparator()); @@ -274,11 +294,16 @@ public class EmailLogManager { */ private String getExpungeLog(EmailLogEvent event){ StringBuilder logContent = new StringBuilder(); + logContent.append("Batches: "); + logContent.append(event.getBatchesCounter()); + logContent.append(" ThreadId: "); + logContent.append(event.getThreadId()); + logContent.append(StringConstant.SPACE); logContent.append(DateUtils.formatDate(event.getLogTime(),"yyyy-MM-dd HH:mm:ss")); logContent.append(" Expunge File subject:"); logContent.append(event.getSubject()); logContent.append(" recieve datetime:"); - logContent.append(DateUtils.formatDate(event.getRecieveTime(),"yyyy-MM-dd HH:mm:ss:SSS")); + logContent.append(event.getRecieveTime()); logContent.append(event.getState()); logContent.append(LOG_SUFFIX); logContent.append(System.lineSeparator()); @@ -293,6 +318,11 @@ public class EmailLogManager { */ private String getDoneLog(EmailLogEvent event){ StringBuilder logContent = new StringBuilder(); + logContent.append("Batches: "); + logContent.append(event.getBatchesCounter()); + logContent.append(" ThreadId: "); + logContent.append(event.getThreadId()); + logContent.append(StringConstant.SPACE); logContent.append(DateUtils.formatDate(event.getLogTime(),"yyyy-MM-dd HH:mm:ss")); logContent.append(" Done"); logContent.append(LOG_SUFFIX); diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java index fe112ee7..2ac1db5d 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/email/EmailServiceManager.java @@ -1,6 +1,8 @@ package org.jeecg.common.email; +import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.google.common.collect.Lists; import com.sun.mail.imap.IMAPStore; @@ -12,6 +14,7 @@ import org.jeecg.common.constant.RedisConstant; import org.jeecg.common.constant.StringConstant; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.email.emuns.MailContentType; +import org.jeecg.common.exception.DownloadEmailException; import org.jeecg.common.properties.SpectrumPathProperties; import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.Md5Util; @@ -94,7 +97,7 @@ public class EmailServiceManager { Socket socket = new Socket(); boolean flag = false; try { - socket.connect(new InetSocketAddress(email.getEmailServerAddress(),email.getPort()),5000); + socket.connect(new InetSocketAddress(email.getEmailServerAddress(),email.getPort()),3000); log.info("{}邮件服务连接测试成功",email.getName()); flag = true; } catch (IOException e) { @@ -325,8 +328,9 @@ public class EmailServiceManager { props.put("mail.smtp.host", email.getEmailServerAddress()); props.put("mail.smtp.port", email.getPort()); props.put("mail.smtp.auth", "true"); - /*props.put("mail.smtp.socketFactory.port", email.getPort()); - props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");*/ + props.put("mail.smtp.starttls.enable", "true"); + props.put("mail.smtp.socketFactory.port", email.getPort()); + props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); Session session = Session.getInstance(props); @@ -433,7 +437,7 @@ public class EmailServiceManager { * @param message * @return */ - public String getMailSubject(@NotNull Message message) throws MessagingException { + public String getMailSubject(@NotNull Message message,Integer batchesCounter) throws MessagingException { String subject = ""; String status = EmailLogManager.STATUS_SUCCESS; try { @@ -444,7 +448,7 @@ public class EmailServiceManager { status = EmailLogManager.STATUS_ERROR; throw e; }finally { - EmailLogEvent event = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,status,EmailLogManager.GETIDHEADER); + EmailLogEvent event = new EmailLogEvent(batchesCounter,Thread.currentThread().getId(),EmailLogManager.GS_TYPE_GET,status,EmailLogManager.GETIDHEADER); EmailLogManager.getInstance().offer(Thread.currentThread().getId(),event); } return subject; @@ -512,12 +516,14 @@ public class EmailServiceManager { /** * 把邮件下载到eml目录 * 格式为:发件人_主题_年月日_时分秒毫秒_计数(0-10000) + * 新格式为:发件人_主题_年月日_时分秒毫秒_receive_年月日_时分秒毫秒_计数(0-10000) * 当计数大于10000后从0开始,服务重启后也从0开始 */ - public File downloadEmailToEmlDir(@NotNull Message message,Integer emailCounter) throws MessagingException, IOException { + public File downloadEmailToEmlDir(@NotNull Message message,Integer emailCounter,Integer batchesCounter) throws MessagingException { String subject = ""; File emlFile = null; String status = EmailLogManager.STATUS_SUCCESS; + Date receivedDate = null; try { //获取发件人 final String address = ((InternetAddress) message.getFrom()[0]).getAddress(); @@ -530,7 +536,7 @@ public class EmailServiceManager { if(subject.indexOf(StringConstant.COLON) != -1){ subject = StringUtils.replace(subject,StringConstant.COLON,""); } - + receivedDate = message.getReceivedDate(); StringBuilder fileName = new StringBuilder(); fileName.append(from); fileName.append(StringConstant.UNDER_LINE); @@ -538,7 +544,13 @@ public class EmailServiceManager { fileName.append(StringConstant.UNDER_LINE); fileName.append(DateUtils.formatDate(new Date(),"YYMMdd")); fileName.append(StringConstant.UNDER_LINE); - fileName.append(DateUtils.formatDate(new Date(),"HHMMSSSSS")); + fileName.append(DateUtils.formatDate(new Date(),"HHmmssSSS")); + fileName.append(StringConstant.UNDER_LINE); + fileName.append("receive"); + fileName.append(StringConstant.UNDER_LINE); + fileName.append(DateUtils.formatDate(receivedDate,"YYMMdd")); + fileName.append(StringConstant.UNDER_LINE); + fileName.append(DateUtils.formatDate(receivedDate,"HHmmssSSS")); fileName.append(StringConstant.UNDER_LINE); fileName.append(emailCounter); fileName.append(SAVE_EML_SUFFIX); @@ -546,17 +558,36 @@ public class EmailServiceManager { final String emlPath = spectrumPathProperties.getEmlPath(); emlFile = new File(rootPath+emlPath+File.separator+fileName); message.writeTo(new FileOutputStream(emlFile)); + +// int bufferSize = 1024 * 1024; // 1M +// InputStream inputStream = message.getInputStream(); +// BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream, bufferSize); +// // 或者使用 BufferedOutputStream +// OutputStream outputStream = new FileOutputStream(emlFile); +// BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream, bufferSize); +// // 从邮件的输入流读取内容,并写入到本地文件 +// byte[] buffer = new byte[bufferSize]; +// int bytesRead; +// while ((bytesRead = bufferedInputStream.read(buffer)) != -1) { +// bufferedOutputStream.write(buffer, 0, bytesRead); +// } +// +// // 关闭流 +// bufferedInputStream.close(); +// bufferedOutputStream.close(); } catch (MessagingException | IOException e) { - //下载邮件失败 + // 下载邮件失败 抛出自定义邮件下载异常 status = EmailLogManager.STATUS_ERROR; - log.error("The email download failed, the subject of the email is {}, the reason is {}.",subject,e.getMessage()); - throw e; + String errorMsg = StrUtil.format("The email download failed, the subject of the email is {}, the reason is {}.", subject, e.getMessage()); + log.error(errorMsg); + throw new DownloadEmailException(errorMsg); + }catch (Exception e) { + log.error("",e); }finally { - EmailLogEvent event = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,status,EmailLogManager.GETIDEML,subject,message.getReceivedDate(), + EmailLogEvent event = new EmailLogEvent(batchesCounter,Thread.currentThread().getId(),EmailLogManager.GS_TYPE_GET,status,EmailLogManager.GETIDEML,subject,DateUtils.formatDate(receivedDate,"yyyy-MM-dd HH:mm:ss:SSS"), (Objects.isNull(emlFile)?" ":emlFile.getAbsolutePath())); EmailLogManager.getInstance().offer(Thread.currentThread().getId(),event); } - return emlFile; } @@ -565,7 +596,7 @@ public class EmailServiceManager { * @param message * @throws MessagingException */ - public void removeMail(@NotNull Message message){ + public void removeMail(@NotNull Message message,Integer batchesCounter){ String status = EmailLogManager.STATUS_SUCCESS; String subject = ""; Date receivedDate = null; @@ -573,15 +604,16 @@ public class EmailServiceManager { subject = MimeUtility.decodeText(message.getSubject()); receivedDate = message.getReceivedDate(); message.setFlag(Flags.Flag.DELETED,true); +// log.info("EmailServiceManager: Remove Email:{},receiveTime:{}",message.getSubject(), DateUtils.formatDate(message.getReceivedDate(),"yyyy-MM-dd HH:mm:ss")); } catch (MessagingException | UnsupportedEncodingException e) { status = EmailLogManager.STATUS_ERROR; log.error("Email deletion failed, the subject of the email is :{}, the reason is :{}.",subject,e.getMessage()); e.printStackTrace(); }finally { - EmailLogEvent removeEvent = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,status,EmailLogManager.DELETEID,subject,receivedDate); + EmailLogEvent removeEvent = new EmailLogEvent(batchesCounter,Thread.currentThread().getId(),EmailLogManager.GS_TYPE_GET,status,EmailLogManager.DELETEID,subject,DateUtils.formatDate(receivedDate,"yyyy-MM-dd HH:mm:ss:SSS")); EmailLogManager.getInstance().offer(Thread.currentThread().getId(),removeEvent); //这里删除和彻底删除一起写入日志,java和C++处理有差异,java是在连接关闭时彻底删除的 - EmailLogEvent expungeEvent = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,status,EmailLogManager.EXPUNGE,subject,receivedDate); + EmailLogEvent expungeEvent = new EmailLogEvent(batchesCounter,Thread.currentThread().getId(),EmailLogManager.GS_TYPE_GET,status,EmailLogManager.EXPUNGE,subject,DateUtils.formatDate(receivedDate,"yyyy-MM-dd HH:mm:ss:SSS")); EmailLogManager.getInstance().offer(Thread.currentThread().getId(),expungeEvent); } } @@ -619,6 +651,7 @@ public class EmailServiceManager { String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId; exist = redisUtil.hasKey(key); if(exist){ + log.info("Check: Remove Email:{},receiveTime:{}",message.getSubject(), DateUtils.formatDate(message.getReceivedDate(),"yyyy-MM-dd HH:mm:ss")); message.setFlag(Flags.Flag.DELETED,true); } return exist; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/SpectrumPathProperties.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/SpectrumPathProperties.java index 43ac51f1..ce6d5e35 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/SpectrumPathProperties.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/SpectrumPathProperties.java @@ -39,6 +39,11 @@ public class SpectrumPathProperties implements Serializable { */ private String emlPath; + /** + * eml格式错误邮件存储路径 + */ + private String emlErrorPath; + /** * 日志文件存储路径 */ diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java index a7594460..34f9e294 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/TaskProperties.java @@ -41,6 +41,16 @@ public class TaskProperties implements Serializable { */ private Integer mailThreadExecCycle; + /** + * 监测需删除的邮件线程执行周期(毫秒) + */ + private Integer deletedMailThreadExecCycle; + + /** + * 强制删除邮件线程时间(毫秒) + */ + private Integer forceDeletedTime; + /** * undeal目录文件获取周期 */ diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/FTPUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/FTPUtil.java index dde61ecb..0e16b41e 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/FTPUtil.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/FTPUtil.java @@ -256,6 +256,9 @@ public class FTPUtil { log.error("{},根目录切换失败",rootPath); return false; } + if (path.contains(rootPath)) { + path = path.substring(path.indexOf(rootPath) + rootPath.length()); + } String[] directories = path.split("/"); for(String directory : directories){ if(StringUtils.isEmpty(directory)){ @@ -263,7 +266,7 @@ public class FTPUtil { } if(!ftpClient.changeWorkingDirectory(directory)){ if(!ftpClient.makeDirectory(directory)){ - log.error("{},目录创建失败",directory); + log.error("{},目录创建失败",ftpClient.printWorkingDirectory()+StringPool.SLASH+directory); return false; } if(!ftpClient.changeWorkingDirectory(directory)){ @@ -356,6 +359,45 @@ public class FTPUtil { } } + /* + * 批量删除FTP文件 返回删除失败的文件路径 + * */ + public boolean removeFiles(String path){ + boolean success = false; + // 连接FTP服务 + final FTPClient ftpClient = this.LoginFTP(); + //判断ftp是否连接成功 + if (ObjectUtil.isNull(ftpClient)){ + log.error("FTPUtil.removeFiles(): FTPClient is null"); + } + InputStream inputStream = null; + try { + inputStream = ftpClient.retrieveFileStream(path); + //读取文件路径的流 如果文件存在则读取流数据不为空 + if (Objects.nonNull(inputStream)) { + //删除文件 + success = ftpClient.deleteFile(path); + } + //日志输出文件删除状态 + log.info(path + " Delete Status:"+success); + } catch (Exception e) { + log.error("FTPUtil.removeFiles()删除文件[{}]失败: {}", path, e.getMessage()); + } finally { + // 关闭FTP连接 + try { + if (Objects.nonNull(inputStream)) { + inputStream.close(); + } + if (ObjectUtil.isNotNull(ftpClient)) { + ftpClient.disconnect(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return success; + } + /* * 批量删除FTP文件 返回删除失败的文件路径 * */ @@ -369,10 +411,19 @@ public class FTPUtil { return paths; } for (String path : paths) { + boolean success = false; try { - if (StrUtil.isBlank(path)) continue; - boolean success = ftpClient.deleteFile(path); - if (!success) failList.add(path); + if (StrUtil.isBlank(path)) { + continue; + } + if (Objects.nonNull(ftpClient.retrieveFileStream(path))) { + success = ftpClient.deleteFile(path); + log.info(path + " Delete Status:"+success); + } else { + log.info(path + " Delete Status:false"); + failList.add(path); + log.error("FTPUtil.removeFiles()删除文件[{}]失败", path); + } } catch (Exception e) { failList.add(path); log.error("FTPUtil.removeFiles()删除文件[{}]失败: {}", path, e.getMessage()); @@ -380,8 +431,9 @@ public class FTPUtil { } // 关闭FTP连接 try { - if (ObjectUtil.isNotNull(ftpClient)) + if (ObjectUtil.isNotNull(ftpClient)) { ftpClient.disconnect(); + } } catch (IOException e) { e.printStackTrace(); } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/NumUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/NumUtil.java index 9c64c389..df4a8529 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/NumUtil.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/NumUtil.java @@ -1,11 +1,14 @@ package org.jeecg.common.util; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.HashMap; +import java.util.Map; import static org.jeecg.modules.base.enums.Op.*; import static org.jeecg.modules.base.enums.Op.LE; @@ -125,4 +128,63 @@ public class NumUtil { return false; } } + + public static Map compare(Map current, Double threshold, String op){ + boolean cNull = MapUtil.isEmpty(current); + boolean tNull = ObjectUtil.isNull(threshold); + + Map result = new HashMap<>(); + if (cNull || tNull) return result; + + double thresholdV = threshold; + for (Map.Entry entry : current.entrySet()) { + String key = entry.getKey(); + double currentV = entry.getValue(); + if (EQ.getOp().equals(op)){ + result.put(key, currentV == thresholdV); + } else if (GT.getOp().equals(op)) { + result.put(key, currentV > thresholdV); + } else if (GE.getOp().equals(op)) { + result.put(key, currentV >= thresholdV); + } else if (LT.getOp().equals(op)) { + result.put(key, currentV < thresholdV); + } else if (LE.getOp().equals(op)) { + result.put(key, currentV <= thresholdV); + }else { + result.put(key, false); + } + } + return result; + } + + public static String kb2Gb(String kb, int scale){ + if (StrUtil.isBlank(kb)) + return null; + BigDecimal decimal = new BigDecimal(kb); + double v = decimal.divide(new BigDecimal(1024), scale, RoundingMode.HALF_UP) + .divide(new BigDecimal(1024), scale, RoundingMode.HALF_UP) + .doubleValue(); + return String.valueOf(v); + } + + public static String byte2Mb(String bytes, int scale){ + if (StrUtil.isBlank(bytes)) + return null; + BigDecimal decimal = new BigDecimal(bytes); + double v = decimal.divide(new BigDecimal(1024), scale, RoundingMode.HALF_UP) + .divide(new BigDecimal(1024), scale, RoundingMode.HALF_UP) + .doubleValue(); + return String.valueOf(v); + } + + public static String byte2Gb(String bytes, int scale){ + if (StrUtil.isBlank(bytes)) + return null; + BigDecimal decimal = new BigDecimal(bytes); + double v = decimal.divide(new BigDecimal(1024), scale, RoundingMode.HALF_UP) + .divide(new BigDecimal(1024), scale, RoundingMode.HALF_UP) + .divide(new BigDecimal(1024), scale, RoundingMode.HALF_UP) + .doubleValue(); + return String.valueOf(v); + } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/TemplateUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/TemplateUtil.java index d61f655c..f3a902c0 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/TemplateUtil.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/TemplateUtil.java @@ -1,13 +1,20 @@ package org.jeecg.common.util; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.util.dynamic.db.FreemarkerParseFactory; import org.jeecg.modules.base.entity.postgre.SysMessageTemplate; import org.jeecg.modules.base.service.ISysMessageTemplateService; + +import java.util.ArrayList; +import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /* * 模板工具类 @@ -37,6 +44,30 @@ public class TemplateUtil { return messageDTO; } + public static MessageDTO parse1(String code, Map data){ + MessageDTO messageDTO = new MessageDTO(); + SysMessageTemplate template = templateService.getOne(code); + // 如果没有消息模板 + if(ObjectUtil.isNull(template)) + return messageDTO; + String templateName = template.getTemplateName(); + String templateContent = template.getTemplateContent(); + messageDTO.setTitle(templateName); + if (MapUtil.isEmpty(data)) + return messageDTO; + Set keys = data.keySet(); + String pattern = "\\<([^<>]*{}[^<>]*)\\>"; + List contents = new ArrayList<>(); + for (String key : keys) { + contents.add(ReUtil.getGroup1(StrUtil.format(pattern, key), templateContent)); + } + templateContent = CollUtil.join(contents, "#"); + String content = FreemarkerParseFactory + .parseTemplateContent(templateContent, data, true); + messageDTO.setContent(content); + return messageDTO; + } + public static MessageDTO parse(String title, String code, Map data) { MessageDTO messageDTO = new MessageDTO(); SysMessageTemplate template = templateService.getOne(code); @@ -53,4 +84,28 @@ public class TemplateUtil { messageDTO.setContent(content); return messageDTO; } + + public static MessageDTO parse1(String title, String code, Map data) { + MessageDTO messageDTO = new MessageDTO(); + SysMessageTemplate template = templateService.getOne(code); + // 如果没有消息模板 + if(ObjectUtil.isNull(template)) + return messageDTO; + String templateName = template.getTemplateName(); + String templateContent = template.getTemplateContent(); + messageDTO.setTitle(StrUtil.isBlank(title) ? templateName : title); + if (MapUtil.isEmpty(data)) + return messageDTO; + Set keys = data.keySet(); + String pattern = "\\<([^<>]*{}[^<>]*)\\>"; + List contents = new ArrayList<>(); + for (String key : keys) { + contents.add(ReUtil.getGroup1(StrUtil.format(pattern, key), templateContent)); + } + templateContent = CollUtil.join(contents, "#"); + String content = FreemarkerParseFactory + .parseTemplateContent(templateContent, data, true); + messageDTO.setContent(content); + return messageDTO; + } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/bizVo/NuclideAvgVo.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/bizVo/NuclideAvgVo.java index e7effb0b..5f8adbfc 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/bizVo/NuclideAvgVo.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/bizVo/NuclideAvgVo.java @@ -9,4 +9,8 @@ public class NuclideAvgVo extends QueryRequest { private String startDate; private String endDate; + + private String stationId; + + private String sourceType; } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/AnalysesDto.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/AnalysesDto.java index 7e6ba90d..6db94d0b 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/AnalysesDto.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/AnalysesDto.java @@ -5,6 +5,8 @@ import lombok.Data; @Data public class AnalysesDto { + private Integer sampleId; + private String baselinePath; private String lcPath; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/DatabaseDto.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/DatabaseDto.java index 12f12635..896c291c 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/DatabaseDto.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/DatabaseDto.java @@ -1,5 +1,6 @@ package org.jeecg.modules.base.dto; +import cn.hutool.core.util.StrUtil; import lombok.Data; import lombok.experimental.Accessors; @@ -21,21 +22,29 @@ public class DatabaseDto implements Serializable { private boolean online; - private String slowQuery; - private Integer alarms; private boolean alarmRed; - private String cpuUutilzation; + private String dbMemory; // kb - private boolean cpuRed; + private String logRemainingSize; // byte - private String memoryUsage; + private String dbSize; // byte - private boolean memoryRed; + public void setDbMemory(String dbMemory) { + if (StrUtil.isNotBlank(dbMemory)) + this.dbMemory = dbMemory + "GB"; + } - private String diskUsage; + public void setLogRemainingSize(String logRemainingSize) { + if (StrUtil.isNotBlank(logRemainingSize)) + this.logRemainingSize = logRemainingSize + "MB"; - private boolean diskRed; + } + + public void setDbSize(String dbSize) { + if (StrUtil.isNotBlank(dbSize)) + this.dbSize = dbSize + "GB"; + } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameValue.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameValue.java index a72ec1c1..d243ed8f 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameValue.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NameValue.java @@ -15,17 +15,10 @@ public class NameValue implements Serializable { private Boolean value; - private String valueT; - private Integer usage; // 单位 MB public NameValue(String name, Boolean value) { this.name = name; this.value = value; } - - public NameValue(String name, String valueT) { - this.name = name; - this.valueT = valueT; - } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideAvgDto.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideAvgDto.java index 9139aa95..5bb144a7 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideAvgDto.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideAvgDto.java @@ -10,6 +10,10 @@ import java.time.LocalDate; @Data public class NuclideAvgDto implements Serializable { + private String stationId; + + private String stationCode; + /** 核素名称 */ private String nuclide; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideInfo.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideInfo.java index 77a23fac..cac153bc 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideInfo.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/NuclideInfo.java @@ -3,8 +3,12 @@ package org.jeecg.modules.base.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import org.jeecg.common.util.NumUtil; + import java.io.Serializable; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; @Data @JsonIgnoreProperties(ignoreUnknown = true) @@ -17,4 +21,8 @@ public class NuclideInfo implements Serializable { private String datasource; private String value; + + public void keepSix(){ + this.value = NumUtil.keepStr(this.value, 6); + } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/ServerDto.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/ServerDto.java index f4ff9a1e..2c3a495a 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/ServerDto.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/dto/ServerDto.java @@ -33,13 +33,13 @@ public class ServerDto implements Serializable { private boolean memoryRed; - private String diskUsage; + private String memoryFree; - private boolean diskRed; + private boolean memoryFreeRed; public ServerDto() { this.cpuUutilzation = "--"; this.memoryUsage = "--"; - this.diskUsage = "--"; + this.memoryFree = "--"; } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/configuration/GardsStations.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/configuration/GardsStations.java index fea65b6f..1787c66a 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/configuration/GardsStations.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/configuration/GardsStations.java @@ -98,4 +98,7 @@ public class GardsStations implements Serializable { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date moddate; + @TableField(value = "CATEGORY") + private Integer category; + } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/postgre/AlarmAnalysisNuclideAvg.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/postgre/AlarmAnalysisNuclideAvg.java index b71f9d3d..6e212b10 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/postgre/AlarmAnalysisNuclideAvg.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/postgre/AlarmAnalysisNuclideAvg.java @@ -19,6 +19,14 @@ public class AlarmAnalysisNuclideAvg extends JeecgEntity { this.val = val; } + public AlarmAnalysisNuclideAvg(String stationId ,String nuclide, String val) { + this.stationId = stationId; + this.nuclide = nuclide; + this.val = val; + } + + private String stationId; + /** 核素名称 */ private String nuclide; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DSType.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DSType.java index 25ac6382..de9f309d 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DSType.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DSType.java @@ -1,10 +1,14 @@ package org.jeecg.modules.base.enums; +import cn.hutool.core.util.StrUtil; +import lombok.Getter; + /** * @author nieziyan * 数据源类型 */ +@Getter public enum DSType { /* ARMD自动处理库 */ ARMDARR("1"), @@ -15,13 +19,17 @@ public enum DSType { /* IDC人工交互库 */ IDCRRR("4"); - DSType(java.lang.String type) { + DSType(String type) { this.type = type; } - private String type; + private final String type; - public String getType() { - return type; + public static String typeOf(String type){ + for (DSType dsType : DSType.values()) { + if (StrUtil.equals(type, dsType.getType())) + return dsType.name(); + } + return null; } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/Item.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/Item.java index c82afb12..32214f11 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/Item.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/Item.java @@ -7,8 +7,8 @@ import lombok.Getter; @Getter @AllArgsConstructor public enum Item { - EMAIL_CONN("1", "邮箱服务连接情况"), - DATABASE_CONN("2", "数据源连接情况"); + EMAIL_CONN("1", "Connection Status"), + TABLESPACE_USAGE("2", "TableSpace Usage"); private String value; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/StationType.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/StationType.java new file mode 100644 index 00000000..101941aa --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/StationType.java @@ -0,0 +1,11 @@ +package org.jeecg.modules.base.enums; + +import cn.hutool.core.util.StrUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +public enum StationType { + BETA, GAMMA, NULL +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/PHDFile.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/PHDFile.java index 4a969257..bb637270 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/PHDFile.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/PHDFile.java @@ -16,6 +16,10 @@ public class PHDFile implements Serializable { private String tmpFilePath; + private String analyMessage; + + private boolean analyFlag; + private boolean isValid; // 是否有效谱 private boolean bAnalyed; // 记录是否被分析 @@ -175,10 +179,14 @@ public class PHDFile implements Serializable { */ private Integer efficiencyCurRow; + private Map phdNuclideMap; + public PHDFile() { userId = ""; xmlFilePath = ""; tmpFilePath = ""; + analyMessage = ""; + analyFlag = true; bAnalyed = false; isValid = true; analy_start_time = ""; @@ -243,6 +251,7 @@ public class PHDFile implements Serializable { efficiencyEnergy = new LinkedList<>(); efficiencyParam = new LinkedList<>(); efficiencyCurRow = 0; + phdNuclideMap = new HashMap<>(); } } diff --git a/jeecg-module-abnormal-alarm/pom.xml b/jeecg-module-abnormal-alarm/pom.xml index c093296d..af014153 100644 --- a/jeecg-module-abnormal-alarm/pom.xml +++ b/jeecg-module-abnormal-alarm/pom.xml @@ -41,15 +41,15 @@ com.netease.qiye open-common 1.0 - system - ${project.basedir}/lib/open-common-1.0-SNAPSHOT.jar + com.netease.qiye open-sdk 1.0 - system - ${project.basedir}/lib/open-sdk-20211201132528.jar + diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/aspect/StatusAspect.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/aspect/StatusAspect.java index 0badcbbe..3ed96397 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/aspect/StatusAspect.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/aspect/StatusAspect.java @@ -2,6 +2,7 @@ package org.jeecg.modules.aspect; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; @@ -91,6 +92,7 @@ public class StatusAspect { /* * 新增|修改数据源信息后 异步更新其状态信息 + * 更新数据源的状态(1:正常 2:离线 3:告警)和它对应的系统监控的HostId * */ @Async @AfterReturning("execution(* org.jeecg.modules.service.impl.SysDatabaseServiceImpl.update(..)) || " + @@ -98,25 +100,52 @@ public class StatusAspect { public void updateDatabaseStatus(JoinPoint point){ Object[] args = point.getArgs(); if (ArrayUtil.length(args) == 0) return; + String key = RedisConstant.DATABASE_STATUS; + Boolean online = null; SysDatabase database = (SysDatabase) args[0]; + String id = database.getId(); + String name = database.getName(); try { - databaseService.status2Redis(database); String token = ManageUtil.getToken(); - Page hostPage = monitorAlarm.dbList(null, 1, 99, token).getResult(); - if (ObjectUtil.isNull(hostPage) || CollUtil.isEmpty(hostPage.getRecords())) + Page hostPage = monitorAlarm.dbList(MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult(); + if (ObjectUtil.isNull(hostPage) || CollUtil.isEmpty(hostPage.getRecords())) { + redisUtil.hset(key, id, new NameValue(name, online)); return; + } List hosts = hostPage.getRecords(); - String name = database.getName(); Host host = null; for (Host oneHost : hosts) { if (StrUtil.equals(name, oneHost.getCode())) host = oneHost; } - if (ObjectUtil.isNull(host)) + if (ObjectUtil.isNull(host)) { + redisUtil.hset(key, id, new NameValue(name, online)); return; + } + // 更新该数据源状态信息 + String status = host.getStatus(); + online = CollUtil.contains(ListUtil.toList(ServerStatus.ON.getValue(), + ServerStatus.WARN.getValue()), status); + redisUtil.hset(key, id, new NameValue(name, online)); // 更新数据源的HostId database.setHostId(host.getHostId()); databaseService.updateById(database); + // 同步数据库监控项 + Map itemMap = host.getItems(); + if (MapUtil.isEmpty(itemMap) || CollUtil.isEmpty(itemMap.values())) + return; + Collection items = itemMap.values(); + List alarmItems = new ArrayList<>(); + // 只保留六个有效的监控项 + List itemNames = ListUtil.toList("dbMemory", "logRemainingSize", "latency", + "login", "dbSize", "dblSize", "connections"); + for (Item item : items) { + if (!itemNames.contains(item.getName())) continue; + AlarmItem alarmItem = BeanUtil.copyProperties(item, AlarmItem.class); + alarmItem.setId(item.getItemId()); + alarmItems.add(alarmItem); + } + alarmItemService.saveOrUpdateBatch(alarmItems); }catch (FeignException.Unauthorized e){ ManageUtil.refreshToken(); log.warn("向运管系统查询Hosts信息异常: Token失效,已刷新Token"); @@ -127,7 +156,7 @@ public class StatusAspect { /* * 新增|修改服务器信息后 异步更新其状态信息 - * 更新服务器的状态(-1:未知 1:正常 2:离线 3:告警)和它对应的系统监控的HostId + * 更新服务器的状态(1:正常 2:离线 3:告警)和它对应的系统监控的HostId * */ @Async @AfterReturning("execution(* org.jeecg.modules.service.impl.SysServerServiceImpl.update(..)) || " + @@ -136,32 +165,32 @@ public class StatusAspect { Object[] args = point.getArgs(); if (ArrayUtil.length(args) == 0) return; String key = RedisConstant.SERVER_STATUS; - String status = ServerStatus.OFF.getValue(); + Boolean online = null; SysServer server = (SysServer) args[0]; String id = server.getId(); String name = server.getName(); - String ipAddress = server.getIpAddress(); try { String token = ManageUtil.getToken(); - Page hostPage = monitorAlarm.listApp(ipAddress, MonitorConstant.SERVER_APP, - MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult(); + Page hostPage = monitorAlarm.listApp(name, MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult(); if (ObjectUtil.isNull(hostPage) || CollUtil.isEmpty(hostPage.getRecords())){ - redisUtil.hset(key, id, new NameValue(name, status)); + redisUtil.hset(key, id, new NameValue(name, online)); return; } List hosts = hostPage.getRecords(); Host host = null; for (Host oneHost : hosts) { - if (StrUtil.equals(ipAddress, oneHost.getCode())) + if (StrUtil.equals(name, oneHost.getCode())) host = oneHost; } if (ObjectUtil.isNull(host)){ - redisUtil.hset(key, id, new NameValue(name, status)); + redisUtil.hset(key, id, new NameValue(name, online)); return; } // 更新该服务器状态信息 - status = host.getStatus(); - redisUtil.hset(key, id, new NameValue(name, status)); + String status = host.getStatus(); + online = CollUtil.contains(ListUtil.toList(ServerStatus.ON.getValue(), + ServerStatus.WARN.getValue()), status); + redisUtil.hset(key, id, new NameValue(name, online)); // 更新该服务器的HostId server.setHostId(host.getHostId()); serverService.updateById(server); @@ -194,7 +223,8 @@ public class StatusAspect { if (ObjectUtil.isNotNull(result)){ String hostId = ((Result) result).getResult(); // 删除服务器相关联的监控项 - alarmItemService.deleteByHostId(hostId); + if (StrUtil.isNotBlank(hostId)) + alarmItemService.deleteByHostId(hostId); } // 删除服务器相关联的报警规则 Object[] args = point.getArgs(); @@ -206,8 +236,14 @@ public class StatusAspect { * 删除Database时 同步删除关联的报警规则 * */ @Async - @AfterReturning("execution(* org.jeecg.modules.service.impl.SysDatabaseServiceImpl.deleteById(..))") - public void databaseDelete(JoinPoint point){ + @AfterReturning(value = "execution(* org.jeecg.modules.service.impl.SysDatabaseServiceImpl.deleteById(..))", returning = "result") + public void databaseDelete(JoinPoint point, Object result){ + if (ObjectUtil.isNotNull(result)){ + String hostId = ((Result) result).getResult(); + // 删除服务器相关联的监控项 + if (StrUtil.isNotBlank(hostId)) + alarmItemService.deleteByHostId(hostId); + } // 删除数据库相关联的报警规则 Object[] args = point.getArgs(); if (ArrayUtil.length(args) > 0) diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisLogController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisLogController.java index 167d02e8..08d9352a 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisLogController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisLogController.java @@ -22,6 +22,12 @@ public class AlarmAnalysisLogController extends JeecgController findPageApp(@RequestBody AnalysisLogVo analysisLogVo) { + return service.findPage(analysisLogVo); + } + @ApiOperation(value="添加报警日志", notes="添加报警日志") @PostMapping(value = "add") public Result add(@RequestBody AlarmAnalysisLog alarmAnalysisLog) { diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisNuclideAvgController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisNuclideAvgController.java index 50dfa0ff..35750e6e 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisNuclideAvgController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisNuclideAvgController.java @@ -19,7 +19,7 @@ public class AlarmAnalysisNuclideAvgController extends JeecgController findPage(NuclideAvgVo nuclideAvgVo){ Page result = service.findPage(nuclideAvgVo); return Result.OK(result); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisNuclideParamController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisNuclideParamController.java index 0bfb63a6..f70406c0 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisNuclideParamController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmAnalysisNuclideParamController.java @@ -18,12 +18,6 @@ import io.swagger.annotations.Api; @RequestMapping("nuclideParam") public class AlarmAnalysisNuclideParamController extends JeecgController { - @GetMapping("refresh") - @ApiOperation(value = "定时刷新核素计算参数信息",notes = "定时刷新核素计算参数信息") - public boolean refreshParam(){ - return service.refresh(); - } - @GetMapping("findInfo") @ApiOperation(value = "回显核素计算参数信息",notes = "回显核素计算参数信息") public Result findInfo(){ diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmItemController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmItemController.java index 1ed9e715..2ba2bfcb 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmItemController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmItemController.java @@ -6,7 +6,6 @@ import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.modules.base.entity.postgre.AlarmItem; import org.jeecg.modules.service.IAlarmItemService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -24,7 +23,7 @@ public class AlarmItemController extends JeecgController alarmItems(@RequestParam String sourceId){ - List alarmItems = service.alarmItems(sourceId); + List alarmItems = service.alarmItemsServer(sourceId); Map itemIds = alarmItems.stream() .collect(Collectors.toMap(AlarmItem::getName, AlarmItem::getId)); return Result.OK(itemIds); diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmLogController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmLogController.java index 8fd27499..11608018 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmLogController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/AlarmLogController.java @@ -34,6 +34,13 @@ public class AlarmLogController { public Result findPage(@RequestBody AlarmVo alarmVo){ return alarmLogService.findPage(alarmVo); } + + @ApiOperation("分页查询报警日志信息") + @PostMapping("findPageApp") + public Result findPageApp(@RequestBody AlarmVo alarmVo){ + return alarmLogService.findPage(alarmVo); + } + @ApiOperation("各类型报警量统计-饼图") @PostMapping("typeAlarms") public Result typeAlarms(@RequestBody AlarmVo alarmVo){ diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/CalculateConcController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/CalculateConcController.java index 19462428..0c6cafba 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/CalculateConcController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/CalculateConcController.java @@ -19,8 +19,8 @@ public class CalculateConcController { @GetMapping("caclAndSave") @ApiOperation(value = "计算并保存核素浓度",notes = "计算并保存核素浓度") - public boolean caclAndSave(){ - return calculateConcService.calcAndSave(); + public void caclAndSave(){ + calculateConcService.calcAndSave(); } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysDatabaseController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysDatabaseController.java index a56b70a4..1436a561 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysDatabaseController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysDatabaseController.java @@ -27,6 +27,12 @@ public class SysDatabaseController { return sysDatabaseService.findPage(query); } + @PostMapping("findPageApp") + @ApiOperation(value = "分页查询数据库配置信息", notes = "分页查询数据库配置信息") + public Result findPageApp(@RequestBody QueryRequest query){ + return sysDatabaseService.findPage(query); + } + @GetMapping("findInfo") @ApiOperation(value = "查询数据库配置信息详情", notes = "查询数据库配置信息详情") public Result findInfo(String id){ diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailController.java index f717b337..b8e229ef 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysEmailController.java @@ -27,6 +27,12 @@ public class SysEmailController { return sysEmailService.findPage(query); } + @PostMapping("findPageApp") + @ApiOperation(value = "分页查询邮箱配置信息", notes = "分页查询邮箱配置信息") + public Result findPageApp(@RequestBody QueryRequest query){ + return sysEmailService.findPage(query); + } + @GetMapping("findInfo") @ApiOperation(value = "查询邮箱配置信息详情", notes = "查询邮箱配置信息详情") public Result findInfo(String id){ diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysServerController.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysServerController.java index 622e229b..3aaff75d 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysServerController.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/controller/SysServerController.java @@ -28,6 +28,12 @@ public class SysServerController { return sysServerService.findPage(query); } + @PostMapping("findPageApp") + @ApiOperation(value = "分页查询服务器数据", notes = "分页查询服务器数据") + public Result findPageApp(@RequestBody QueryRequest query){ + return sysServerService.findPage(query); + } + @GetMapping("findInfo") @ApiOperation(value = "服务器数据详情信息", notes = "服务器数据详情信息") public Result findInfo(@RequestParam String id){ diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/MonitorAlarm.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/MonitorAlarm.java index 3fea1903..f9906ba3 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/MonitorAlarm.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/feignclient/MonitorAlarm.java @@ -24,25 +24,16 @@ public interface MonitorAlarm { // --------------------后端专用------------------- @GetMapping("/omms/device/monitor/list") // 获取所有 服务器/数据库服务 信息 - Result> listApp(@RequestParam("type") String type, - @RequestParam("pageNo") Integer pageNo, + Result> listApp(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestHeader("X-Access-Token") String token); @GetMapping("/omms/device/monitor/list") // 获取所有 服务器/数据库服务 信息 Result> listApp(@RequestParam("code") String code, - @RequestParam("type") String type, @RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestHeader("X-Access-Token") String token); - @GetMapping("/omms/device/monitor/list") // 获取所有在线 服务器/数据库服务 信息 - Result> listOnApp(@RequestParam("status") String status, - @RequestParam("type") String type, - @RequestParam("pageNo") Integer pageNo, - @RequestParam("pageSize") Integer pageSize, - @RequestHeader("X-Access-Token") String token); - @GetMapping("/omms/device/monitor/queryHostDetails") // 获取服务器摘要信息 Result summary(@RequestParam("hostId") String hostId, @RequestParam("pageName") String pageName, @@ -116,8 +107,7 @@ public interface MonitorAlarm { @RequestHeader("X-Access-Token") String token); @GetMapping("/omms/monitor/db/list") - Result> dbList(@RequestParam("code") String code, - @RequestParam("pageNo") Integer pageNo, + Result> dbList(@RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize, @RequestHeader("X-Access-Token") String token); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/AlarmItemMapper.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/AlarmItemMapper.java index a5bc6da5..1a53d592 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/AlarmItemMapper.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/AlarmItemMapper.java @@ -7,5 +7,7 @@ import java.util.List; public interface AlarmItemMapper extends BaseMapper { - List alarmItems(String sourceId); + List alarmItemsServer(String sourceId); + + List alarmItemsDatabase(String sourceId); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmAnalysisNuclideAvgMapper.xml b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmAnalysisNuclideAvgMapper.xml index cc9db717..0e604a4b 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmAnalysisNuclideAvgMapper.xml +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmAnalysisNuclideAvgMapper.xml @@ -4,6 +4,7 @@ \ No newline at end of file diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmItemMapper.xml b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmItemMapper.xml index 03eb4e23..2a35ffac 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmItemMapper.xml +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/AlarmItemMapper.xml @@ -9,4 +9,13 @@ INNER JOIN sys_server s ON i.host_id = s.host_id WHERE s.ID = #{sourceId} + + \ No newline at end of file diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsNuclIdedAutoMapper.xml b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsNuclIdedAutoMapper.xml index 122a0929..744b8b74 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsNuclIdedAutoMapper.xml +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsNuclIdedAutoMapper.xml @@ -13,6 +13,8 @@ ana.ANALYSISBEGIN BETWEEN to_date(#{startDate},'yyyy-mm-dd hh24:mi:ss') AND to_date(#{endDate},'yyyy-mm-dd hh24:mi:ss') + AND samp.DATA_TYPE = 'S' AND samp.STATUS IN ('P', 'R') + AND samp.STATION_ID = #{stationId} AND nucl.NUCLIDENAME IN diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsNuclIdedManMapper.xml b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsNuclIdedManMapper.xml index 991fb628..4433c6fa 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsNuclIdedManMapper.xml +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsNuclIdedManMapper.xml @@ -13,6 +13,8 @@ ana.ANALYSISBEGIN BETWEEN to_date(#{startDate},'yyyy-mm-dd hh24:mi:ss') AND to_date(#{endDate},'yyyy-mm-dd hh24:mi:ss') + AND samp.DATA_TYPE = 'S' AND samp.STATUS IN ('P', 'R') + AND samp.STATION_ID = #{stationId} AND nucl.NUCLIDENAME IN diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsXeResultsAutoMapper.xml b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsXeResultsAutoMapper.xml index baf156e6..c47b0f55 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsXeResultsAutoMapper.xml +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsXeResultsAutoMapper.xml @@ -14,6 +14,8 @@ ana.ANALYSISBEGIN BETWEEN to_date(#{startDate},'yyyy-mm-dd hh24:mi:ss') AND to_date(#{endDate},'yyyy-mm-dd hh24:mi:ss') + AND samp.DATA_TYPE = 'S' AND samp.STATUS IN ('P', 'R') + AND samp.STATION_ID = #{stationId} AND xe.NUCLIDE_NAME IN diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsXeResultsManMapper.xml b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsXeResultsManMapper.xml index f0df833f..9d36d7dd 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsXeResultsManMapper.xml +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/mapper/xml/GardsXeResultsManMapper.xml @@ -13,6 +13,8 @@ ana.ANALYSISBEGIN BETWEEN to_date(#{startDate},'yyyy-mm-dd hh24:mi:ss') AND to_date(#{endDate},'yyyy-mm-dd hh24:mi:ss') + AND samp.DATA_TYPE = 'S' AND samp.STATUS IN ('P', 'R') + AND samp.STATION_ID = #{stationId} AND xe.NUCLIDE_NAME IN diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java index 1165b97e..576588e2 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/redisStream/AnalysisConsumer.java @@ -5,8 +5,10 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.text.StrBuilder; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import lombok.Data; import lombok.NoArgsConstructor; @@ -16,14 +18,17 @@ import org.jeecg.common.config.mqtoken.UserTokenContext; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.constant.enums.SampleType; +import org.jeecg.common.util.DataTool; import org.jeecg.common.util.RedisStreamUtil; import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.common.util.TemplateUtil; import org.jeecg.modules.base.dto.NuclideInfo; import org.jeecg.modules.base.dto.Info; import org.jeecg.modules.base.entity.postgre.AlarmAnalysisLog; import org.jeecg.modules.base.entity.postgre.AlarmAnalysisNuclideAvg; import org.jeecg.modules.base.entity.postgre.AlarmAnalysisRule; import org.jeecg.modules.base.enums.Condition; +import org.jeecg.modules.base.enums.DSType; import org.jeecg.modules.feignclient.SystemClient; import org.jeecg.modules.service.AnalysisResultService; import org.jeecg.modules.service.IAlarmAnalysisLogService; @@ -36,9 +41,13 @@ import org.springframework.stereotype.Component; import static org.jeecg.common.constant.enums.MessageTypeEnum.*; import static org.jeecg.common.util.TokenUtils.getTempToken; +import static org.jeecg.modules.base.enums.Template.ANALYSIS_NUCLIDE; +import static org.jeecg.modules.base.enums.Template.MONITOR_EMAIL; import java.math.BigDecimal; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; @Data @@ -143,68 +152,61 @@ public class AnalysisConsumer implements StreamListener nuclidesCross){ Set nuclideNames = nuclidesCross.keySet(); - StringBuilder alarmInfo = new StringBuilder(); - List firstDetected; - List moreThanAvg = new ArrayList<>(); String conditionStr = info.getConditions(); String betaOrGamma = info.getBetaOrGamma(); String datasource = info.getDatasource(); List conditions = ListUtil.toList(conditionStr.split(COMMA)); + List firstDetected = new ArrayList<>(); // 首次发现 + List moreThanAvg = new ArrayList<>(); // 超浓度均值 + List meanwhile = new ArrayList<>(); // 同时出现两种及以上核素 for (String con : conditions) { Condition condition = Condition.valueOf1(con); if (ObjectUtil.isNotNull(condition)){ switch (condition){ case FIRST_FOUND: // 首次发现该元素 - firstDetected = firstDetected(betaOrGamma,datasource,nuclideNames); - if (CollUtil.isNotEmpty(firstDetected)){ - String message = "First discovery of nuclides: [" + StrUtil.join(COMMA,firstDetected) + "]"; - alarmInfo.append(message); - } + firstDetected = firstDetected(betaOrGamma, datasource, nuclideNames); break; case ABOVE_AVERAGE: // 元素浓度高于均值 moreThanAvg = moreThanAvg(datasource,nuclidesCross); - if (CollUtil.isNotEmpty(moreThanAvg)){ - for (NuclideInfo nuclideInfo : moreThanAvg) { - String nuclide = nuclideInfo.getNuclide(); - String threshold = nuclideInfo.getThreshold(); - String message = "Nuclide " + nuclide + "is above average: " + threshold; - alarmInfo.append(COMMA).append(message); - } - } break; case MEANWHILE: // 同时出现两种及以上核素 - if (nuclideNames.size() >= 2){ - String message = "Simultaneously detecting nuclides: [" + StrUtil.join(COMMA,nuclideNames) + "]"; - alarmInfo.append(COMMA).append(message); - } + if (CollUtil.isNotEmpty(nuclideNames) && nuclideNames.size() >= 2) + meanwhile.addAll(nuclideNames); break; default: break; } } } - if (StrUtil.isNotBlank(alarmInfo.toString())){ - // 保存报警日志 - AlarmAnalysisLog logInfo = new AlarmAnalysisLog(); - BeanUtil.copyProperties(info,logInfo); - SampleType sampleType = SampleType.typeOf(betaOrGamma); - if (ObjectUtil.isNotNull(sampleType)) - logInfo.setSampleType(sampleType.getValue()); - if (alarmInfo.toString().startsWith(COMMA)) - alarmInfo = new StringBuilder(StrUtil.sub(alarmInfo.toString(), 1, alarmInfo.length())); - logInfo.setAlarmInfo(alarmInfo.toString()); - if (CollUtil.isNotEmpty(moreThanAvg)) - logInfo.setNuclideInfoList(moreThanAvg); - logService.saveLog(logInfo); - // 发送报警信息 - String groupId = info.getGroupId(); - MessageDTO messageDTO = new MessageDTO(); - messageDTO.setTitle("Nuclied Warn Info").setContent(alarmInfo.toString()); - if (StrUtil.isNotBlank(groupId)) { - systemClient.sendMessage(messageDTO, groupId, ALL.getValue()); - systemClient.pushMessageToSingle(messageDTO, groupId); - } + // 构建预警信息 + DataTool dataTool = DataTool.getInstance(); + if (CollUtil.isNotEmpty(firstDetected)) + dataTool.put("firstDetected", CollUtil.join(firstDetected, StrUtil.COMMA + StrUtil.SPACE)); + if (CollUtil.isNotEmpty(moreThanAvg)){ + String above = moreThanAvg.stream() + .map(item -> item.getNuclide() + "(" + item.getValue() + ")" + " > " + item.getThreshold()) + .collect(Collectors.joining(StrUtil.COMMA + StrUtil.SPACE)); + dataTool.put("moreThanAvg", above); } + if (CollUtil.isNotEmpty(meanwhile)) + dataTool.put("meanwhile", CollUtil.join(meanwhile, StrUtil.COMMA + StrUtil.SPACE)); + // 如果报警数据为空 则不需要发送报警信息和生成报警日志 + if (MapUtil.isEmpty(dataTool.get())) return; + MessageDTO messageDTO = TemplateUtil.parse1(ANALYSIS_NUCLIDE.getCode(), dataTool.get()); + // 保存报警日志 + AlarmAnalysisLog logInfo = new AlarmAnalysisLog(); + BeanUtil.copyProperties(info, logInfo); + SampleType sampleType = SampleType.typeOf(betaOrGamma); + if (ObjectUtil.isNotNull(sampleType)) + logInfo.setSampleType(sampleType.getValue()); + logInfo.setAlarmInfo(messageDTO.getContent()); + if (CollUtil.isNotEmpty(moreThanAvg)) + logInfo.setNuclideInfoList(moreThanAvg); + logService.saveLog(logInfo); + // 发送报警信息 + String groupId = info.getGroupId(); + systemClient.sendMessage(messageDTO, groupId, ALL.getValue()); + systemClient.pushMessageToSingle(messageDTO, groupId); } /** @@ -246,28 +248,13 @@ public class AnalysisConsumer implements StreamListener calculate(List concDtos, BigDecimal index); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmAnalysisNuclideParamService.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmAnalysisNuclideParamService.java index 6fa0ea9d..d18c539a 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmAnalysisNuclideParamService.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IAlarmAnalysisNuclideParamService.java @@ -7,7 +7,7 @@ public interface IAlarmAnalysisNuclideParamService extends IService { void deleteByHostId(String serverId); - List alarmItems(String sourceId); + List alarmItemsServer(String sourceId); + + List alarmItemsDatabase(String sourceType, String sourceId); List allItems(String sourceType, String sourceId); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IGardsXeResultsAutoService.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IGardsXeResultsAutoService.java index 66c86bee..e66886e2 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IGardsXeResultsAutoService.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IGardsXeResultsAutoService.java @@ -11,7 +11,7 @@ import java.util.Set; public interface IGardsXeResultsAutoService extends IService { - List getConc(Map params); + List getConc(Map params, Set nuclides); List nuclideNames(Set nuclideNames); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IGardsXeResultsManService.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IGardsXeResultsManService.java index 269b42ed..34997d5d 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IGardsXeResultsManService.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/IGardsXeResultsManService.java @@ -11,7 +11,7 @@ import java.util.Set; public interface IGardsXeResultsManService extends IService { - List getConc(Map params); + List getConc(Map params, Set nuclides); List nuclideNames(Set nuclideNames); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysDatabaseService.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysDatabaseService.java index c7f7c905..f6888a80 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysDatabaseService.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/ISysDatabaseService.java @@ -35,7 +35,5 @@ public interface ISysDatabaseService extends IService { void status2Redis(); - void status2Redis(SysDatabase database); - String getNameById(String id); } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisLogServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisLogServiceImpl.java index 4136c840..47f34b54 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisLogServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisLogServiceImpl.java @@ -75,6 +75,7 @@ public class AlarmAnalysisLogServiceImpl extends ServiceImpl nuclideInfos = mapper.readValue(nuclideInfo, new TypeReference>() {}); + nuclideInfos.forEach(NuclideInfo::keepSix); logDto.setNuclideList(nuclideInfos); } catch (JsonProcessingException e) { log.error("NuclideInfo解析异常: {}", e.getMessage()); @@ -170,8 +171,8 @@ public class AlarmAnalysisLogServiceImpl extends ServiceImpl stationGroup = analysisLogs.stream() - .filter(log -> StrUtil.isNotBlank(log.getStationId())) .map(AlarmAnalysisLog::getStationId) + .filter(StrUtil::isNotBlank) .collect(Collectors.groupingBy(stationId -> stationId, Collectors.counting())); Set stationIds = stationGroup.keySet(); Map stationCodesMap = systemClient.stationCodesMap(stationIds); diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideAvgServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideAvgServiceImpl.java index d95ef555..2659c56d 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideAvgServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideAvgServiceImpl.java @@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.jeecg.modules.base.dto.NuclideAvgDto; import org.jeecg.modules.base.entity.postgre.AlarmAnalysisNuclideAvg; import org.jeecg.modules.base.bizVo.NuclideAvgVo; +import org.jeecg.modules.feignclient.SystemClient; import org.jeecg.modules.mapper.AlarmAnalysisNuclideAvgMapper; import org.jeecg.modules.service.IAlarmAnalysisNuclideAvgService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -16,10 +18,14 @@ import java.time.LocalDate; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; @Service public class AlarmAnalysisNuclideAvgServiceImpl extends ServiceImpl implements IAlarmAnalysisNuclideAvgService { + @Autowired + private SystemClient systemClient; + @Override public List list(Set nuclideNames,String dataSourceType) { LocalDate dayAgo = LocalDate.now().minusDays(1); @@ -37,6 +43,10 @@ public class AlarmAnalysisNuclideAvgServiceImpl extends ServiceImpl params = BeanUtil.beanToMap(nuclideAvgVo); Page page = new Page<>(pageNo, pageSize); page = baseMapper.findPage(page, params); - return page; + List nuclideAvgs = page.getRecords(); + List stationIds = nuclideAvgs.stream().map(NuclideAvgDto::getStationId).collect(Collectors.toList()); + Map codeMap = systemClient.stationCodesMap(stationIds); + nuclideAvgs.forEach(item -> item.setStationCode(codeMap.get(item.getStationId()))); + return page.setRecords(nuclideAvgs); } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideParamServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideParamServiceImpl.java index d1e516d7..b1871375 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideParamServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/AlarmAnalysisNuclideParamServiceImpl.java @@ -3,6 +3,7 @@ package org.jeecg.modules.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.base.entity.postgre.AlarmAnalysisNuclideParam; import org.jeecg.modules.mapper.AlarmAnalysisNuclideParamMapper; import org.jeecg.modules.service.IAlarmAnalysisNuclideParamService; @@ -13,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.time.LocalDate; import java.time.ZoneId; +@Slf4j @Service public class AlarmAnalysisNuclideParamServiceImpl extends ServiceImpl implements IAlarmAnalysisNuclideParamService { @@ -24,7 +26,7 @@ public class AlarmAnalysisNuclideParamServiceImpl extends ServiceImpl implements IAlarmItemService { + @Autowired + private ISysDatabaseService databaseService; + @Autowired private IAlarmItemDeService alarmItemDeService; @@ -62,8 +47,21 @@ public class AlarmItemServiceImpl extends ServiceImpl alarmItems(String sourceId) { - return baseMapper.alarmItems(sourceId); + public List alarmItemsServer(String sourceId) { + return baseMapper.alarmItemsServer(sourceId); + } + + @Override + public List alarmItemsDatabase(String sourceType, String sourceId) { + List itemDtos = baseMapper.alarmItemsDatabase(sourceId).stream() + .map(ItemDto::new).collect(Collectors.toList()); + SysDatabase database = databaseService.getById(sourceId); + String dbType = database.getDbType(); + // 如果数据库类型是Oracle 则添加额外的监控项:表空间使用率 + if (StrUtil.equals(dbType, DbType.ORACLE.getType())) + itemDtos.addAll(alarmItemDeService.alarmItemDes(sourceType).stream() + .map(ItemDto::new).collect(Collectors.toList())); + return itemDtos; } /* @@ -77,10 +75,12 @@ public class AlarmItemServiceImpl extends ServiceImpl update(AlarmRule alarmRule) { AlarmRule alarmRuleOld = getById(alarmRule.getId()); - if (ObjectUtil.isNull(alarmRuleOld)){ - return Result.error(Prompt.DATA_NOT_EXITS); - } String ruleId = alarmRuleOld.getId(); + Integer enabled = alarmRuleOld.getEnabled(); // 保存oldRule的sourceType 避免修改了sourceType String sourceTypeOld = alarmRuleOld.getSourceType(); Rule rule = alarmRule.getRule(); @@ -105,10 +103,10 @@ public class AlarmRuleServiceImpl extends ServiceImpl beta; + + private Map stations; + @Override - public boolean calcAndSave() { + public void calcAndSave() { try { String comma = SymbolConstant.COMMA; + // 获取所有生效的报警规则 List analysisRules = analysisRuleService.allAnalysisRule(); - Set nuclideNames = analysisRules.stream() - .map(AlarmAnalysisRule::getNuclides) - .filter(StrUtil::isNotBlank) - .flatMap(nuclides -> ListUtil.toList(nuclides.split(comma)).stream()) - .collect(Collectors.toSet()); + // 对所有报警规则的关注台站和关注核素进行统计 + Map> nuclideMap = new HashMap<>(); // key:台站code value:核素列表 + for (AlarmAnalysisRule analysisRule : analysisRules) { + String stationStr = analysisRule.getStations(); + String nuclideStr = analysisRule.getNuclides(); + // 获取关注台站 + List stations = ListUtil.toList(StrUtil.split(stationStr, comma)); + // 获取关注核素 + Set nuclides = new HashSet<>(ListUtil.toList(StrUtil.split(nuclideStr, comma))); + for (String station : stations) { + if (nuclideMap.containsKey(station)){ + Set partNuclides = new HashSet<>(nuclideMap.get(station)); + partNuclides.addAll(nuclides); + nuclideMap.put(station, partNuclides); + }else { + nuclideMap.put(station, nuclides); + } + } + } + // 核素浓度值查询参数准备 Map params = new HashMap<>(); - params.put("nuclideName",nuclideNames); AlarmAnalysisNuclideParam paramLatest = nuclideParamService.getLatest(); BigDecimal index = paramLatest.getIndex(); Integer days = paramLatest.getDays(); @@ -71,48 +107,82 @@ public class CalculateConcServiceImpl implements CalculateConcService { String endDate = dayAgo.format(formatter); params.put("startDate",startDate + DateConstant.TIME_START); params.put("endDate",endDate + DateConstant.TIME_END); - /* Auto自动处理 */ - // beta-gamma - List xeConcAuto = xeResultsAutoService.getConc(params); - // gamma - List nuclConcAuto = nuclIdedAutoService.getConc(params); - Map autoResult = new HashMap<>(); - autoResult.putAll(calculate(concDto(xeConcAuto), index)); - autoResult.putAll(calculate(nuclConcAuto, index)); - List autoAvgs = autoResult.entrySet().stream() - .map(entry -> new AlarmAnalysisNuclideAvg(entry.getKey(), entry.getValue())) - .collect(Collectors.toList()); - autoAvgs.forEach(item -> item.setDataSourceType(CommonConstant.ARMDARR)); - /* Man人工交互 */ - // beta-gamma - List xeConcMan = xeResultsManService.getConc(params); - // gamma - List nuclConcMan = nuclIdedManService.getConc(params); - Map manResult = new HashMap<>(); - manResult.putAll(calculate(concDto(xeConcMan), index)); - manResult.putAll(calculate(nuclConcMan, index)); - List manAvgs = manResult.entrySet().stream() - .map(entry -> new AlarmAnalysisNuclideAvg(entry.getKey(), entry.getValue())) - .collect(Collectors.toList()); - manAvgs.forEach(item -> item.setDataSourceType(CommonConstant.ARMDRRR)); - manAvgs.addAll(autoAvgs); + List autoAvgs = new ArrayList<>(); // Auto + List manAvgs = new ArrayList<>(); // Man + // 遍历所有台站 计算每个台站的所有核素浓度均值 + init(); + for (Map.Entry> entry : nuclideMap.entrySet()) { + String station = entry.getKey(); + Set nuclides = entry.getValue(); + // 查询指定台站的所有的核素浓度 并计算核素浓度均值 + params.put("stationId", station); + StationType stationType = stationType(station); + List xeConcAuto = new ArrayList<>(); + List xeConcMan = new ArrayList<>(); + List nuclConcAuto = new ArrayList<>(); + List nuclConcMan = new ArrayList<>(); + switch (stationType){ + case BETA: + xeConcAuto = xeResultsAutoService.getConc(params, nuclides); // beta-gamma Auto + xeConcMan = xeResultsManService.getConc(params, nuclides); // beta-gamma Man + break; + case GAMMA: + params.put("nuclideName", nuclides); + nuclConcAuto = nuclIdedAutoService.getConc(params); // gamma Auto + nuclConcMan = nuclIdedManService.getConc(params); // gamma Man + break; + case NULL: + xeConcAuto = xeResultsAutoService.getConc(params, nuclides); // beta-gamma Auto + xeConcMan = xeResultsManService.getConc(params, nuclides); // beta-gamma Man + params.put("nuclideName", nuclides); + nuclConcAuto = nuclIdedAutoService.getConc(params); // gamma Auto + nuclConcMan = nuclIdedManService.getConc(params); // gamma Man + break; + default: + break; + } + // Auto + Map autoResult = new HashMap<>(); + autoResult.putAll(calculate(concDto(xeConcAuto), index)); + autoResult.putAll(calculate(nuclConcAuto, index)); + for (String nuclide : nuclides) { + String val = autoResult.get(nuclide); + AlarmAnalysisNuclideAvg analysisNuclideAvg = new AlarmAnalysisNuclideAvg(station, nuclide, val); + analysisNuclideAvg.setDataSourceType(CommonConstant.ARMDARR); + autoAvgs.add(analysisNuclideAvg); + } + // Man + Map manResult = new HashMap<>(); + manResult.putAll(calculate(concDto(xeConcMan), index)); + manResult.putAll(calculate(nuclConcMan, index)); + for (String nuclide : nuclides) { + String val = manResult.get(nuclide); + AlarmAnalysisNuclideAvg analysisNuclideAvg = new AlarmAnalysisNuclideAvg(station, nuclide, val); + analysisNuclideAvg.setDataSourceType(CommonConstant.ARMDRRR); + manAvgs.add(analysisNuclideAvg); + } + } + // 自动处理和人工交互库的台站核素浓度均值结果合并 + List allAvgs = new ArrayList<>(); + allAvgs.addAll(autoAvgs); + allAvgs.addAll(manAvgs); + + // 计算周期和计算日期 String cycle = startDate + SymbolConstant.WELL_NUMBER + endDate; - manAvgs.forEach(item -> item.setCycle(cycle).setCaclDate(dayAgo)); - + allAvgs.forEach(item -> item.setCycle(cycle).setCaclDate(dayAgo)); + nuclideAvgService.saveBatch(allAvgs); // 记录日志 - log.info(log(manAvgs)); - return nuclideAvgService.saveBatch(manAvgs); - }catch (Throwable e){ - e.printStackTrace(); - log.error("核素浓度计算过程异常: {}", e.getMessage()); - return false; + log.info(log(allAvgs)); + }catch (Exception e){ + log.error("NucliedAvgJob执行异常: {}", e.getMessage()); } } @Override public Map calculate(List concDtos, BigDecimal index) { Map result = new HashMap<>(); + if (CollUtil.isEmpty(concDtos)) return result; // 按照核素名进行分组 Map> concDtoMap = concDtos.stream() .collect(Collectors.groupingBy(ConcDto::getNuclideName)); @@ -144,12 +214,38 @@ public class CalculateConcServiceImpl implements CalculateConcService { } private String log(List nuclideAvgs){ - List nuclideNames = nuclideAvgs.stream() + Set nuclideNames = nuclideAvgs.stream() .map(AlarmAnalysisNuclideAvg::getNuclide) - .collect(Collectors.toList()); + .collect(Collectors.toSet()); String nuclide = CollUtil.join(nuclideNames, ","); - String now = LocalDateTime.now() - .format(DateTimeFormatter.ofPattern(DateConstant.DATE_TIME)); - return "核素 [" + nuclide + "] 进行了浓度均值计算, 计算时间: " + now; + return "核素 [" + nuclide + "] 进行了浓度均值计算"; + } + + private void init(){ + try { + stations = (Map) redisUtil.get("stationInfoMap"); + UserTokenContext.setToken(getTempToken()); + // 获取Beta台站类型字典 + beta = systemClient.getItems(DictConstant.NOBLE_GAS_BETAGAMMA).stream() + .map(DictModel::getValue).collect(Collectors.toList()); + }catch (Exception e){ + log.error("核素浓度均值计算时, 获取台站类型字典异常: {}", e.getMessage()); + }finally { + UserTokenContext.remove(); + } + } + + private StationType stationType(String stationId){ + if (MapUtil.isEmpty(stations)) + return StationType.NULL; + GardsStations station = stations.get(stationId); + if (ObjectUtil.isNull(station) || StrUtil.isBlank(station.getType())) + return StationType.NULL; + if (CollUtil.isEmpty(beta)) + return StationType.NULL; + String stationType = station.getType(); + if (CollUtil.contains(beta, stationType)) + return StationType.BETA; + return StationType.GAMMA; } } diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/GardsXeResultsAutoServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/GardsXeResultsAutoServiceImpl.java index 59d5c5dd..ec1b8314 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/GardsXeResultsAutoServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/GardsXeResultsAutoServiceImpl.java @@ -1,5 +1,8 @@ package org.jeecg.modules.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.jeecg.common.constant.DateConstant; @@ -13,6 +16,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -22,10 +26,28 @@ import java.util.stream.Collectors; @DS("ora") public class GardsXeResultsAutoServiceImpl extends ServiceImpl implements IGardsXeResultsAutoService { - @Override - public List getConc(Map params) { - return baseMapper.getConc(params); + public List getConc(Map params, Set nuclideList) { + Set nuclides = new HashSet<>(); + List M = ListUtil.toList("Xe131M", "Xe133M"); + // XeResults表: 查询条件使用m + for (String nuclide : nuclideList) { + if (CollUtil.contains(M, nuclide)){ + nuclides.add(StrUtil.replace(nuclide, "M","m")); + continue; + } + nuclides.add(nuclide); + } + params.put("nuclideName", nuclides); + List result = baseMapper.getConc(params); + // 将查询结果的m转换为M + List m = ListUtil.toList("Xe131m", "Xe133m"); + for (ConcDtoXe concDtoXe : result) { + String nuclideName = concDtoXe.getNuclideName(); + if (CollUtil.contains(m, nuclideName)) + concDtoXe.setNuclideName(StrUtil.replace(nuclideName, "m","M")); + } + return result; } @Override diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/GardsXeResultsManServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/GardsXeResultsManServiceImpl.java index 4ab3ca7d..6406d07b 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/GardsXeResultsManServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/GardsXeResultsManServiceImpl.java @@ -1,5 +1,8 @@ package org.jeecg.modules.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -13,6 +16,7 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.format.DateTimeFormatter; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -22,10 +26,28 @@ import java.util.stream.Collectors; @DS("ora") public class GardsXeResultsManServiceImpl extends ServiceImpl implements IGardsXeResultsManService { - @Override - public List getConc(Map params) { - return baseMapper.getConc(params); + public List getConc(Map params ,Set nuclideList) { + Set nuclides = new HashSet<>(); + List M = ListUtil.toList("Xe131M", "Xe133M"); + // XeResults表: 查询条件使用m + for (String nuclide : nuclideList) { + if (CollUtil.contains(M, nuclide)){ + nuclides.add(StrUtil.replace(nuclide, "M","m")); + continue; + } + nuclides.add(nuclide); + } + params.put("nuclideName", nuclides); + List result = baseMapper.getConc(params); + // 将查询结果的m转换为M + List m = ListUtil.toList("Xe131m", "Xe133m"); + for (ConcDtoXe concDtoXe : result) { + String nuclideName = concDtoXe.getNuclideName(); + if (CollUtil.contains(m, nuclideName)) + concDtoXe.setNuclideName(StrUtil.replace(nuclideName, "m","M")); + } + return result; } @Override diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysDatabaseServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysDatabaseServiceImpl.java index 1675fee8..d07063d2 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysDatabaseServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysDatabaseServiceImpl.java @@ -2,29 +2,39 @@ package org.jeecg.modules.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import feign.FeignException; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.QueryRequest; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.*; import org.jeecg.common.constant.enums.DbType; import org.jeecg.common.system.vo.DictModel; import org.jeecg.common.util.JDBCUtil; +import org.jeecg.common.util.NumUtil; import org.jeecg.common.util.RedisUtil; -import org.jeecg.common.util.SpringContextUtils; import org.jeecg.modules.base.dto.*; +import org.jeecg.modules.base.entity.monitor.Host; +import org.jeecg.modules.base.entity.monitor.Item; import org.jeecg.modules.base.entity.postgre.SysDatabase; import org.jeecg.modules.base.bizVo.SourceVo; +import org.jeecg.modules.base.entity.postgre.SysServer; +import org.jeecg.modules.base.enums.DbItem; +import org.jeecg.modules.base.enums.ServerStatus; import org.jeecg.modules.entity.AlarmHistory; +import org.jeecg.modules.feignclient.ManageUtil; +import org.jeecg.modules.feignclient.MonitorAlarm; import org.jeecg.modules.feignclient.SystemClient; import org.jeecg.modules.mapper.DBRowMapper; import org.jeecg.modules.mapper.SpaceRowMapper; import org.jeecg.modules.mapper.SysDatabaseMapper; -import org.jeecg.modules.service.IAlarmRuleService; import org.jeecg.modules.service.ISysDatabaseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; @@ -40,7 +50,7 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static org.jeecg.common.constant.enums.DbType.*; - +@Slf4j @Service("sysDatabaseService") public class SysDatabaseServiceImpl extends ServiceImpl implements ISysDatabaseService { @@ -50,6 +60,9 @@ public class SysDatabaseServiceImpl extends ServiceImpl findPage(QueryRequest query) { Integer pageNo = query.getPageNo(); @@ -72,23 +85,59 @@ public class SysDatabaseServiceImpl extends ServiceImpl statusMap = redisUtil.hmget(statusKey); + // 向运管系统查询数据库相关指标信息 + Map dbMap = new HashMap<>(); + try { + String token = ManageUtil.getToken(); + Page dbPage = monitorAlarm.dbList( MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult(); + if (ObjectUtil.isNotNull(dbPage) && CollUtil.isNotEmpty(dbPage.getRecords())) + dbMap = dbPage.getRecords().stream().collect(Collectors.toMap(Host::getName, host -> host)); + }catch (FeignException.Unauthorized e){ + ManageUtil.refreshToken(); + log.warn("向运管系统查询DB信息异常: Token失效,已刷新Token"); + }catch (Exception e){ + log.error("向运管系统查询DB信息异常: {}", e.getMessage()); + } for (DatabaseDto databaseDto : databaseDtos) { boolean online = false; String id = databaseDto.getId(); String type = databaseDto.getType(); + String name = databaseDto.getName(); Integer alarms = databaseDto.getAlarms(); boolean alarmRed = ObjectUtil.isNotNull(alarms) && alarms > 0; NameValue nameValue = (NameValue) statusMap.get(id); if (ObjectUtil.isNotNull(nameValue)){ Boolean value = nameValue.getValue(); - if (ObjectUtil.isNotNull(value)) - online = value; + if (ObjectUtil.isNotNull(value)) online = value; } String dataBaseType = dataSourceMap.get(type); databaseDto.setDataBaseType(dataBaseType) - .setOnline(online).setSlowQuery("328/s") - .setAlarmRed(alarmRed).setCpuUutilzation("35.8%") - .setMemoryUsage("55.8%").setDiskUsage("35.6%"); + .setAlarmRed(alarmRed).setOnline(online); + // 如果数据库不在线 则不需要查询数据库的使用情况 + if (!online) continue; + + // 获取数据库指标信息 + Host db = dbMap.get(name); + if (ObjectUtil.isNull(db)) continue; + Map itemMap = db.getItems(); + if (MapUtil.isEmpty(itemMap)) continue; + // dbMemory kb -> GB + Item item = itemMap.get(DbItem.DBMEMORY.getValue()); + if (ObjectUtil.isNotNull(item)) + databaseDto.setDbMemory(NumUtil.kb2Gb(item.getLastValue(), 2)); + // logRemainingSize byte -> MB + item = itemMap.get(DbItem.LOGREMAININGSIZE.getValue()); + if (ObjectUtil.isNotNull(item)) + databaseDto.setLogRemainingSize(NumUtil.byte2Mb(item.getLastValue(), 2)); + // dbSize byte -> GB + item = itemMap.get(DbItem.DBSIZE.getValue()); + if (ObjectUtil.isNotNull(item)){ + databaseDto.setDbSize(NumUtil.byte2Gb(item.getLastValue(), 2)); + }else { + item = itemMap.get(DbItem.DBLSIZE.getValue()); + if (ObjectUtil.isNotNull(item)) + databaseDto.setDbSize(NumUtil.byte2Gb(item.getLastValue(), 2)); + } } page.setRecords(databaseDtos); return Result.OK(page); @@ -182,10 +231,12 @@ public class SysDatabaseServiceImpl extends ServiceImpl deleteById(String id) { + SysDatabase database = getById(id); boolean success = removeById(id); if(success) { delStatus(id); - return Result.OK(Prompt.DELETE_SUCC); + String hostId = ObjectUtil.isNotNull(database) ? database.getHostId() : null; + return Result.OK(Prompt.DELETE_SUCC, hostId); } return Result.error(Prompt.DELETE_ERR); } @@ -317,24 +368,39 @@ public class SysDatabaseServiceImpl extends ServiceImpl databases = list(); - for (SysDatabase database : databases) { - this.status2Redis(database); + String key = RedisConstant.DATABASE_STATUS; + Map values = new HashMap<>(); + try { + String token = ManageUtil.getToken(); + List hosts = monitorAlarm.dbList(MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult().getRecords(); + Map hostMap = hosts.stream().collect(Collectors.toMap(Host::getHostId, Host -> Host)); + for (SysDatabase database : databases) { + Boolean online = null; + String hostId = database.getHostId(); + String name = database.getName(); + String databaseId = database.getId(); + Host host = hostMap.get(hostId); + // 获取该数据源的状态并保存 + if (ObjectUtil.isNotNull(host)) { + String status = host.getStatus(); + online = CollUtil.contains(ListUtil.toList(ServerStatus.ON.getValue(), + ServerStatus.WARN.getValue()), status); + values.put(databaseId, new NameValue(name, online)); + continue; + } + // 当前数据库不在监控数据库列表 + values.put(databaseId, new NameValue(name, online)); + } + redisUtil.hmset(key, values); + }catch (FeignException.Unauthorized e){ + ManageUtil.refreshToken(); + log.warn("向运管系统查询Hosts信息异常: Token失效,已刷新Token"); + } catch (Exception e){ + defaultStatus(databases); + log.error("向运管系统查询Hosts信息异常: {}", e.getMessage()); } } - @Override - public void status2Redis(SysDatabase database) { - String statusKey = RedisConstant.DATABASE_STATUS; - String id = database.getId(); - String name = database.getName(); - String dbUrl = database.getDbUrl(); - String dbDriver = database.getDbDriver(); - String dbUsername = database.getDbUsername(); - String dbPassword = database.getDbPassword(); - boolean isConn = JDBCUtil.isConnection(dbUrl, dbDriver, dbUsername, dbPassword); - redisUtil.hset(statusKey, id, new NameValue(name, isConn)); - } - @Override public String getNameById(String id) { String key = RedisConstant.DATABASE_STATUS; @@ -410,6 +476,17 @@ public class SysDatabaseServiceImpl extends ServiceImpl sysDatabases){ + String key = RedisConstant.DATABASE_STATUS; + Map values = new HashMap<>(); + for (SysDatabase database: sysDatabases) { + String id = database.getId(); + String name = database.getName(); + values.put(id, new NameValue(name, null)); + } + redisUtil.hmset(key, values); + } + /* * 删除指定id的数据源的状态值 * */ diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysEmailServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysEmailServiceImpl.java index 4ae2c01a..80323c99 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysEmailServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysEmailServiceImpl.java @@ -270,11 +270,15 @@ public class SysEmailServiceImpl extends ServiceImpl i wrapper.eq(SysEmail::getEnabled, ENABLED.getValue()); List emails = this.list(wrapper); Optional first = emails.stream().findFirst(); - if(!first.isPresent()) return null; - SysEmail sender = first.get(); - redisUtil.set(RedisConstant.EMAIL_SENDER, sender); - log.info("缓存了可用的发件邮箱到Redis: {}", sender.getUsername()); - return sender; + if(first.isPresent()) { + SysEmail sender = first.get(); + redisUtil.set(RedisConstant.EMAIL_SENDER, sender); + return sender; + } + // 删除缓存中旧的发件邮箱信息 + if (redisUtil.hasKey(RedisConstant.EMAIL_SENDER)) + redisUtil.del(RedisConstant.EMAIL_SENDER); + return null; } /* diff --git a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysServerServiceImpl.java b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysServerServiceImpl.java index 9670a63c..7705af49 100644 --- a/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysServerServiceImpl.java +++ b/jeecg-module-abnormal-alarm/src/main/java/org/jeecg/modules/service/impl/SysServerServiceImpl.java @@ -2,6 +2,7 @@ package org.jeecg.modules.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; @@ -80,8 +81,7 @@ public class SysServerServiceImpl extends ServiceImpl hosts = new ArrayList<>(); try { String token = ManageUtil.getToken(); - hosts = monitorAlarm.listOnApp(ON.getValue(), MonitorConstant.SERVER_APP, - MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult().getRecords(); + hosts = monitorAlarm.listApp(MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult().getRecords(); }catch (FeignException.Unauthorized e){ ManageUtil.refreshToken(); log.warn("向运管系统查询Hosts信息异常: Token失效,已刷新Token"); @@ -100,32 +100,33 @@ public class SysServerServiceImpl extends ServiceImpl 0); // 设置服务器状态信息 NameValue nameValue = (NameValue) statusMap.get(id); - String status = OFF.getValue(); - if (ObjectUtil.isNotNull(nameValue)){ - String valueT = nameValue.getValueT(); - if (StrUtil.isNotBlank(valueT)) - status = valueT; - } - boolean online = StrUtil.equals(status, ON.getValue()); + Boolean value = null; + if (ObjectUtil.isNotNull(nameValue)) + value = nameValue.getValue(); + boolean online = ObjectUtil.isNotNull(value) && value; + serverDto.setOnline(online); + // 如果机器不在线 则不需要查询机器的硬件使用情况 + if (!online) continue; + // 设置服务器的硬件使用情况信息 Host host = hostMap.get(hostId); - if (ObjectUtil.isNull(host)) - continue; + if (ObjectUtil.isNull(host)) continue; Map items = host.getItems(); // CPU利用率 - Item cpuItem = items.getOrDefault(MonitorConstant.ITEM_CPUUSED, new Item()); - String cpuValue = cpuItem.getLastValue(); - String cpu = StrUtil.isBlank(cpuValue) ? "--" : - NumUtil.keepStr(cpuValue, 1) + "%"; + Item item = items.getOrDefault(MonitorConstant.ITEM_CPUUSED, new Item()); + String cpu = item.getLastValue(); + if (StrUtil.isNotBlank(cpu)) + serverDto.setCpuUutilzation(NumUtil.keepStr(cpu, 1) + "%"); // 内存使用率 - Item memoryItem = items.getOrDefault(MonitorConstant.ITEM_MEMORYUSED, new Item()); - String memoryValue = memoryItem.getLastValue(); - String memory = StrUtil.isBlank(memoryValue) ? "--" : - NumUtil.keepStr(memoryValue, 1) + "%"; - // 磁盘使用率 - - serverDto.setOnline(online).setCpuUutilzation(cpu) - .setMemoryUsage(memory).setDiskUsage("--"); + item = items.getOrDefault(MonitorConstant.ITEM_MEMORYUSED, new Item()); + String memory = item.getLastValue(); + if (StrUtil.isNotBlank(memory)) + serverDto.setMemoryUsage(NumUtil.keepStr(memory, 1) + "%"); + // 内存可用空间 + item = items.getOrDefault(MonitorConstant.ITEM_MEMORYFREESIZE, new Item()); + String memoryFree = item.getLastValue(); + if (StrUtil.isNotBlank(memoryFree)) + serverDto.setMemoryFree(NumUtil.byte2Gb(memoryFree, 2) + "GB"); } page.setRecords(serverDtos); return Result.OK(page); @@ -188,12 +189,11 @@ public class SysServerServiceImpl extends ServiceImpl deleteById(String id) { - String hostId = null; SysServer server = getById(id); boolean success = removeById(id); if(success) { delStatus(id); - hostId = ObjectUtil.isNotNull(server) ? server.getHostId() : hostId; + String hostId = ObjectUtil.isNotNull(server) ? server.getHostId() : null; return Result.OK(Prompt.DELETE_SUCC, hostId); } return Result.error(Prompt.DELETE_ERR); @@ -368,10 +368,10 @@ public class SysServerServiceImpl extends ServiceImpl values = new HashMap<>(); try { String token = ManageUtil.getToken(); - List hosts = monitorAlarm.listApp(MonitorConstant.SERVER_APP, - MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult().getRecords(); + List hosts = monitorAlarm.listApp(MonitorConstant.pageNo, MonitorConstant.pageSize, token).getResult().getRecords(); Map hostMap = hosts.stream().collect(Collectors.toMap(Host::getHostId, Host -> Host)); for (SysServer server : sysServers) { + Boolean online = null; String hostId = server.getHostId(); String name = server.getName(); String serverId = server.getId(); @@ -379,11 +379,13 @@ public class SysServerServiceImpl extends ServiceImpl iterator = emailMap.values().iterator(); - while(iterator.hasNext()){ - EmailProperties next = iterator.next(); - if(next.isDelFlag()){ - if(emailExecThreadMap.containsKey(next.getId())){ + synchronized (lock){ + Iterator iterator = emailMap.values().iterator(); + while(iterator.hasNext()){ + EmailProperties next = iterator.next(); + if (next.isResetFlag()) { EmailParsingActuator actuator = emailExecThreadMap.get(next.getId()); - actuator.setStop(true); - emailExecThreadMap.remove(next.getId()); + actuator.updateEmail(next); + next.setResetFlag(false); + } + if(next.isNewEmailFlag()){ + // 网络正常之后才允许创建新的实例 + final EmailServiceManager emailServiceManager = EmailServiceManager.getInstance(); + emailServiceManager.init(next); + boolean testFlag = emailServiceManager.testConnectEmailServer(); + if(testFlag){ + EmailParsingActuator emailParsingActuator = new EmailParsingActuator(); + emailParsingActuator.init(next,spectrumServiceQuotes,emailCounter,systemStartupTime); + emailParsingActuator.setName(next.getUsername()+"-email-monitor"); + emailParsingActuator.start(); + //把邮件监测执行线程加入管理队列 + emailExecThreadMap.put(next.getId(),emailParsingActuator); + //新邮件监测监测线程已启动则修改新邮件标记为false + next.setNewEmailFlag(false); + } } - iterator.remove(); - } - if (next.isResetFlag()) { - EmailParsingActuator actuator = emailExecThreadMap.get(next.getId()); - actuator.updateEmail(next); - next.setResetFlag(false); - } - if(next.isNewEmailFlag()){ - EmailParsingActuator emailParsingActuator = new EmailParsingActuator(); - emailParsingActuator.init(next,spectrumServiceQuotes,emailCounter,systemStartupTime); - emailParsingActuator.setName(next.getUsername()+"-email-monitor"); - emailParsingActuator.start(); - //把邮件监测执行线程加入管理队列 - emailExecThreadMap.put(next.getId(),emailParsingActuator); - //新邮件监测监测线程已启动则修改新邮件标记为false - next.setNewEmailFlag(false); } } } @@ -133,21 +138,33 @@ public class AutoProcessManager{ long start = System.currentTimeMillis(); try{ if(!CollectionUtils.isEmpty(emailMap)){ - emailMap.values().forEach(email->{ - if(!email.isDelFlag()){ - final EmailServiceManager emailServiceManager = EmailServiceManager.getInstance(); - emailServiceManager.init(email); - boolean testFlag = emailServiceManager.testConnectEmailServer(); - // redisUtil.hset(EmailConstant.EMAIL_STATUS_PREFIX,email.getId(),testFlag); - if(testFlag && !emailExecThreadMap.containsKey(email.getId())){ - email.setNewEmailFlag(true); - } - if(!testFlag){ - //如果邮件服务通信测试失败则添加删除标记 - email.setDelFlag(true); + synchronized (lock){ + //记录连接测试失败的邮箱 + List emails = new ArrayList<>(); + emailMap.values().forEach(email->{ + if(!email.isDelFlag()){ + final EmailServiceManager emailServiceManager = EmailServiceManager.getInstance(); + emailServiceManager.init(email); + boolean testFlag = emailServiceManager.testConnectEmailServer(); + if(!testFlag){ + emails.add(email); + } } + }); + //如果emailIds不为空,说明此次有测试连接失败的邮箱,直接删除 + if(!CollectionUtils.isEmpty(emails)){ + emails.forEach(email->{ + emailMap.remove(email.getId()); + //如果这时邮箱线程里已有执行的线程则设置停止标记 + if(emailExecThreadMap.containsKey(email.getId())){ + EmailParsingActuator actuator = emailExecThreadMap.get(email.getId()); + actuator.setStop(true); + actuator.setStopTime(new Date()); + } + log.info("{}邮箱测试连接失败,emailMap删除此邮箱数据,emailExecThreadMap设置线程停止标记",email.getUsername()); + }); } - }); + } } //捕获异常不处理保障线程异常不退出 }catch (Exception e){ @@ -182,41 +199,48 @@ public class AutoProcessManager{ try{ final List receiveMails = mailService.findReceiveMails(); if(!CollectionUtils.isEmpty(receiveMails)){ - //如果库里已有数据原来已开启使用并且监测Map中已存在,现在关闭使用则添加删除标记 - //如果本次查询数据监测Map中不存在,并且已开启使用的则加入监测Map - for(EmailProperties email : receiveMails){ - //判断map里是否包含邮箱id - final boolean flag = emailMap.containsKey(email.getId()); - //如果包含邮箱id 并且 邮箱处于未启用的状态 将邮箱的删除标识设置为true - if(flag && email.getEnabled().equals(SysMailEnableType.NOT_ENABLE.getMailEnableType())){ - EmailProperties sourceEmail = emailMap.get(email.getId()); - sourceEmail.setDelFlag(true); - } - //如果包含邮箱id 并且 邮箱处于启用状态 将邮箱数据进行更新 - if (flag && email.getEnabled().equals(SysMailEnableType.ENABLE.getMailEnableType())) { - EmailProperties properties = emailMap.get(email.getId()); - //判断邮箱的用户名,密码是否与原邮箱用户名,密码一致 - //如果不一致则进行更新 - if ( !properties.getUsername().equals(email.getUsername()) || !properties.getPassword().equals(email.getPassword()) ) { - email.setResetFlag(true); - putSysEmailMap(email); - log.info("{}邮箱加入监测队列",email.getEmailServerAddress()); + final Iterator iterator = receiveMails.iterator(); + synchronized (lock){ + while(iterator.hasNext()){ + EmailProperties databaseEmail = iterator.next(); + //判断map里存储的邮箱数据是否包含当前数据库邮箱记录的id + if(emailMap.containsKey(databaseEmail.getId())){ + final EmailProperties mapEmail = emailMap.get(databaseEmail.getId()); + //如果数据库里邮箱数据已关闭,则删除 + if(databaseEmail.getEnabled().equals(SysMailEnableType.NOT_ENABLE.getMailEnableType())){ + emailMap.remove(mapEmail.getId()); + //如果这时邮箱线程里已有执行的线程则设置停止标记 + if(emailExecThreadMap.containsKey(databaseEmail.getId())){ + EmailParsingActuator actuator = emailExecThreadMap.get(databaseEmail.getId()); + actuator.setStop(true); + actuator.setStopTime(new Date()); + } + log.info("{}邮箱已关闭服务,emailMap删除此邮箱数据,emailExecThreadMap设置线程停止标记",mapEmail.getUsername()); + }else{ + //判断邮箱的用户名,密码是否与原邮箱用户名,密码一致,如果不一致则进行更新 + if (!mapEmail.getUsername().equals(databaseEmail.getUsername()) || !mapEmail.getPassword().equals(databaseEmail.getPassword()) + || !mapEmail.getEmailServerAddress().equals(databaseEmail.getEmailServerAddress())) { + final boolean testFlag = testConnectEmailServer(databaseEmail); + if(testFlag){ + databaseEmail.setResetFlag(true); + emailMap.put(databaseEmail.getId(),databaseEmail); + log.info("{}邮箱数据已更新,覆盖原邮箱数据,设置重置标记",mapEmail.getUsername()); + } + } + } + }else{ + //如果不包含邮箱id 并且 邮箱处于启用状态 将邮箱对象存入到map中 并将新邮箱标识设置为true + if(databaseEmail.getEnabled().equals(SysMailEnableType.ENABLE.getMailEnableType())){ + final boolean testFlag = testConnectEmailServer(databaseEmail); + if(testFlag){ + databaseEmail.setNewEmailFlag(true); + emailMap.put(databaseEmail.getId(),databaseEmail); + log.info("{}邮箱加入监测队列,设置新增标记",databaseEmail.getUsername()); + } + } } } - //如果不包含邮箱id 并且 邮箱处于启用状态 将邮箱对象存入到map中 并将新邮箱标识设置为true - if(!flag && email.getEnabled().equals(SysMailEnableType.ENABLE.getMailEnableType())){ - email.setNewEmailFlag(true); - putSysEmailMap(email); - log.info("{}邮箱加入监测队列",email.getEmailServerAddress()); - } } - //如果监测Map中存在的邮箱数据,在本次查询数据中不存在说明库里已删除,则添加删除标记 - emailMap.forEach((emailId,sourceEmail)->{ - final long result = receiveMails.stream().filter(email -> emailId.equals(email.getId())).count(); - if (result <= 0){ - sourceEmail.setDelFlag(true); - } - }); } //捕获异常不处理保障线程异常不退出 }catch (Exception e){ @@ -237,38 +261,78 @@ public class AutoProcessManager{ } /** - * 新增邮箱数据 - * @param email + * 监测已设置删除标记的邮箱线程 + * isStop值为true的邮箱线程 + * 20秒还未停止则进行强制停止 */ - private void putSysEmailMap(EmailProperties email){ - synchronized (this.lock){ - emailMap.put(email.getId(),email); - } - } + private class DeletedMailMonitor extends Thread{ - /** - * 删除邮箱数据 - * @param emailId - */ - private void removeSysEmailMap(String emailId){ - synchronized (this.lock){ - if (emailMap.containsKey(emailId)){ - emailMap.remove(emailId); - } - } - } + @Override + public void run() { + for(;;){ + long start = System.currentTimeMillis(); + if(!CollectionUtils.isEmpty(emailExecThreadMap)){ + //遍历邮箱执行线程,如果状态为已停止则删除 + final Iterator> checkStopThreads = emailExecThreadMap.entrySet().iterator(); + while (checkStopThreads.hasNext()){ + final Map.Entry next = checkStopThreads.next(); + if(next.getValue().getState() == State.TERMINATED){ + log.info("{}邮箱执行线程已停止,emailExecThreadMap删除此邮箱数据",next.getValue().getEmailProperties().getUsername()); + checkStopThreads.remove(); + } + } - /** - * 删除邮箱数据 - * @param sysEmailIds - */ - private void removeSysEmailMap(List sysEmailIds){ - synchronized (this.lock){ - for(String sysEmailId : sysEmailIds){ - if (emailMap.containsKey(sysEmailId)){ - emailMap.remove(sysEmailId); + //遍历邮箱执行线程,如果邮箱执行线程stop属性已被设置为true则关闭资源停止线程 + final Iterator> iterator = emailExecThreadMap.entrySet().iterator(); + emailExecThreadMap.forEach((emailId,emailExecThread)->{ + try{ + if(emailExecThread.getState() != State.TERMINATED && emailExecThread.isStop()){ + final long nowTime = System.currentTimeMillis(); + final long setStoptime = emailExecThread.getStopTime().getTime(); + final long val = nowTime - setStoptime; + if(val >= taskProperties.getForceDeletedTime()){ + log.info("关闭{}邮箱线程内部线程池资源",emailExecThread.getEmailProperties().getUsername()); + emailExecThread.closeResource(); + } + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + if(emailExecThread.getState() != State.TERMINATED && emailExecThread.isStop()){ + final long nowTime = System.currentTimeMillis(); + final long setStoptime = emailExecThread.getStopTime().getTime(); + final long val = nowTime - setStoptime; + if(val >= taskProperties.getForceDeletedTime()){ + log.info("强制停止{}邮箱线程",emailExecThread.getEmailProperties().getUsername()); + emailExecThread.stop(); + } + } + } + }); + } + long end = System.currentTimeMillis(); + long sleepTime = taskProperties.getDeletedMailThreadExecCycle() - (end-start); + //如果sleepTime > 0 需要睡眠到指定时间,否则继续下次监测 + if(sleepTime > 0){ + try { + TimeUnit.MILLISECONDS.sleep(sleepTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } } } } } + + /** + * 测试邮箱连通性 + * @param email + * @return + */ + private boolean testConnectEmailServer(EmailProperties email){ + final EmailServiceManager emailServiceManager = EmailServiceManager.getInstance(); + emailServiceManager.init(email); + boolean testFlag = emailServiceManager.testConnectEmailServer(); + return testFlag; + } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java index 00351894..8abbeb06 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/EmailParsingActuator.java @@ -1,10 +1,13 @@ package org.jeecg.modules; +import lombok.Getter; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ArrayUtils; import org.jeecg.common.email.EmailLogManager; import org.jeecg.common.email.EmailServiceManager; import org.jeecg.common.properties.TaskProperties; +import org.jeecg.common.util.DateUtils; import org.jeecg.modules.email.EmailProperties; import org.jeecg.modules.spectrum.EmailCounter; import org.jeecg.modules.spectrum.SpectrumLogManager; @@ -17,21 +20,26 @@ import javax.mail.internet.MimeMessage; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.concurrent.*; /** * 邮件解析执行器 */ +@Slf4j public class EmailParsingActuator extends Thread{ private TaskProperties taskProperties; + @Getter private EmailProperties emailProperties; private ThreadPoolExecutor poolExecutor; private SpectrumServiceQuotes spectrumServiceQuotes; private EmailCounter emailCounter; private Date systemStartupTime; - @Setter + @Setter @Getter private boolean isStop; + @Setter @Getter + private Date stopTime; public void init(EmailProperties emailProperties,SpectrumServiceQuotes spectrumServiceQuotes, EmailCounter emailCounter,Date systemStartupTime){ @@ -58,7 +66,9 @@ public class EmailParsingActuator extends Thread{ public void run() { for(;;){ if (isStop) { - System.out.println("EmailParsingActuator is Stop!"); + String nowDate = DateUtils.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"); + log.info(nowDate + " " +this.emailProperties.getName()+" EmailParsingActuator is Stop!"); + closeResource(); return; } long start = System.currentTimeMillis(); @@ -69,27 +79,33 @@ public class EmailParsingActuator extends Thread{ try { Message[] messages = emailServiceManager.receiveMail(); if(ArrayUtils.isNotEmpty(messages)){ + log.info("EmailParsingActuator本次获取邮件数量为:{}",messages.length); //检验获取的邮件是否在之前删除失败列表中,若在直接调用邮件API删除,并且此次数组里元素也删除 - for(int i=messages.length-1;i>=0;i--){ - if (!messages[i].isExpunged()){ - String messageId = ((MimeMessage) messages[i]).getMessageID(); - final boolean exist = emailServiceManager.check(messages[i],messageId); - messageIds.add(messageId); - if(exist){ - messages = ArrayUtils.remove(messages,i); - } +// for(int i=messages.length-1;i>=0;i--){ +// if (!messages[i].isExpunged()){ +// String messageId = ((MimeMessage) messages[i]).getMessageID(); +// final boolean exist = emailServiceManager.check(messages[i],messageId); +// messageIds.add(messageId); +// if(exist){ +// messages = ArrayUtils.remove(messages,i); +// } +// } +// } + log.info("EmailParsingActuator本次真实执行邮件数量为:{}",messages.length); + if(messages.length > 0){ + //本批次邮件号 + final Integer batchesCounter = spectrumServiceQuotes.getBatchesCounter().getCurrValue(); + CountDownLatch taskLatch = new CountDownLatch(messages.length); + for(Message message : messages){ + SpectrumParsingActuator spectrumParsingActuator = new SpectrumParsingActuator(); + spectrumParsingActuator.init(message,emailProperties,emailServiceManager, + taskLatch,spectrumServiceQuotes,emailCounter,batchesCounter); + poolExecutor.execute(spectrumParsingActuator); } + taskLatch.await(); } - CountDownLatch taskLatch = new CountDownLatch(messages.length); - for(Message message : messages){ - SpectrumParsingActuator spectrumParsingActuator = new SpectrumParsingActuator(); - spectrumParsingActuator.init(message,emailProperties,emailServiceManager, - taskLatch,spectrumServiceQuotes,emailCounter); - poolExecutor.execute(spectrumParsingActuator); - } - taskLatch.await(); } - }catch (InterruptedException | MessagingException e) { + }catch (InterruptedException e) { e.printStackTrace(); } finally { //清除本批次邮件日志缓存 @@ -114,4 +130,13 @@ public class EmailParsingActuator extends Thread{ } } } + + /** + * 立即关闭线程池 + */ + protected void closeResource(){ + if(Objects.nonNull(poolExecutor)) { + poolExecutor.shutdownNow(); + } + } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/UndealHandleManager.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/UndealHandleManager.java index 9d61875f..a6b00e62 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/UndealHandleManager.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/UndealHandleManager.java @@ -69,7 +69,7 @@ public class UndealHandleManager{ //ftp解析失败文件存储路径 final String rootPath = spectrumServiceQuotes.getSpectrumPathProperties().getRootPath(); final String filePath = spectrumServiceQuotes.getSpectrumPathProperties().getUndealPath(); - List spectrumFiles = FileOperation.getFiles(rootPath+ filePath,taskProperties.getUndealDirReceiveNum()); + List spectrumFiles = FileOperation.getFiles(rootPath+ filePath); if(!CollectionUtils.isEmpty(spectrumFiles)){ CountDownLatch taskLatch = new CountDownLatch(spectrumFiles.size()); for(File spectrumFile : spectrumFiles){ @@ -128,7 +128,7 @@ public class UndealHandleManager{ long currentMillis = System.currentTimeMillis(); long createMillis = currentMillis; //判断redis是否包含文件名称 key - if (spectrumServiceQuotes.getRedisStreamUtil().hasKey(spectrumFile.getName())) { + if (spectrumServiceQuotes.getRedisStreamUtil().hasKey(RedisConstant.UNDEAL_FILE + spectrumFile.getName())) { createMillis = (long) spectrumServiceQuotes.getRedisStreamUtil().get(RedisConstant.UNDEAL_FILE + spectrumFile.getName()); } else { spectrumServiceQuotes.getRedisStreamUtil().set(RedisConstant.UNDEAL_FILE + spectrumFile.getName(), currentMillis); diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/AnalySpectrumException.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/AnalySpectrumException.java new file mode 100644 index 00000000..f2d6597a --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/exception/AnalySpectrumException.java @@ -0,0 +1,9 @@ +package org.jeecg.modules.exception; + +public class AnalySpectrumException extends AnalyseException { + + public AnalySpectrumException(String message) { + super(message); + } + +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/file/FileOperation.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/file/FileOperation.java index fc204d66..230e7314 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/file/FileOperation.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/file/FileOperation.java @@ -69,6 +69,50 @@ public class FileOperation { return sortList.stream().limit(num).collect(Collectors.toList()); } + /** + * 获取指定路径下指定数量的文件 + * @param path + * @return + * @throws FileNotFoundException + */ + public static List getFiles(String path) throws FileNotFoundException { + File file = new File(path); + if (!file.exists()){ + throw new FileNotFoundException(path+" directory does not exist"); + } + if (!file.isDirectory()){ + throw new FileNotFoundException(path+" file is not a directory"); + } + if(FileUtil.isDirEmpty(file)){ + return Collections.emptyList(); + } + if(CollectionUtils.isEmpty(dataTypeMap)){ + final DataType[] dataTypes = DataType.values(); + for (DataType dataType : dataTypes){ + dataTypeMap.put(dataType.getSuffix(),"default"); + } + } + File[] spectrumFiles = file.listFiles(new FileFilter() { + @Override + public boolean accept(File file) { + final String suffix = file.getName().substring(file.getName().lastIndexOf(StringConstant.DOT)); + if (dataTypeMap.containsKey(suffix)){ + return true; + } + return false; + } + }); + List sortList = new ArrayList<>(); + for (File spectrumFile : spectrumFiles){ + if(spectrumFile.getName().contains(BlockConstant.sampleFlag)){ + sortList.add(spectrumFile); + }else { + sortList.add(0,spectrumFile); + } + } + return sortList.stream().collect(Collectors.toList()); + } + /** * 保存或追加写入文件 * @param filePath diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java index feb78d22..9c33e2f9 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/SpectrumBaseBlockServiceImpl.java @@ -85,7 +85,7 @@ public class SpectrumBaseBlockServiceImpl implements ISpectrumBaseBlockService { if(StringUtils.isNotBlank(struct.acquisition_start_date) && StringUtils.isNotBlank(struct.acquisition_start_time)){ gardsSampleData.setAcquisitionStart(DateUtils.parseDate(struct.acquisition_start_date+StringConstant.SPACE+struct.acquisition_start_time)); } - if(Objects.nonNull(gardsSampleData.getAcquisitionStart()) && struct.acquisition_real_time > 0){ + if(Objects.nonNull(gardsSampleData.getAcquisitionStart()) && struct.acquisition_real_time >= 0){ Date acquisitionStop = new Date((long) (gardsSampleData.getAcquisitionStart().getTime()+(struct.acquisition_real_time*1000))); gardsSampleData.setAcquisitionStop(acquisitionStop); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractS_D_Q_G_SpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractS_D_Q_G_SpectrumHandler.java index b4b8d79a..a11e7aab 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractS_D_Q_G_SpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractS_D_Q_G_SpectrumHandler.java @@ -118,6 +118,10 @@ public abstract class AbstractS_D_Q_G_SpectrumHandler extends AbstractSpectrumHa } else if (StringUtils.isNotBlank(sourceData.acquisition_start_time) && StringUtils.isNotBlank(sourceData.acquisition_start_date)) { DateUtils.parseDate(sourceData.acquisition_start_date + StringPool.SPACE + sourceData.acquisition_start_time); } + + if (!Double.isFinite(sourceData.acquisition_live_time) || !Double.isFinite(sourceData.acquisition_real_time)) { + throw new RuntimeException(); + } } catch (Exception e) { //将文件移动到错误文件目录 super.isDateFormatErr = true; diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java index 009d7f09..86b4ca66 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java @@ -2,6 +2,7 @@ package org.jeecg.modules.spectrum; import cn.hutool.core.io.FileUtil; import com.google.common.collect.Lists; +import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.ArrayUtils; @@ -16,6 +17,7 @@ import org.jeecg.modules.eneity.event.SpectrumErrorEvent; import org.jeecg.modules.eneity.event.SpectrumLog; import org.jeecg.modules.enums.ErrorType; import org.jeecg.modules.enums.SpectrumSource; +import org.jeecg.modules.exception.AnalySpectrumException; import org.jeecg.modules.exception.AnalyseException; import org.jeecg.modules.exception.FileRepeatException; import org.jeecg.modules.exception.HeaderBlockException; @@ -80,15 +82,19 @@ public abstract class AbstractSpectrumHandler extends AbstractChain { */ protected List spectrumFileLabels = Lists.newArrayList(); + protected Integer batchesCounter; + /** * 初始化参数 */ - public void init(String mailContent,String emlFileName,SpectrumServiceQuotes spectrumServiceQuotes,StringBuilder returnFileName,Integer spectrumSource) throws Exception{ + public void init(String mailContent, String emlFileName, SpectrumServiceQuotes spectrumServiceQuotes, + StringBuilder returnFileName, Integer spectrumSource, Integer batchesCounter) throws Exception{ this.mailContent = mailContent; this.spectrumServiceQuotes = spectrumServiceQuotes; this.returnFileName = returnFileName; this.spectrumSource = spectrumSource; this.emlFileName = emlFileName; + this.batchesCounter = batchesCounter; } /** @@ -109,7 +115,9 @@ public abstract class AbstractSpectrumHandler extends AbstractChain { */ protected void initNext(SpectrumServiceQuotes spectrumServiceQuotes,File spectrumFile, String sourceFilePath,DataType currDataType, - String mailContent,String emlFileName,Integer spectrumSource,StringBuilder returnFileName){ + String mailContent,String emlFileName, + Integer spectrumSource,StringBuilder returnFileName, + Integer batchesCounter){ this.spectrumServiceQuotes = spectrumServiceQuotes; this.spectrumFile = spectrumFile; this.sourceFilePath = sourceFilePath; @@ -118,6 +126,7 @@ public abstract class AbstractSpectrumHandler extends AbstractChain { this.emlFileName = emlFileName; this.spectrumSource = spectrumSource; this.returnFileName = returnFileName; + this.batchesCounter = batchesCounter; this.setChina(); } @@ -242,7 +251,7 @@ public abstract class AbstractSpectrumHandler extends AbstractChain { e.printStackTrace(); }finally { if(SpectrumSource.FORM_EMAIL_SERVICE.getSourceType().equals(spectrumSource)){ - EmailLogEvent event = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,status,EmailLogManager.GETIDBODY, + EmailLogEvent event = new EmailLogEvent(batchesCounter,Thread.currentThread().getId(),EmailLogManager.GS_TYPE_GET,status,EmailLogManager.GETIDBODY, Objects.isNull(this.spectrumFile)?" ":this.spectrumFile.getAbsolutePath()); EmailLogManager.getInstance().offer(Thread.currentThread().getId(),event); } @@ -260,7 +269,7 @@ public abstract class AbstractSpectrumHandler extends AbstractChain { protected void handleParseingFailFile(Exception e) throws FileNotFoundException { if(!SpectrumSource.FORM_FILE_UNDEL.getSourceType().equals(spectrumSource) && !(e instanceof FileRepeatException)){ try { - if (isDateFormatErr) { + if (isDateFormatErr || (e instanceof AnalySpectrumException)) { //修改能谱文件名称 this.updateErrorSpectrumFileName(); //解析失败会把文件移动到errorfile目录 @@ -306,8 +315,22 @@ public abstract class AbstractSpectrumHandler extends AbstractChain { log.error("An error occurred during the process of processing the failed parsing file. The file is: {}, and the reason is: {}",this.spectrumFile.getAbsolutePath(),e.getMessage()); ex.printStackTrace(); } - }else if(SpectrumSource.FROM_FILE_SOURCE.getSourceType().equals(spectrumSource) && (e instanceof FileRepeatException)){ + } else if(SpectrumSource.FROM_FILE_SOURCE.getSourceType().equals(spectrumSource) && (e instanceof FileRepeatException)){ this.spectrumFile.delete(); + } else if (SpectrumSource.FORM_FILE_UNDEL.getSourceType().equals(spectrumSource) && !(e instanceof FileRepeatException)) { + try { + if (isDateFormatErr) { + //修改能谱文件名称 + this.updateErrorSpectrumFileName(); + //解析失败会把文件移动到errorfile目录 + final String rootPath = spectrumServiceQuotes.getSpectrumPathProperties().getRootPath(); + final String errorFilePath = spectrumServiceQuotes.getSpectrumPathProperties().getErrorFilePath(); + final String finalPath = rootPath+errorFilePath; + FileOperation.moveFile(spectrumFile,finalPath,true); + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java index c701086f..280b2fdf 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AlertSpectrum.java @@ -54,7 +54,7 @@ public class AlertSpectrum extends AbstractSpectrumHandler{ AbstractSpectrumHandler spectrumHandler = new HealthStatusSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.spectrumFile,super.sourceFilePath, super.currDataType,super.mailContent,super.emlFileName, - super.spectrumSource,super.returnFileName); + super.spectrumSource,super.returnFileName,super.batchesCounter); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/DetbkphdSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/DetbkphdSpectrum.java index 5995047e..7941ba02 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/DetbkphdSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/DetbkphdSpectrum.java @@ -17,7 +17,7 @@ public class DetbkphdSpectrum extends AbstractS_D_Q_G_SpectrumHandler { AbstractSpectrumHandler spectrumHandler = new QcphdSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.spectrumFile,super.sourceFilePath, super.currDataType,super.mailContent,super.emlFileName, - super.spectrumSource,super.returnFileName); + super.spectrumSource,super.returnFileName,super.batchesCounter); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GasbkphdSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GasbkphdSpectrum.java index dea30f27..d6e24e92 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GasbkphdSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GasbkphdSpectrum.java @@ -19,7 +19,7 @@ public class GasbkphdSpectrum extends AbstractS_D_Q_G_SpectrumHandler { AbstractSpectrumHandler spectrumHandler = new MetSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.spectrumFile,super.sourceFilePath, super.currDataType,super.mailContent,super.emlFileName, - super.spectrumSource,super.returnFileName); + super.spectrumSource,super.returnFileName,super.batchesCounter); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java index 30797448..2fea9251 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java @@ -48,12 +48,6 @@ public class HealthStatusSpectrum extends AbstractSpectrumHandler{ */ @Override protected void setChina() { - AbstractSpectrumHandler spectrumHandler = new GPSSpectrum(); - spectrumHandler.initNext(super.spectrumServiceQuotes,super.spectrumFile,super.sourceFilePath, - super.currDataType,super.mailContent,super.emlFileName, - super.spectrumSource,super.returnFileName); - spectrumHandler.setPrevious(this); - super.setNext(spectrumHandler); } /** diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java index 4bd5d96c..b0b98357 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/MetSpectrum.java @@ -46,7 +46,7 @@ public class MetSpectrum extends AbstractSpectrumHandler{ AbstractSpectrumHandler spectrumHandler = new AlertSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.spectrumFile,super.sourceFilePath, super.currDataType,super.mailContent,super.emlFileName, - super.spectrumSource,super.returnFileName); + super.spectrumSource,super.returnFileName,super.batchesCounter); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/QcphdSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/QcphdSpectrum.java index d75b6a9a..a8e4d4ce 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/QcphdSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/QcphdSpectrum.java @@ -17,7 +17,7 @@ public class QcphdSpectrum extends AbstractS_D_Q_G_SpectrumHandler { AbstractSpectrumHandler spectrumHandler = new GasbkphdSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.spectrumFile,super.sourceFilePath, super.currDataType,super.mailContent,super.emlFileName, - super.spectrumSource,super.returnFileName); + super.spectrumSource,super.returnFileName,super.batchesCounter); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_G_Analysis.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_G_Analysis.java index 6baf4151..b3bbe087 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_G_Analysis.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/Sample_G_Analysis.java @@ -31,6 +31,7 @@ import org.jeecg.modules.config.datasource.DataSourceSwitcher; import org.jeecg.modules.eneity.event.SpectrumErrorEvent; import org.jeecg.modules.entity.vo.*; import org.jeecg.modules.enums.ErrorType; +import org.jeecg.modules.exception.AnalySpectrumException; import org.jeecg.modules.exception.GAnalyseException; import org.jeecg.modules.file.FileOperation; import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; @@ -130,7 +131,7 @@ public class Sample_G_Analysis { sampleData.getInputFileName().lastIndexOf((StringConstant.SLASH))+1); } - public void analysis() throws GAnalyseException{ + public void analysis() throws GAnalyseException, AnalySpectrumException{ log.info("Gamma自动处理分析--Start"); PHDFile phdFile = new PHDFile(); try { @@ -174,30 +175,37 @@ public class Sample_G_Analysis { //读取参数内容 readMDCParameter(phdFile); // 执行分析业务代码 - gammaFileUtil.GetMiddleData(phdFile, CommonConstant.REPORT_PREFIX_AUTO, nuclideLibs, middleData, MiddleDataType.Auto.getType(), ""); + boolean analyFlag = gammaFileUtil.GetMiddleData(phdFile, CommonConstant.REPORT_PREFIX_AUTO, nuclideLibs, middleData, MiddleDataType.Auto.getType(), ""); - // 数据插入数据库 - this.storageDataToDatabase(phdFile, middleData, phdFile.getQcItems()); + if (analyFlag) { + // 数据插入数据库 + this.storageDataToDatabase(phdFile, middleData, phdFile.getQcItems()); - // 生成日志文件 - writeLog(middleData.getAnalyses_LogPath(), middleData); + // 生成日志文件 + writeLog(middleData.getAnalyses_LogPath(), middleData); - // 生成报告文件 - String reportContent = gammaFileUtil.GetReportContent(middleData); - String reportPath = StringUtils.substringBeforeLast(middleData.getAnalyses_ReportPath(), StringPool.SLASH); - String reportName = StringUtils.substringAfterLast(middleData.getAnalyses_ReportPath(), StringPool.SLASH) + ".txt"; - String savePath = spectrumPathProperties.getRootPath() + spectrumPathProperties.getSaveFilePath() + File.separator + reportPath + - File.separator + reportName; - // 保存文件 - FileOperation.saveOrAppendFile(savePath, reportContent, false); - //发送数据到redis - middleData.setSample_id(String.valueOf(sampleId)); - pushToRedis(middleData); - }catch (Exception e){ + // 生成报告文件 + String reportContent = gammaFileUtil.GetReportContent(middleData); + String reportPath = StringUtils.substringBeforeLast(middleData.getAnalyses_ReportPath(), StringPool.SLASH); + String reportName = StringUtils.substringAfterLast(middleData.getAnalyses_ReportPath(), StringPool.SLASH) + ".txt"; + String savePath = spectrumPathProperties.getRootPath() + spectrumPathProperties.getSaveFilePath() + File.separator + reportPath + + File.separator + reportName; + // 保存文件 + FileOperation.saveOrAppendFile(savePath, reportContent, false); + //发送数据到redis + middleData.setSample_id(String.valueOf(sampleId)); + pushToRedis(middleData); + } else { + ErrorLogManager.getInstance().write(new SpectrumErrorEvent(new Date(), phdFile.getAnalyMessage(), this.sampleFilename)); + throw new AnalySpectrumException(phdFile.getAnalyMessage()); + } + } catch (Exception e){ e.printStackTrace(); log.error("Sample_G_Analysis", e); if (e instanceof DuplicateKeyException) { throw new GAnalyseException("Sample Analyse Error at "+DateUtils.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss"), true); + } else if (e instanceof AnalySpectrumException) { + throw new AnalySpectrumException(e.getMessage()); } else { throw new GAnalyseException("Sample Analyse Error at "+DateUtils.formatDate(new Date(),"yyyy-MM-dd HH:mm:ss")); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java index 3680d36f..1cdbd361 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SamplephdSpectrum.java @@ -7,6 +7,7 @@ import org.jeecg.modules.base.enums.SystemType; import org.jeecg.modules.eneity.event.SpectrumErrorEvent; import org.jeecg.modules.enums.ErrorType; import org.jeecg.modules.enums.SpectrumSource; +import org.jeecg.modules.exception.AnalySpectrumException; import org.jeecg.modules.exception.AnalyseException; import org.jeecg.modules.exception.GAnalyseException; import org.springframework.dao.DuplicateKeyException; @@ -28,7 +29,7 @@ public class SamplephdSpectrum extends AbstractS_D_Q_G_SpectrumHandler { AbstractSpectrumHandler spectrumHandler = new DetbkphdSpectrum(); spectrumHandler.initNext(super.spectrumServiceQuotes,super.spectrumFile,super.sourceFilePath, super.currDataType,super.mailContent,super.emlFileName, - super.spectrumSource,super.returnFileName); + super.spectrumSource,super.returnFileName,super.batchesCounter); spectrumHandler.setPrevious(this); super.setNext(spectrumHandler); } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java index 4af40e0a..53f17107 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumParsingActuator.java @@ -1,6 +1,9 @@ package org.jeecg.modules.spectrum; import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.StringPool; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.RedisConstant; @@ -8,12 +11,19 @@ import org.jeecg.common.constant.StringConstant; import org.jeecg.common.email.EmailLogEvent; import org.jeecg.common.email.EmailLogManager; import org.jeecg.common.email.EmailServiceManager; +import org.jeecg.common.exception.DownloadEmailException; import org.jeecg.common.util.DateUtils; import org.jeecg.modules.email.EmailProperties; import org.jeecg.modules.enums.SpectrumSource; +import org.jeecg.modules.exception.AnalySpectrumException; +import org.jeecg.modules.file.FileOperation; + import javax.mail.Message; +import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.util.Objects; import java.util.concurrent.CountDownLatch; @@ -53,6 +63,8 @@ public class SpectrumParsingActuator implements Runnable{ * 邮件计数器 */ private EmailCounter emailCounter; + + private Integer batchesCounter; /** * 一天秒数 */ @@ -60,32 +72,38 @@ public class SpectrumParsingActuator implements Runnable{ public void init(Message message, EmailProperties emailProperties,EmailServiceManager emailServiceManager, CountDownLatch taskLatch, SpectrumServiceQuotes spectrumServiceQuotes, - EmailCounter emailCounter){ + EmailCounter emailCounter,Integer batchesCounter){ this.message = message; this.emailProperties = emailProperties; this.emailServiceManager = emailServiceManager; this.taskLatch = taskLatch; this.spectrumServiceQuotes = spectrumServiceQuotes; this.emailCounter = emailCounter; + this.batchesCounter = batchesCounter; } @Override public void run() { String subject = null; + boolean downloadFlag = false; + String receiveDate = null; try { //获取邮件主题 - subject = emailServiceManager.getMailSubject(message); + subject = emailServiceManager.getMailSubject(message,this.batchesCounter); //解析之前先把邮件唯一信息存储到redis String messageId = ((MimeMessage) message).getMessageID(); - String emlName = subject+ StringConstant.UNDER_LINE+ DateUtils.formatDate(message.getReceivedDate(),"yyyy-MM-dd HH:mm:ss"); + receiveDate = DateUtils.formatDate(message.getReceivedDate(),"yyyy-MM-dd HH:mm:ss"); + String emlName = subject+ StringConstant.UNDER_LINE+ receiveDate; String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId; spectrumServiceQuotes.getRedisUtil().set(key,emlName,expiryTime); //线程开始初始化时,初始本线程负责的能谱日志事件 SpectrumLogManager.mailSpectrumLogManager.offer(Thread.currentThread().getId(),null); //所有邮件都需以.eml格式存储到eml文件夹中 - final File emlFile = emailServiceManager.downloadEmailToEmlDir(message, emailCounter.getCurrValue()); + final File emlFile = emailServiceManager.downloadEmailToEmlDir(message, emailCounter.getCurrValue(),this.batchesCounter); + downloadFlag = true; + //保存邮件日志到PG数据库 this.spectrumServiceQuotes.getMailLogService().create(message,emailProperties); @@ -96,24 +114,51 @@ public class SpectrumParsingActuator implements Runnable{ } //判断是否是IMS2.0协议文件 + // 如果邮件内容校验成功 将文件保存到eml目录 并删除邮件对象 if(checkMailContent(mailContent,subject)){ AbstractSpectrumHandler spectrumHandler = new SamplephdSpectrum(); - spectrumHandler.init(mailContent.toString(),emlFile.getName(),spectrumServiceQuotes,new StringBuilder(),SpectrumSource.FORM_EMAIL_SERVICE.getSourceType()); + spectrumHandler.init(mailContent.toString(),emlFile.getName(),spectrumServiceQuotes,new StringBuilder(),SpectrumSource.FORM_EMAIL_SERVICE.getSourceType(),batchesCounter); final boolean matchResult = spectrumHandler.saveEmailToLocal(); if(matchResult){ - //开始解析 - spectrumHandler.handler(); + try { + //开始解析 + spectrumHandler.handler(); + } catch (Exception e) { + //如果是gamma谱的分析异常 + if (e instanceof AnalySpectrumException) { + // 如果邮件内容校验失败(邮件内容不完整) 将错误邮件从eml移动到emlError + if (Objects.nonNull(emlFile) && emlFile.exists()){ + moveEmail(emlFile, key); + } + //删除邮件 + emailServiceManager.removeMail(message,batchesCounter); + } else { + throw e; + } + } + }else{ log.warn("This email {} parsing failed and is not listed in the Met, Alert, SOH, Sample, Detbkphd, QC, Gasbkphd spectra.",subject); } + emailServiceManager.removeMail(message,batchesCounter); + }else { + // 如果邮件内容校验失败(邮件内容不完整) 将错误邮件从eml移动到emlError + if (Objects.nonNull(emlFile) && emlFile.exists()){ + moveEmail(emlFile, key); + throw new DownloadEmailException("邮件移走后手动抛出DownloadEmailException"); + } } - emailServiceManager.removeMail(message); } catch (Exception e) { - emailServiceManager.removeMail(message); - e.printStackTrace(); + // 如果不是下载导致的失败 并且 下载成功,则删除下载的邮件对象 + if(!(e instanceof DownloadEmailException) && downloadFlag){ + log.error("Catch Remove Email:"+ subject + StringPool.UNDERSCORE + receiveDate + StringPool.UNDERSCORE); + emailServiceManager.removeMail(message,batchesCounter); + } + //输出异常信息 + log.error("邮件处理异常{},邮件主题:{}:", e, subject); }finally { try { - EmailLogEvent expungeEvent = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,EmailLogManager.DONE); + EmailLogEvent expungeEvent = new EmailLogEvent(this.batchesCounter,Thread.currentThread().getId(),EmailLogManager.GS_TYPE_GET,EmailLogManager.DONE); EmailLogManager.getInstance().offer(Thread.currentThread().getId(),expungeEvent); EmailLogManager.getInstance().writeLog(Thread.currentThread().getId()); @@ -153,4 +198,13 @@ public class SpectrumParsingActuator implements Runnable{ return false; } + private void moveEmail(File emlFile, String key) throws IOException { + final String rootPath = spectrumServiceQuotes.getSpectrumPathProperties().getRootPath(); + final String emlErrorPath = spectrumServiceQuotes.getSpectrumPathProperties().getEmlErrorPath(); + final String finalPath = rootPath+emlErrorPath; + FileOperation.moveFile(emlFile,finalPath,true); + // 删除 key,防止下次线程执行删除邮件 + spectrumServiceQuotes.getRedisUtil().del(key); + } + } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java index f9fab61c..82734ebe 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java @@ -85,11 +85,11 @@ public class SpectrumServiceQuotes { private final RedisUtil redisUtil; private final MaximumPoolSizeProperties maximumPoolSizeProperties; - - private final IGardsGPSDataService gardsGPSDataService; /** * 原始库插入数据锁 */ private final Object originalLibraryLock = new Object(); + private final BatchesCounter batchesCounter; + } diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java index ab07c8be..3da16c3f 100644 --- a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/common/util/GammaFileUtil.java @@ -1335,191 +1335,200 @@ public class GammaFileUtil extends AbstractLogOrReport { } String strValue = CalValuesHandler.analyseSpectrum(phdStr, nuclideLinesMap, phd.getTmpFilePath(), analysisProcess); Map parseMap = JSON.parseObject(strValue, Map.class); - for (Map.Entry entry:parseMap.entrySet()) { - if (entry.getKey().equalsIgnoreCase("bAnalyed")) { - boolean value = JSON.parseObject(JSON.toJSONString(entry.getValue()), Boolean.class); - phd.setBAnalyed(value); - } - if (entry.getKey().equalsIgnoreCase("mapEnerPara")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { - String key = objectEntry.getKey(); - ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); - value.put(key, entryValue); + boolean analyFlag = JSON.parseObject(JSON.toJSONString(parseMap.get("analyFlag")), Boolean.class); + phd.setAnalyFlag(analyFlag); + String analyMessage = JSON.parseObject(JSON.toJSONString(parseMap.get("analyMessage")), String.class); + phd.setAnalyMessage(analyMessage); + if (analyFlag) { + for (Map.Entry entry:parseMap.entrySet()) { + if (entry.getKey().equalsIgnoreCase("bAnalyed")) { + boolean value = JSON.parseObject(JSON.toJSONString(entry.getValue()), Boolean.class); + phd.setBAnalyed(value); } - phd.setMapEnerPara(value); - } - if (entry.getKey().equalsIgnoreCase("mapResoPara")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { - String key = objectEntry.getKey(); - ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); - value.put(key, entryValue); + if (entry.getKey().equalsIgnoreCase("mapEnerPara")) { + HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); + Map value = new HashMap<>(); + for (Map.Entry objectEntry:jsonMap.entrySet()) { + String key = objectEntry.getKey(); + ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); + value.put(key, entryValue); + } + phd.setMapEnerPara(value); } - phd.setMapResoPara(value); - } - if (entry.getKey().equalsIgnoreCase("mapEffiPara")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { - String key = objectEntry.getKey(); - ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); - value.put(key, entryValue); + if (entry.getKey().equalsIgnoreCase("mapResoPara")) { + HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); + Map value = new HashMap<>(); + for (Map.Entry objectEntry:jsonMap.entrySet()) { + String key = objectEntry.getKey(); + ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); + value.put(key, entryValue); + } + phd.setMapResoPara(value); } - phd.setMapEffiPara(value); - } - if (entry.getKey().equalsIgnoreCase("mapTotEPara")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { - String key = objectEntry.getKey(); - ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); - value.put(key, entryValue); + if (entry.getKey().equalsIgnoreCase("mapEffiPara")) { + HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); + Map value = new HashMap<>(); + for (Map.Entry objectEntry:jsonMap.entrySet()) { + String key = objectEntry.getKey(); + ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); + value.put(key, entryValue); + } + phd.setMapEffiPara(value); } - phd.setMapTotEPara(value); - } - if (entry.getKey().equalsIgnoreCase("para_stepRatio")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setPara_stepRatio(value); - } - if (entry.getKey().equalsIgnoreCase("para_tail")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setPara_tail(value); - } - if (entry.getKey().equalsIgnoreCase("para_tailAlpha")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setPara_tailAlpha(value); - } - if (entry.getKey().equalsIgnoreCase("para_tailRight")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setPara_tailRight(value); - } - if (entry.getKey().equalsIgnoreCase("para_tailRightAlpha")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setPara_tailRightAlpha(value); - } - if (entry.getKey().equalsIgnoreCase("newEner")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setNewEner(value); - } - if (entry.getKey().equalsIgnoreCase("newReso")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setNewReso(value); - } - if (entry.getKey().equalsIgnoreCase("mapEnerKD")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { - String key = objectEntry.getKey(); - GEnergyBlock entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), GEnergyBlock.class); - value.put(key, entryValue); + if (entry.getKey().equalsIgnoreCase("mapTotEPara")) { + HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); + Map value = new HashMap<>(); + for (Map.Entry objectEntry:jsonMap.entrySet()) { + String key = objectEntry.getKey(); + ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); + value.put(key, entryValue); + } + phd.setMapTotEPara(value); } - phd.setMapEnerKD(value); - } - if (entry.getKey().equalsIgnoreCase("mapResoKD")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { - String key = objectEntry.getKey(); - GResolutionBlock entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), GResolutionBlock.class); - value.put(key, entryValue); + if (entry.getKey().equalsIgnoreCase("para_stepRatio")) { + ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); + phd.setPara_stepRatio(value); } - phd.setMapResoKD(value); - } - if (entry.getKey().equalsIgnoreCase("vEnergy")) { - List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); - phd.setVEnergy(value); - } - if (entry.getKey().equalsIgnoreCase("vBase")) { - List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); - phd.setVBase(value); - } - if (entry.getKey().equalsIgnoreCase("vLc")) { - List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); - phd.setVLc(value); - } - if (entry.getKey().equalsIgnoreCase("vScac")) { - List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); - phd.setVScac(value); - } - if (entry.getKey().equalsIgnoreCase("vPeak")) { - List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), PeakInfo.class); - phd.setVPeak(value); - } - if (entry.getKey().equalsIgnoreCase("baseCtrls")) { - BaseControls value = JSON.parseObject(JSON.toJSONString(entry.getValue()), BaseControls.class); - phd.setBaseCtrls(value); - } - if (entry.getKey().equalsIgnoreCase("usedEner")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setUsedEner(value); - } - if (entry.getKey().equalsIgnoreCase("usedEnerKD")) { - GEnergyBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), GEnergyBlock.class); - phd.setUsedEnerKD(value); - } - if (entry.getKey().equalsIgnoreCase("usedEnerPara")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setUsedEnerPara(value); - } - if (entry.getKey().equalsIgnoreCase("usedReso")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setUsedReso(value); - } - if (entry.getKey().equalsIgnoreCase("usedResoKD")) { - GResolutionBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), GResolutionBlock.class); - phd.setUsedResoKD(value); - } - if (entry.getKey().equalsIgnoreCase("usedResoPara")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setUsedResoPara(value); - } - if (entry.getKey().equalsIgnoreCase("usedEffi")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setUsedEffi(value); - } - if (entry.getKey().equalsIgnoreCase("usedEffiKD")) { - GEfficiencyBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), GEfficiencyBlock.class); - phd.setUsedEffiKD(value); - } - if (entry.getKey().equalsIgnoreCase("usedEffiPara")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setUsedEffiPara(value); - } - if (entry.getKey().equalsIgnoreCase("usedTotE")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setUsedTotE(value); - } - if (entry.getKey().equalsIgnoreCase("usedTotEKD")) { - TotaleffBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), TotaleffBlock.class); - phd.setUsedTotEKD(value); - } - if (entry.getKey().equalsIgnoreCase("usedTotEPara")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setUsedTotEPara(value); - } - if (entry.getKey().equalsIgnoreCase("mapNucActMda")) { - TreeMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), TreeMap.class); - Map value = new TreeMap<>(); - for (Map.Entry objectEntry:jsonMap.entrySet()) { - String key = objectEntry.getKey(); - NuclideActMda entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), NuclideActMda.class); - value.put(key, entryValue); + if (entry.getKey().equalsIgnoreCase("para_tail")) { + ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); + phd.setPara_tail(value); + } + if (entry.getKey().equalsIgnoreCase("para_tailAlpha")) { + ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); + phd.setPara_tailAlpha(value); + } + if (entry.getKey().equalsIgnoreCase("para_tailRight")) { + ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); + phd.setPara_tailRight(value); + } + if (entry.getKey().equalsIgnoreCase("para_tailRightAlpha")) { + ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); + phd.setPara_tailRightAlpha(value); + } + if (entry.getKey().equalsIgnoreCase("newEner")) { + String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); + phd.setNewEner(value); + } + if (entry.getKey().equalsIgnoreCase("newReso")) { + String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); + phd.setNewReso(value); + } + if (entry.getKey().equalsIgnoreCase("mapEnerKD")) { + HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); + Map value = new HashMap<>(); + for (Map.Entry objectEntry:jsonMap.entrySet()) { + String key = objectEntry.getKey(); + GEnergyBlock entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), GEnergyBlock.class); + value.put(key, entryValue); + } + phd.setMapEnerKD(value); + } + if (entry.getKey().equalsIgnoreCase("mapResoKD")) { + HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); + Map value = new HashMap<>(); + for (Map.Entry objectEntry:jsonMap.entrySet()) { + String key = objectEntry.getKey(); + GResolutionBlock entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), GResolutionBlock.class); + value.put(key, entryValue); + } + phd.setMapResoKD(value); + } + if (entry.getKey().equalsIgnoreCase("vEnergy")) { + List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); + phd.setVEnergy(value); + } + if (entry.getKey().equalsIgnoreCase("vBase")) { + List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); + phd.setVBase(value); + } + if (entry.getKey().equalsIgnoreCase("vLc")) { + List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); + phd.setVLc(value); + } + if (entry.getKey().equalsIgnoreCase("vScac")) { + List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); + phd.setVScac(value); + } + if (entry.getKey().equalsIgnoreCase("vPeak")) { + List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), PeakInfo.class); + phd.setVPeak(value); + } + if (entry.getKey().equalsIgnoreCase("baseCtrls")) { + BaseControls value = JSON.parseObject(JSON.toJSONString(entry.getValue()), BaseControls.class); + phd.setBaseCtrls(value); + } + if (entry.getKey().equalsIgnoreCase("usedEner")) { + String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); + phd.setUsedEner(value); + } + if (entry.getKey().equalsIgnoreCase("usedEnerKD")) { + GEnergyBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), GEnergyBlock.class); + phd.setUsedEnerKD(value); + } + if (entry.getKey().equalsIgnoreCase("usedEnerPara")) { + ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); + phd.setUsedEnerPara(value); + } + if (entry.getKey().equalsIgnoreCase("usedReso")) { + String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); + phd.setUsedReso(value); + } + if (entry.getKey().equalsIgnoreCase("usedResoKD")) { + GResolutionBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), GResolutionBlock.class); + phd.setUsedResoKD(value); + } + if (entry.getKey().equalsIgnoreCase("usedResoPara")) { + ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); + phd.setUsedResoPara(value); + } + if (entry.getKey().equalsIgnoreCase("usedEffi")) { + String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); + phd.setUsedEffi(value); + } + if (entry.getKey().equalsIgnoreCase("usedEffiKD")) { + GEfficiencyBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), GEfficiencyBlock.class); + phd.setUsedEffiKD(value); + } + if (entry.getKey().equalsIgnoreCase("usedEffiPara")) { + ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); + phd.setUsedEffiPara(value); + } + if (entry.getKey().equalsIgnoreCase("usedTotE")) { + String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); + phd.setUsedTotE(value); + } + if (entry.getKey().equalsIgnoreCase("usedTotEKD")) { + TotaleffBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), TotaleffBlock.class); + phd.setUsedTotEKD(value); + } + if (entry.getKey().equalsIgnoreCase("usedTotEPara")) { + ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); + phd.setUsedTotEPara(value); + } + if (entry.getKey().equalsIgnoreCase("mapNucActMda")) { + TreeMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), TreeMap.class); + Map value = new TreeMap<>(); + for (Map.Entry objectEntry:jsonMap.entrySet()) { + String key = objectEntry.getKey(); + NuclideActMda entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), NuclideActMda.class); + value.put(key, entryValue); + } + phd.setMapNucActMda(value); } - phd.setMapNucActMda(value); } - } - BeanUtils.copyProperties(phd.getSetting(), phd.getUsedSetting()); + BeanUtils.copyProperties(phd.getSetting(), phd.getUsedSetting()); - for (PeakInfo peak:phd.getVPeak()) { - if (StringUtils.isBlank(peak.recoilBetaChan)) { - peak.recoilBetaChan = "nan"; - } - if (StringUtils.isBlank(peak.recoilDeltaChan)) { - peak.recoilDeltaChan = "nan"; + for (PeakInfo peak:phd.getVPeak()) { + if (StringUtils.isBlank(peak.recoilBetaChan)) { + peak.recoilBetaChan = "nan"; + } + if (StringUtils.isBlank(peak.recoilDeltaChan)) { + peak.recoilDeltaChan = "nan"; + } } + } else { + log.error("AnalyseSpectrum(): {}", analyMessage); + return false; } } catch (JsonProcessingException e){ e.printStackTrace(); @@ -3206,16 +3215,20 @@ public class GammaFileUtil extends AbstractLogOrReport { String anylseEnd; anylseBegin = DateUtils.formatDate(new Date(), "yyyy/MM/dd HH:mm:ss"); bRet = AnalyseSpectrum(fileAnlyse,nucline); - RunQC(fileAnlyse); - fileAnlyse.setEfficiencyParam(fileAnlyse.getUsedEffiPara().getP()); - fileAnlyse.setEfficiencyEnergy(fileAnlyse.getUsedEffiKD().getG_energy()); - fileAnlyse.setEfficiencyCurRow(0); - //缓存中获取计算mdc使用的核素信息 - Map nuclideLinesMDCMap = (Map) redisUtil.get("AllNuclideMap"); - getNuclideMDCValue(fileAnlyse, fileAnlyse.getMdcInfoMap(), nuclideLinesMDCMap); - anylseEnd = DateUtils.formatDate(new Date(), "yyyy/MM/dd HH:mm:ss"); - middleData.analyses_analysisBegin = anylseBegin; - middleData.analyses_analysisEnd = anylseEnd; + if (bRet) { + RunQC(fileAnlyse); + fileAnlyse.setEfficiencyParam(fileAnlyse.getUsedEffiPara().getP()); + fileAnlyse.setEfficiencyEnergy(fileAnlyse.getUsedEffiKD().getG_energy()); + fileAnlyse.setEfficiencyCurRow(0); + //缓存中获取计算mdc使用的核素信息 + Map nuclideLinesMDCMap = (Map) redisUtil.get("AllNuclideMap"); + getNuclideMDCValue(fileAnlyse, fileAnlyse.getMdcInfoMap(), nuclideLinesMDCMap); + anylseEnd = DateUtils.formatDate(new Date(), "yyyy/MM/dd HH:mm:ss"); + middleData.analyses_analysisBegin = anylseBegin; + middleData.analyses_analysisEnd = anylseEnd; + } else { + return bRet; + } } else if (type.equals(MiddleDataType.InterAction.getType()) && flag.equalsIgnoreCase("save")){ //如果是人工交互分析 则先上传phd对应文件信息 //上传本次文件到ftp人工交互存储路径下 File sampleTmp = null; @@ -4359,6 +4372,17 @@ public class GammaFileUtil extends AbstractLogOrReport { return ftpUtil.downloadFile(fromPath, "betaGamma"); } + public List readLine(String filePath) { + List allLines = new ArrayList<>(); + try { + File file = new File(filePath); + return FileUtils.readLines(file, "UTF-8"); + }catch (IOException e){ + e.printStackTrace(); + return allLines; + } + } + public String makeUpSpectrum(PHDFile phd) { StringBuilder spectrum = new StringBuilder(); //PHD文本内容头部部分 diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/service/impl/SysDefaultNuclideServiceImpl.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/service/impl/SysDefaultNuclideServiceImpl.java index b4ca9734..2761eb1a 100644 --- a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/service/impl/SysDefaultNuclideServiceImpl.java +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/service/impl/SysDefaultNuclideServiceImpl.java @@ -6,6 +6,7 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -21,6 +22,7 @@ import org.jeecg.modules.service.IGardsNuclLinesLibService; import org.jeecg.modules.service.ISysDefaultNuclideService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.*; @@ -58,13 +60,18 @@ public class SysDefaultNuclideServiceImpl extends ServiceImpl add(List nuclideNames,String nuclideType,Integer useType) { + @Transactional + public Result add(List nuclideNames, String nuclideType, Integer useType) { if (CollUtil.isEmpty(nuclideNames)) return Result.error(Prompt.PARAM_NOT_EMPTY); if (StrUtil.isBlank(nuclideType)) return Result.error("nuclideType" + Prompt.PARAM_REQUIRED); if (ObjectUtil.isNull(useType)) return Result.error("useType" + Prompt.PARAM_REQUIRED); + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(SysDefaultNuclide::getNuclideType, nuclideType); + wrapper.eq(SysDefaultNuclide::getUseType, useType); + this.remove(wrapper); List SysDefaultNuclides = new ArrayList<>(); for (String nuclideName : nuclideNames) { SysDefaultNuclide sysDefaultNuclide = new SysDefaultNuclide(); @@ -73,7 +80,7 @@ public class SysDefaultNuclideServiceImpl extends ServiceImpl newList = ListUtil.toList("A", "F"); + List oldList = ListUtil.toList("A", "B", "C"); + Collection intersection = CollUtil.intersection(newList, oldList); + newList = newList.stream() + .filter(item -> !CollUtil.contains(intersection, item)) + .collect(Collectors.toList()); + System.out.println("add: " + newList); + + oldList = oldList.stream() + .filter(item -> !CollUtil.contains(intersection, item)) + .collect(Collectors.toList()); + System.out.println("del: " + oldList); + } } diff --git a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgDemoController.java b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgDemoController.java index d2d08cc4..70d53d8d 100644 --- a/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgDemoController.java +++ b/jeecg-module-demo/src/main/java/org/jeecg/modules/demo/test/controller/JeecgDemoController.java @@ -5,8 +5,6 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -15,7 +13,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; -import org.apache.commons.net.ftp.FTPFile; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.PermissionData; @@ -55,13 +52,15 @@ public class JeecgDemoController extends JeecgController files = new LinkedList<>(); - readFiles(ftpClient, ftpClient.printWorkingDirectory()+ StringPool.SLASH + "savefile", files); - System.out.println("文件数量:"+files.size()); + System.out.println(ftpClient.printWorkingDirectory()); + //读取ftp文件的输入流 + iStream=ftpClient.retrieveFileStream("/savefile/Spectrum/Xenon/Sauna/Samplephd/2023/10/SEX63_007-20231026_0452_S_FULL_22495.8.PHD"); + System.out.println(Objects.isNull(iStream)); } catch (IOException e) { throw new RuntimeException(e); } finally { @@ -80,32 +80,18 @@ public class JeecgDemoController extends JeecgController files) { - String oldPath = parentFilePath; - try { - ftpClient.changeWorkingDirectory(parentFilePath); - FTPFile[] directories = ftpClient.listFiles(parentFilePath); - if (Objects.nonNull(directories)) { - for (FTPFile ftpFile:directories) { - if (ftpFile.isDirectory()) { - parentFilePath = oldPath + StringPool.SLASH + ftpFile.getName(); - readFiles(ftpClient, parentFilePath, files); - } else if (ftpFile.isFile()) { - files.add(ftpFile.getName()); - } - } - } - } catch (IOException e) { - throw new RuntimeException(e); - } - } - @Autowired diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/PHDFileUtil.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/PHDFileUtil.java index 82dddbcd..94876f3e 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/PHDFileUtil.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/PHDFileUtil.java @@ -331,6 +331,338 @@ public class PHDFileUtil extends AbstractLogOrReport { return map; } + public void updateBoundary(BetaDataFile betaDataFile, String type, List sampleRoiChannel, Map map) { + List boundaryList = new LinkedList<>(); + for (int i=0; i gammaCalibrationPairs, List betaCalibrationPairs, Map map) { + List channels = new LinkedList<>(); + List> gammaNewEnergyList = new LinkedList<>(); + List> betaNewEnergyList = new LinkedList<>(); + //填充道值数组的数据 + for (int i=0; i<255; i++) { + channels.add(Double.valueOf(i)); + } + //过滤出Gamma对应的表单数据 + List gammaChannelList = gammaCalibrationPairs.stream().map(GardsCalibrationPairsSpectrum::getXValue).collect(Collectors.toList()); + List gammaEnergyList = gammaCalibrationPairs.stream().map(GardsCalibrationPairsSpectrum::getYValue).collect(Collectors.toList()); + //计算gamma对应的数据 + List gammaFittingPara = EnergySpectrumHandler.GetFileFittingPara(gammaChannelList, gammaEnergyList); + //计算道值的能量 + List gammaEnergys = EnergySpectrumHandler.GetFileFittingData(channels,gammaFittingPara); + //将新计算的能量封装到数组 + for (Double calEnergy:gammaEnergys) { + List newEnergy = new LinkedList<>(); + newEnergy.add(calEnergy); + gammaNewEnergyList.add(newEnergy); + } + map.put("gammaEnergyData", gammaNewEnergyList); + + //过滤出Beta对应的表单数据 + List betaChannelList = betaCalibrationPairs.stream().map(GardsCalibrationPairsSpectrum::getXValue).collect(Collectors.toList()); + List betaEnergyList = betaCalibrationPairs.stream().map(GardsCalibrationPairsSpectrum::getYValue).collect(Collectors.toList()); + //计算beta对应的数据 + List betaFittingPara = EnergySpectrumHandler.GetFileFittingPara(betaChannelList, betaEnergyList); + + //计算道值的能量 + List betaEnergys = EnergySpectrumHandler.GetFileFittingData(channels,betaFittingPara); + //将新计算的能量封装到数组 + for (Double calEnergy:betaEnergys) { + List newEnergy = new LinkedList<>(); + newEnergy.add(calEnergy); + betaNewEnergyList.add(newEnergy); + } + map.put("betaEnergyData", betaNewEnergyList); + if (type.equalsIgnoreCase("sample")) { + betaDataFile.setSampleGammaEnergyList(gammaNewEnergyList); + betaDataFile.setSampleBetaEnergyList(betaNewEnergyList); + } else if (type.equalsIgnoreCase("gas")) { + betaDataFile.setGasGammaEnergyList(gammaNewEnergyList); + betaDataFile.setGasBetaEnergyList(betaNewEnergyList); + } else if (type.equalsIgnoreCase("det")) { + betaDataFile.setDetGammaEnergyList(gammaNewEnergyList); + betaDataFile.setDetBetaEnergyList(betaNewEnergyList); + } + } + + public void createBgCalPara(BetaDataFile betaDataFile, List gammaCalibrationSpectrumList,List betaCalibrationSpectrumList, + List gammaCalibrationPairsList,List betaCalibrationPairsList) { + SpectrumGroup spectrum_group = new SpectrumGroup(); + //我需要根据 calibration页面对应的数组 及 公式判断是否有勾选sample det gas 这四个文件的操作 + //gammaCalibrationSpectrumList存储的是gamma对应的公式数据 + //betaCalibrationSpectrumList存储的是beta对应的公式数据 + //gammaCalibrationPairsList存储的是gamma对应的表单数据 + //betaCalibrationPairsList存储的是beta对应的表单数据 + //根据数据类型过滤出sample对应的参数 + if (CollectionUtils.isNotEmpty(gammaCalibrationSpectrumList) && CollectionUtils.isNotEmpty(betaCalibrationSpectrumList) && CollectionUtils.isNotEmpty(gammaCalibrationPairsList) && CollectionUtils.isNotEmpty(betaCalibrationPairsList)) { + List sampleGammaCalibrationList = gammaCalibrationSpectrumList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + List sampleBetaCalibrationList = betaCalibrationSpectrumList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + List sampleGammaCalibrationPairsList = gammaCalibrationPairsList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + List sampleBetaCalibrationPairsList = betaCalibrationPairsList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + //过滤出sampleGamma对应的表单数据 + List gammaChannelList = sampleGammaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getXValue).collect(Collectors.toList()); + List gammaEnergyList = sampleGammaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getYValue).collect(Collectors.toList()); + //过滤出sampleBeta对应的表单数据 + List betaChannelList = sampleBetaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getXValue).collect(Collectors.toList()); + List betaEnergyList = sampleBetaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getYValue).collect(Collectors.toList()); + //获取文件中的表单数据 + EnergySpectrumStruct struct = betaDataFile.getSampleStruct(); + List gCentroidChannel = struct.g_centroid_channel; + List gEnergy = struct.g_energy; + List bChannel = struct.b_channel; + List bElectronEnergy = struct.b_electron_energy; + //比较四组表单数据 + if ( !gammaChannelList.equals(gCentroidChannel) || !gammaEnergyList.equals(gEnergy) ) { + //将公式参数放入到重新计算的参数内 + List newFittingPara = EnergySpectrumHandler.GetFileFittingPara(gammaChannelList, gammaEnergyList); + //计算E to C公式参数 + List newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(gammaEnergyList, gammaChannelList); + List geCal = new LinkedList<>(); + geCal.add(Double.valueOf(newFittingParaToUi.get(0))); + geCal.add(Double.valueOf(newFittingParaToUi.get(1))); + geCal.add(Double.valueOf(newFittingParaToUi.get(2))); + spectrum_group.BgCalPara.g_e_cal = geCal; + //公式C TO E参数 + List fittingPara = new LinkedList<>(); + fittingPara.add(String.valueOf(sampleGammaCalibrationList.get(0).getCoeff1())); + fittingPara.add(String.valueOf(sampleGammaCalibrationList.get(0).getCoeff2())); + fittingPara.add(String.valueOf(sampleGammaCalibrationList.get(0).getCoeff3())); + + List gc2e = new LinkedList<>(); + gc2e.add(Double.valueOf(sampleGammaCalibrationList.get(0).getCoeff1())); + gc2e.add(Double.valueOf(sampleGammaCalibrationList.get(0).getCoeff2())); + gc2e.add(Double.valueOf(sampleGammaCalibrationList.get(0).getCoeff3())); + spectrum_group.g_c2e = gc2e; + //将新的道值对应能量值参数存储 + for (int i=0; i newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(betaEnergyList, betaChannelList); + List beCal = new LinkedList<>(); + beCal.add(Double.valueOf(newFittingParaToUi.get(0))); + beCal.add(Double.valueOf(newFittingParaToUi.get(1))); + beCal.add(Double.valueOf(newFittingParaToUi.get(2))); + spectrum_group.BgCalPara.b_e_cal = beCal; + //公式C TO E参数 + List fittingPara = new LinkedList<>(); + fittingPara.add(String.valueOf(sampleBetaCalibrationList.get(0).getCoeff1())); + fittingPara.add(String.valueOf(sampleBetaCalibrationList.get(0).getCoeff2())); + fittingPara.add(String.valueOf(sampleBetaCalibrationList.get(0).getCoeff3())); + + List bc2e = new LinkedList<>(); + bc2e.add(Double.valueOf(sampleBetaCalibrationList.get(0).getCoeff1())); + bc2e.add(Double.valueOf(sampleBetaCalibrationList.get(0).getCoeff2())); + bc2e.add(Double.valueOf(sampleBetaCalibrationList.get(0).getCoeff3())); + spectrum_group.b_c2e = bc2e; + //将新的道值对应能量值参数存储 + for (int i=0; i gasGammaCalibrationList = gammaCalibrationSpectrumList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + List gasBetaCalibrationList = betaCalibrationSpectrumList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + List gasGammaCalibrationPairsList = gammaCalibrationPairsList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + List gasBetaCalibrationPairsList = betaCalibrationPairsList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + //过滤出gasGamma对应的表单数据 + List gammaChannelList = gasGammaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getXValue).collect(Collectors.toList()); + List gammaEnergyList = gasGammaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getYValue).collect(Collectors.toList()); + //过滤出gasBeta对应的表单数据 + List betaChannelList = gasBetaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getXValue).collect(Collectors.toList()); + List betaEnergyList = gasBetaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getYValue).collect(Collectors.toList()); + //获取文件中的表单数据 + EnergySpectrumStruct struct = betaDataFile.getGasStruct(); + List gCentroidChannel = struct.g_centroid_channel; + List gEnergy = struct.g_energy; + List bChannel = struct.b_channel; + List bElectronEnergy = struct.b_electron_energy; + //比较gamma部分表单数据 + if ( !gammaChannelList.equals(gCentroidChannel) || !gammaEnergyList.equals(gEnergy) ) { + //将公式参数放入到重新计算的参数内 + //计算E to C公式参数 + List newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(gammaEnergyList, gammaChannelList); + List geCal = new LinkedList<>(); + geCal.add(Double.valueOf(newFittingParaToUi.get(0))); + geCal.add(Double.valueOf(newFittingParaToUi.get(1))); + geCal.add(Double.valueOf(newFittingParaToUi.get(2))); + spectrum_group.BgCalPara.g_e_cal = geCal; + //公式C TO E参数 + List fittingPara = new LinkedList<>(); + fittingPara.add(String.valueOf(gasGammaCalibrationList.get(0).getCoeff1())); + fittingPara.add(String.valueOf(gasGammaCalibrationList.get(0).getCoeff2())); + fittingPara.add(String.valueOf(gasGammaCalibrationList.get(0).getCoeff3())); + + List gc2e = new LinkedList<>(); + gc2e.add(Double.valueOf(gasGammaCalibrationList.get(0).getCoeff1())); + gc2e.add(Double.valueOf(gasGammaCalibrationList.get(0).getCoeff2())); + gc2e.add(Double.valueOf(gasGammaCalibrationList.get(0).getCoeff3())); + spectrum_group.g_c2e = gc2e; + //将新的道值对应能量值参数存储 + for (int i=0; i newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(betaEnergyList, betaChannelList); + List beCal = new LinkedList<>(); + beCal.add(Double.valueOf(newFittingParaToUi.get(0))); + beCal.add(Double.valueOf(newFittingParaToUi.get(1))); + beCal.add(Double.valueOf(newFittingParaToUi.get(2))); + spectrum_group.BgCalPara.b_e_cal = beCal; + //公式C TO E参数 + List fittingPara = new LinkedList<>(); + fittingPara.add(String.valueOf(gasBetaCalibrationList.get(0).getCoeff1())); + fittingPara.add(String.valueOf(gasBetaCalibrationList.get(0).getCoeff2())); + fittingPara.add(String.valueOf(gasBetaCalibrationList.get(0).getCoeff3())); + + List bc2e = new LinkedList<>(); + bc2e.add(Double.valueOf(gasBetaCalibrationList.get(0).getCoeff1())); + bc2e.add(Double.valueOf(gasBetaCalibrationList.get(0).getCoeff2())); + bc2e.add(Double.valueOf(gasBetaCalibrationList.get(0).getCoeff3())); + spectrum_group.b_c2e = bc2e; + //将新的道值对应能量值参数存储 + for (int i=0; i detGammaCalibrationList = gammaCalibrationSpectrumList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); + List detBetaCalibrationList = betaCalibrationSpectrumList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); + List detGammaCalibrationPairsList = gammaCalibrationPairsList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); + List detBetaCalibrationPairsList = betaCalibrationPairsList.stream().filter(item -> item.getDataType().equals(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); + //过滤出gasGamma对应的表单数据 + List gammaChannelList = detGammaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getXValue).collect(Collectors.toList()); + List gammaEnergyList = detGammaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getYValue).collect(Collectors.toList()); + //过滤出gasBeta对应的表单数据 + List betaChannelList = detBetaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getXValue).collect(Collectors.toList()); + List betaEnergyList = detBetaCalibrationPairsList.stream().map(GardsCalibrationPairsSpectrum::getYValue).collect(Collectors.toList()); + //获取文件中的表单数据 + EnergySpectrumStruct struct = betaDataFile.getDetStruct(); + List gCentroidChannel = struct.g_centroid_channel; + List gEnergy = struct.g_energy; + List bChannel = struct.b_channel; + List bElectronEnergy = struct.b_electron_energy; + //比较四组表单数据 + if ( !gammaChannelList.equals(gCentroidChannel) || !gammaEnergyList.equals(gEnergy) ) { + //计算E to C公式参数 + List newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(gammaEnergyList, gammaChannelList); + List geCal = new LinkedList<>(); + geCal.add(Double.valueOf(newFittingParaToUi.get(0))); + geCal.add(Double.valueOf(newFittingParaToUi.get(1))); + geCal.add(Double.valueOf(newFittingParaToUi.get(2))); + spectrum_group.BgCalPara.g_e_cal = geCal; + //公式C TO E参数 + List fittingPara = new LinkedList<>(); + fittingPara.add(String.valueOf(detGammaCalibrationList.get(0).getCoeff1())); + fittingPara.add(String.valueOf(detGammaCalibrationList.get(0).getCoeff2())); + fittingPara.add(String.valueOf(detGammaCalibrationList.get(0).getCoeff3())); + + List gc2e = new LinkedList<>(); + gc2e.add(Double.valueOf(detGammaCalibrationList.get(0).getCoeff1())); + gc2e.add(Double.valueOf(detGammaCalibrationList.get(0).getCoeff2())); + gc2e.add(Double.valueOf(detGammaCalibrationList.get(0).getCoeff3())); + spectrum_group.g_c2e = gc2e; + //将新的道值对应能量值参数存储 + for (int i=0; i newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(betaEnergyList, betaChannelList); + //将公式参数放入到重新计算的参数内 + List beCal = new LinkedList<>(); + beCal.add(Double.valueOf(newFittingParaToUi.get(0))); + beCal.add(Double.valueOf(newFittingParaToUi.get(1))); + beCal.add(Double.valueOf(newFittingParaToUi.get(2))); + spectrum_group.BgCalPara.b_e_cal = beCal; + //公式C TO E参数 + List fittingPara = new LinkedList<>(); + fittingPara.add(String.valueOf(detBetaCalibrationList.get(0).getCoeff1())); + fittingPara.add(String.valueOf(detBetaCalibrationList.get(0).getCoeff2())); + fittingPara.add(String.valueOf(detBetaCalibrationList.get(0).getCoeff3())); + + List bc2e = new LinkedList<>(); + bc2e.add(Double.valueOf(detBetaCalibrationList.get(0).getCoeff1())); + bc2e.add(Double.valueOf(detBetaCalibrationList.get(0).getCoeff2())); + bc2e.add(Double.valueOf(detBetaCalibrationList.get(0).getCoeff3())); + spectrum_group.b_c2e = bc2e; + //将新的道值对应能量值参数存储 + for (int i=0; i readLine(String filePath) { List allLines = new ArrayList<>(); try { @@ -676,6 +1008,7 @@ public class PHDFileUtil extends AbstractLogOrReport { } map.put("DetBoundary", boundaryList); } + map.put("message", analyseResult.error_log); bRet = false; return bRet; } else { @@ -762,6 +1095,7 @@ public class PHDFileUtil extends AbstractLogOrReport { } map.put("DetBoundary", boundaryList); } + map.put("message", "analyse Success."); return bRet; } } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java index 943ef4b9..0baccfa7 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/GammaController.java @@ -29,21 +29,23 @@ public class GammaController { @GetMapping("initValue") @ApiOperation(value = "初始化gamma数据", notes = "初始化gamma数据") - public Result initValue(Integer sampleId, String dbName, String analyst, String fileName, HttpServletRequest request) { - return gammaService.initValue(sampleId, dbName, analyst, fileName, request); - } - - - @GetMapping("testFun") - public Result testFun(String fileName,HttpServletRequest request){ - return gammaService.testFun(fileName, request); + public void initValue(Integer sampleId, String dbName, String analyst, String fileName, HttpServletRequest request) { + gammaService.initValue(sampleId, dbName, analyst, fileName, request); } @GetMapping("gammaByDB") + @ApiOperation(value = "gamma页面loadFromDB加载数据", notes = "gamma页面loadFromDB加载数据") public Result gammaByDB(Integer sampleId, String dbName, String analyst, HttpServletRequest request){ return gammaService.gammaByDB(dbName, sampleId, analyst, request); } + @GetMapping("gammaByDBApp") + @ApiOperation(value = "gamma页面loadFromDB加载数据", notes = "gamma页面loadFromDB加载数据") + public Result gammaByDBApp(@RequestParam("sampleId") Integer sampleId,@RequestParam("dbName") String dbName, + @RequestParam("analyst") String analyst, HttpServletRequest request){ + return gammaService.gammaByDB(dbName, sampleId, analyst, request); + } + @GetMapping("gammaByFile") @ApiOperation(value = "gamma页面loadFromFile加载数据", notes = "gamma页面loadFromFile加载数据") public Result gammaByFile(String fileName, HttpServletRequest request) { @@ -56,6 +58,12 @@ public class GammaController { gammaService.delPHDCache(fileName); } + @DeleteMapping("delPHDCacheApp") + @ApiOperation(value = "删除PHD文件缓存", notes = "删除PHD文件缓存") + public void delPHDCacheApp(@RequestParam String fileName) { + gammaService.delPHDCache(fileName); + } + @GetMapping("loadSampleData") public Result loadSampleData(QueryRequest queryRequest, GardsSampleDataSpectrum gardsSampleData, String[] menuTypes, boolean AllUsers, boolean CollectStopB, boolean AcqStartB, @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate, @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate, HttpServletRequest request) { @@ -135,6 +143,14 @@ public class GammaController { return gammaService.getGammaSelPosNuclide(sampleId, fileName, channel, energy, request); } + @GetMapping("getGammaSelPosNuclideApp") + @ApiOperation(value = "gamma主页面选择channel加载对应核素信息接口", notes = "gamma主页面选择channel加载对应核素信息接口") + public Result getGammaSelPosNuclideApp(@RequestParam("sampleId") Integer sampleId,@RequestParam("fileName") String fileName, + @RequestParam("channel") int channel,@RequestParam("energy") double energy, + HttpServletRequest request) { + return gammaService.getGammaSelPosNuclide(sampleId, fileName, channel, energy, request); + } + @GetMapping("getSelPosNuclide") @ApiOperation(value = "InteractiveTool页面选择channel加载对应核素信息接口", notes = "InteractiveTool页面选择channel加载对应核素信息接口") public Result getSelPosNuclide(Integer sampleId, String fileName, int channel, HttpServletRequest request) { @@ -401,6 +417,13 @@ public class GammaController { return gammaService.peakInformation(sampleId, fileName, request); } + @GetMapping("peakInformationApp") + @ApiOperation(value = "查看Peak Information页面数据", notes = "查看Peak Information页面数据") + public Result peakInformationApp(@RequestParam("sampleId") Integer sampleId,@RequestParam("fileName") String fileName, + HttpServletRequest request){ + return gammaService.peakInformation(sampleId, fileName, request); + } + @GetMapping("exportPeakInformation") public void exportPeakInformation(Integer sampleId, String fileName, HttpServletRequest request, HttpServletResponse response){ gammaService.exportPeakInformation(sampleId, fileName, request, response); @@ -434,6 +457,14 @@ public class GammaController { return gammaService.radionuclideActivity(sampleId, fileName, request); } + @GetMapping("radionuclideActivityApp") + @ApiOperation(value = "查看Radionuclide Activity页面数据", notes = "查看Radionuclide Activity页面数据") + public Result radionuclideActivityApp(@RequestParam("sampleId") Integer sampleId, + @RequestParam("fileName") String fileName, + HttpServletRequest request) { + return gammaService.radionuclideActivity(sampleId, fileName, request); + } + @GetMapping("exportRadionuclideActivity") public void exportRadionuclideActivity(Integer sampleId, String fileName, String arTime, String crTime, diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java index c323d808..936c02e9 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java @@ -26,8 +26,8 @@ public class SpectrumAnalysesController { @GetMapping("initValue") @ApiOperation(value = "初始化数据", notes = "初始化数据") - public Result initValue(String dbName, Integer sampleId, String analyst, String sampleFileName, String gasFileName, String detFileName, String qcFileName, HttpServletRequest request) { - return spectrumAnalysisService.initValue(dbName, sampleId, analyst, sampleFileName, gasFileName, detFileName, qcFileName, request); + public void initValue(String dbName, Integer sampleId, String analyst, String sampleFileName, String gasFileName, String detFileName, String qcFileName, HttpServletRequest request) { + spectrumAnalysisService.initValue(dbName, sampleId, analyst, sampleFileName, gasFileName, detFileName, qcFileName, request); } @GetMapping("getDBSearchList") @@ -55,6 +55,13 @@ public class SpectrumAnalysesController { return spectrumAnalysisService.getDBSpectrumChart(dbName, sampleId, analyst, request); } + @GetMapping("getDBSpectrumChartApp") + @ApiOperation(value = "查询折线图相关信息接口", notes = "查询折线图相关信息接口") + public Result getDBSpectrumChartApp(@RequestParam("dbName") String dbName,@RequestParam("sampleId") Integer sampleId, + @RequestParam("analyst") String analyst, HttpServletRequest request) { + return spectrumAnalysisService.getDBSpectrumChart(dbName, sampleId, analyst, request); + } + @GetMapping("getFileSpectrumChart") @ApiOperation(value = "查询文件折线图相关信息接口", notes = "查询文件折线图相关信息接口") public Result getFileSpectrumChart(String sampleFileName, String gasFileName, String detFileName, String qcFileName, HttpServletRequest request) { @@ -67,6 +74,12 @@ public class SpectrumAnalysesController { spectrumAnalysisService.deleteSpectrumCacheData(sampleFileName, request); } + @DeleteMapping("deleteSpectrumCacheDataApp") + @ApiOperation(value = "删除缓存数据",notes = "删除缓存数据") + public void deleteSpectrumCacheDataApp(@RequestParam("sampleFileName") String sampleFileName, HttpServletRequest request) { + spectrumAnalysisService.deleteSpectrumCacheData(sampleFileName, request); + } + @GetMapping("viewComment") @ApiOperation(value = "查看comment数据", notes = "查看comment数据") public Result viewComment(Integer sampleId, String sampleFileName, HttpServletRequest request) { diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/GardsCalibrationSpectrumMapper.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/GardsCalibrationSpectrumMapper.java index 3f24e6f8..a411196d 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/GardsCalibrationSpectrumMapper.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/GardsCalibrationSpectrumMapper.java @@ -7,6 +7,9 @@ import org.jeecg.modules.base.entity.rnman.GardsCalibration; public interface GardsCalibrationSpectrumMapper extends BaseMapper { + @InterceptorIgnore(tenantLine = "true") + void insertCalibration(@Param(value = "calibration") GardsCalibration calibration); + @InterceptorIgnore(tenantLine = "true") void insertCalibrationGamma(@Param(value = "calibration") GardsCalibration calibration); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java index 7660872d..a43bad2e 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java @@ -86,11 +86,11 @@ public interface SpectrumAnalysisMapper { Integer getAnalysisID(@Param(value = "dbName") String dbName, @Param(value = "sampleId") Integer sampleId, @Param(value = "userName") String userName); - List ReadGammaFitChannelEnergy(@Param(value = "idAnalysis") Integer idAnalysis, @Param(value = "sampleId") Integer sampleId); + List ReadGammaFitChannelEnergy(@Param(value = "idAnalysis") Integer idAnalysis); List ReadGammaCalibrationParam(@Param(value = "dbName") String dbName, @Param(value = "idAnalysis") Integer idAnalysis); - List ReadBetaFitChannelEnergy(@Param(value = "idAnalysis") Integer idAnalysis, @Param(value = "sampleId") Integer sampleId); + List ReadBetaFitChannelEnergy(@Param(value = "idAnalysis") Integer idAnalysis); List ReadBetaCalibrationParam(@Param(value = "dbName") String dbName, @Param(value = "idAnalysis") Integer idAnalysis); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationSpectrumMapper.xml b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationSpectrumMapper.xml index 5f18eb40..58da4e85 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationSpectrumMapper.xml +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/GardsCalibrationSpectrumMapper.xml @@ -2,6 +2,34 @@ + + INSERT INTO + RNMAN.GARDS_CALIBRATION( + SAMPLE_ID, + IDANALYSIS, + SAMPLE_TYPE, + CALTYPE, + FUNCTION, + FUNCTIONDEF, + STARTOFRANGE, + ENDOFRANGE, + COEFF1, + COEFF2, + COEFF3) + VALUES(#{calibration.sampleId}, + #{calibration.idAnalysis}, + #{calibration.sampleType}, + #{calibration.calType}, + #{calibration.function}, + #{calibration.functionDef}, + #{calibration.startOfRange}, + #{calibration.endOfRange}, + #{calibration.coeff1}, + #{calibration.coeff2}, + #{calibration.coeff3}) + + + INSERT INTO RNMAN.GARDS_CALIBRATION( diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml index 35789a62..d41dab5d 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml @@ -619,7 +619,6 @@ CALIBRATION_PAIRS.SAMPLE_ID = SMAPLE_DATA.SAMPLE_ID AND CALIBRATION_PAIRS.SAMPLE_TYPE = 'G' AND CALIBRATION_PAIRS.IDANALYSIS = #{idAnalysis} - AND CALIBRATION_PAIRS.SAMPLE_ID = #{sampleId} ORDER BY CALIBRATION_PAIRS.IDCALPOINT ASC @@ -651,7 +650,6 @@ CALIBRATION_PAIRS.SAMPLE_ID = SMAPLE_DATA.SAMPLE_ID AND CALIBRATION_PAIRS.SAMPLE_TYPE = 'B' AND CALIBRATION_PAIRS.IDANALYSIS = #{idAnalysis} - AND CALIBRATION_PAIRS.SAMPLE_ID = #{sampleId} ORDER BY CALIBRATION_PAIRS.IDCALPOINT ASC diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java index ea573b19..642e9145 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGammaService.java @@ -15,9 +15,7 @@ import java.util.List; public interface IGammaService{ - Result initValue(Integer sampleId, String dbName, String analyst, String fileName, HttpServletRequest request); - - Result testFun(String fileName, HttpServletRequest request); + void initValue(Integer sampleId, String dbName, String analyst, String fileName, HttpServletRequest request); Result gammaByDB(String dbName, Integer sampleId, String analyst, HttpServletRequest request); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsCalibrationPairsSpectrumService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsCalibrationPairsSpectrumService.java index 508e5d9b..69a96631 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsCalibrationPairsSpectrumService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsCalibrationPairsSpectrumService.java @@ -2,6 +2,7 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.base.entity.rnman.GardsCalibrationPairs; +import org.jeecg.modules.entity.vo.BgDataAnlyseResultIn; import org.jeecg.modules.entity.vo.GStoreMiddleProcessData; import org.jeecg.modules.entity.vo.PHDFile; @@ -9,7 +10,7 @@ import java.util.List; public interface IGardsCalibrationPairsSpectrumService extends IService { - int saveGardsCalibrationPairs(List calibrationPairsList); + int saveGardsCalibrationPairs(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer gasId, Integer detId, Integer idAnalysis); int saveGardsCalibrationPairsGamma(GStoreMiddleProcessData middleData, Integer sampleId, String idAnalysis); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsCalibrationSpectrumService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsCalibrationSpectrumService.java index c76067b0..f4e2a2f7 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsCalibrationSpectrumService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsCalibrationSpectrumService.java @@ -2,13 +2,14 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.base.entity.rnman.GardsCalibration; +import org.jeecg.modules.entity.vo.BgDataAnlyseResultIn; import org.jeecg.modules.entity.vo.GStoreMiddleProcessData; import java.util.List; public interface IGardsCalibrationSpectrumService extends IService { - int saveGardsCalibration(List calibrationPairsList); + int saveGardsCalibration(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer gasId, Integer detId, Integer idAnalysis); int saveCalibrationGamma(GStoreMiddleProcessData middleData, Integer sampleId, String idAnalysis); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsROIChannelsSpectrumService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsROIChannelsSpectrumService.java index 90b781d4..a94e6f63 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsROIChannelsSpectrumService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsROIChannelsSpectrumService.java @@ -2,11 +2,12 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.base.entity.rnman.GardsRoiChannels; +import org.jeecg.modules.entity.vo.BgDataAnlyseResultIn; import java.util.List; public interface IGardsROIChannelsSpectrumService extends IService { - int saveGardsROIChannels(List roiChannelsList); + int saveGardsROIChannels(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer gasId, Integer detId, Integer idAnalysis); } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsROIResultsSpectrumService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsROIResultsSpectrumService.java index eed0f3d2..9a583e07 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsROIResultsSpectrumService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsROIResultsSpectrumService.java @@ -2,11 +2,12 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.base.entity.rnman.GardsRoiResults; +import org.jeecg.modules.entity.vo.BgDataAnlyseResultIn; import java.util.List; public interface IGardsROIResultsSpectrumService extends IService { - int saveGardsROIResults(List roiResultsList); + int saveGardsROIResults(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer idAnalysis); } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsXeResultsSpectrumService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsXeResultsSpectrumService.java index 800d3726..a6cfecae 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsXeResultsSpectrumService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IGardsXeResultsSpectrumService.java @@ -2,11 +2,12 @@ package org.jeecg.modules.service; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.base.entity.rnman.GardsXeResults; +import org.jeecg.modules.entity.vo.BgDataAnlyseResultIn; import java.util.List; public interface IGardsXeResultsSpectrumService extends IService { - int saveGardsXeResults(List xeResultsList); + int saveGardsXeResults(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer idAnalysis); } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java index 39dac872..15ff5d0a 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java @@ -14,7 +14,7 @@ import java.util.List; public interface ISpectrumAnalysisService { - Result initValue(String dbName, Integer sampleId, String analyst, String sampleFileName, String gasFileName, String detFileName, String qcFileName, HttpServletRequest request); + void initValue(String dbName, Integer sampleId, String analyst, String sampleFileName, String gasFileName, String detFileName, String qcFileName, HttpServletRequest request); Result getDBSearchList(HttpServletRequest request, boolean AllUsers, String sampleType); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java index fdafe929..761ca62a 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java @@ -156,337 +156,12 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi private IDataService dataService; @Override - public Result initValue(Integer sampleId, String dbName, String analyst, String samfileName, HttpServletRequest request) { - Result result = new Result(); - //获取用户名 - String userName = JwtUtil.getUserNameByToken(request); - Cache phdCache = localCache.getPHDCache(); - PHDFile phd = new PHDFile(); - // 读取文件内容 - String key = ""; + public void initValue(Integer sampleId, String dbName, String analyst, String samfileName, HttpServletRequest request) { if (Objects.nonNull(sampleId) && StringUtils.isNotBlank(dbName)) { - // 根据sampleId获取sample文件路径 - String sampleFilePath = spectrumAnalysisMapper.getSampleFilePath(sampleId); - if (StringUtils.isBlank(sampleFilePath)) { - result.error500("Sample file does not exist!"); - return result; - } - String pathName = ftpUtil.getFtpRootPath() + spectrumPathProperties.getSaveFilePath() + StringPool.SLASH + sampleFilePath.substring(0, sampleFilePath.lastIndexOf(StringPool.SLASH)); - String fileName = sampleFilePath.substring(sampleFilePath.lastIndexOf(StringPool.SLASH) + 1); - // 读取文件内容 - // 调用加载文件的方法 传入文件路径,文件名称,全局变量phd,响应结果result - boolean flag = gammaFileUtil.loadFile(pathName, fileName, phd, "BetaGamma", result); - // 如果文件加载失败 返回失败原因 - if (!flag) { - return result; - } - // 加载phd数据所需的lc,scac,baseline数据 - if (dbName.equals("auto")) { - gammaFileUtil.SetBaseInfo(phd, "RNAUTO"); - } else if (dbName.equals("man")) { - gammaFileUtil.SetBaseInfo(phd, analyst); - } - // 从数据库中读取phd其他相关信息 - boolean bRet = getResultFromDB(dbName, analyst, sampleId, phd, result); - if (!redisUtil.hasKey(userName+StringPool.DASH+phd.getHeader().getSystem_type()) || !redisUtil.hasKey(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list")) { - //读取缓存的全部核素信息 - Map allNuclideMap = (Map) redisUtil.get("AllNuclideMap"); - // 查询当前用户关联的核素信息 - List userLib = new LinkedList<>(); - // 从postgreSql中获取当前用户关注的核素信息 如果当前用户没有 则返回管理员的 - userLib = defaultNuclideSpectrumService.findNuclidesByUserName(userName, phd.getHeader().getSystem_type().toUpperCase()); - if (CollectionUtils.isEmpty(userLib)) { - userLib = defaultNuclideSpectrumService.findNuclidesByUserName("admin", phd.getHeader().getSystem_type().toUpperCase()); - } - userLib = userLib.stream().sorted().collect(Collectors.toList()); - Map nuclideMap = new HashMap<>(); - for (Map.Entry entry:allNuclideMap.entrySet()) { - if (userLib.contains(entry.getKey())) { - nuclideMap.put(entry.getKey(), entry.getValue()); - } - } - redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list", userLib); - redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap); - } - // 判断数据库信息是否读取正常 - if (!bRet) { - return result; - } - //读取redis缓存的计算mdc信息 - Map mdcInfoMap = (Map) redisUtil.get("mdcInfoMap-"+phd.getHeader().getSystem_type()); - //如果是数据库加载 判断如果mdc计算结果是空的 就加入新的 否则使用数据库加载的mdc数据 - if (CollectionUtils.isEmpty(phd.getMdcInfoMap())) { - if (CollectionUtils.isNotEmpty(mdcInfoMap)) { - phd.setMdcInfoMap(mdcInfoMap); - } - } else { - if (CollectionUtils.isNotEmpty(mdcInfoMap)) { - Map infoMap = phd.getMdcInfoMap(); - for (Map.Entry entry:infoMap.entrySet()) { - String nuclName = entry.getKey(); - CalMDCInfo info = mdcInfoMap.get(nuclName); - if (Objects.nonNull(info)) { - CalMDCInfo mdcInfo = entry.getValue(); - mdcInfo.setHalflife(info.getHalflife()); - } - } - } - } - gammaFileUtil.Qcstate(phd); - key = fileName + StringPool.DASH + userName; + gammaByDB(dbName, sampleId, analyst, request); } else { - String pathName = ftpUtil.getFtpRootPath() + spectrumPathProperties.getUploadPath() + StringPool.SLASH + userName; - String fileName = samfileName; - // 加载文件内容 - boolean bRet = gammaFileUtil.loadFile(pathName, fileName, phd, "BetaGamma", result); - if (!bRet) { - return result; - } - if (!redisUtil.hasKey(userName+StringPool.DASH+phd.getHeader().getSystem_type()) || !redisUtil.hasKey(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list")) { - //读取缓存的全部核素信息 - Map allNuclideMap = (Map) redisUtil.get("AllNuclideMap"); - // 查询当前用户关联的核素信息 - List userLib = new LinkedList<>(); - // 从postgreSql中获取当前用户关注的核素信息 如果当前用户没有 则返回管理员的 - userLib = defaultNuclideSpectrumService.findNuclidesByUserName(userName, phd.getHeader().getSystem_type().toUpperCase()); - if (CollectionUtils.isEmpty(userLib)) { - userLib = defaultNuclideSpectrumService.findNuclidesByUserName("admin", phd.getHeader().getSystem_type().toUpperCase()); - } - userLib = userLib.stream().sorted().collect(Collectors.toList()); - Map nuclideMap = new HashMap<>(); - for (Map.Entry entry:allNuclideMap.entrySet()) { - if (userLib.contains(entry.getKey())) { - nuclideMap.put(entry.getKey(), entry.getValue()); - } - } - redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list", userLib); - redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap); - } - //读取redis缓存的计算mdc信息 - Map mdcInfoMap = (Map) redisUtil.get("mdcInfoMap-"+phd.getHeader().getSystem_type()); - if (CollectionUtils.isNotEmpty(mdcInfoMap)) { - phd.setMdcInfoMap(mdcInfoMap); - } - key = fileName + StringPool.DASH + userName; + gammaByFile(samfileName, request); } - phdCache.put(key, phd); - localCache.setPHDCache(phdCache); - result.setSuccess(true); - result.setResult(phd); - return result; - } - - @Override - public Result testFun(String fileName, HttpServletRequest request) { - Result result = new Result(); - String userName = JwtUtil.getUserNameByToken(request); - Cache phdCache = localCache.getPHDCache(); - PHDFile phd = phdCache.getIfPresent(fileName + StringPool.DASH + userName); - phd.setUserId("1"); - phd.setXmlFilePath(parameterProperties.getFilePath()); - String systemType = fileName.substring(2, 3); - if (Objects.isNull(phd)) { - result.error500("Please select the parse file first!"); - return result; - } - Map nuclideLinesMap = (Map) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type()); - // 解析获取临时文件信息 - File tmpFile = gammaFileUtil.analyzeFile(ftpUtil.getFtpRootPath() + spectrumPathProperties.getUploadPath() + StringPool.SLASH + userName, fileName); - ObjectMapper mapper = new ObjectMapper(); - try { - String phdStr = mapper.writeValueAsString(phd); - String mapLines = mapper.writeValueAsString(nuclideLinesMap); - String strValue = CalValuesHandler.analyseSpectrum(phdStr, mapLines, tmpFile.getAbsolutePath(), new AnalysisProcess()); - Map parseMap = JSON.parseObject(strValue, Map.class); - for (Map.Entry entry : parseMap.entrySet()) { - if (entry.getKey().equalsIgnoreCase("bAnalyed")) { - boolean value = JSON.parseObject(JSON.toJSONString(entry.getValue()), Boolean.class); - phd.setBAnalyed(value); - } - if (entry.getKey().equalsIgnoreCase("mapEnerPara")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry : jsonMap.entrySet()) { - String key = objectEntry.getKey(); - ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); - value.put(key, entryValue); - } - phd.setMapEnerPara(value); - } - if (entry.getKey().equalsIgnoreCase("mapResoPara")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry : jsonMap.entrySet()) { - String key = objectEntry.getKey(); - ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); - value.put(key, entryValue); - } - phd.setMapResoPara(value); - } - if (entry.getKey().equalsIgnoreCase("mapEffiPara")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry : jsonMap.entrySet()) { - String key = objectEntry.getKey(); - ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); - value.put(key, entryValue); - } - phd.setMapEffiPara(value); - } - if (entry.getKey().equalsIgnoreCase("mapTotEPara")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry : jsonMap.entrySet()) { - String key = objectEntry.getKey(); - ParameterInfo entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), ParameterInfo.class); - value.put(key, entryValue); - } - phd.setMapTotEPara(value); - } - if (entry.getKey().equalsIgnoreCase("para_stepRatio")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setPara_stepRatio(value); - } - if (entry.getKey().equalsIgnoreCase("para_tail")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setPara_tail(value); - } - if (entry.getKey().equalsIgnoreCase("para_tailAlpha")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setPara_tailAlpha(value); - } - if (entry.getKey().equalsIgnoreCase("para_tailRight")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setPara_tailRight(value); - } - if (entry.getKey().equalsIgnoreCase("para_tailRightAlpha")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setPara_tailRightAlpha(value); - } - if (entry.getKey().equalsIgnoreCase("newEner")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setNewEner(value); - } - if (entry.getKey().equalsIgnoreCase("newReso")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setNewReso(value); - } - if (entry.getKey().equalsIgnoreCase("mapEnerKD")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry : jsonMap.entrySet()) { - String key = objectEntry.getKey(); - GEnergyBlock entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), GEnergyBlock.class); - value.put(key, entryValue); - } - phd.setMapEnerKD(value); - } - if (entry.getKey().equalsIgnoreCase("mapResoKD")) { - HashMap jsonMap = JSON.parseObject(JSON.toJSONString(entry.getValue()), HashMap.class); - Map value = new HashMap<>(); - for (Map.Entry objectEntry : jsonMap.entrySet()) { - String key = objectEntry.getKey(); - GResolutionBlock entryValue = JSON.parseObject(JSON.toJSONString(objectEntry.getValue()), GResolutionBlock.class); - value.put(key, entryValue); - } - phd.setMapResoKD(value); - } - if (entry.getKey().equalsIgnoreCase("vEnergy")) { - List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); - phd.setVEnergy(value); - } - if (entry.getKey().equalsIgnoreCase("vBase")) { - List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); - phd.setVBase(value); - } - if (entry.getKey().equalsIgnoreCase("vLc")) { - List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); - phd.setVLc(value); - } - if (entry.getKey().equalsIgnoreCase("vScac")) { - List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), Double.class); - phd.setVScac(value); - } - if (entry.getKey().equalsIgnoreCase("vPeak")) { - List value = JSON.parseArray(JSON.toJSONString(entry.getValue()), PeakInfo.class); - phd.setVPeak(value); - } - if (entry.getKey().equalsIgnoreCase("baseCtrls")) { - BaseControls value = JSON.parseObject(JSON.toJSONString(entry.getValue()), BaseControls.class); - phd.setBaseCtrls(value); - } - if (entry.getKey().equalsIgnoreCase("usedEner")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setUsedEner(value); - } - if (entry.getKey().equalsIgnoreCase("usedEnerKD")) { - GEnergyBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), GEnergyBlock.class); - phd.setUsedEnerKD(value); - } - if (entry.getKey().equalsIgnoreCase("usedEnerPara")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setUsedEnerPara(value); - } - if (entry.getKey().equalsIgnoreCase("usedReso")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setUsedReso(value); - } - if (entry.getKey().equalsIgnoreCase("usedResoKD")) { - GResolutionBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), GResolutionBlock.class); - phd.setUsedResoKD(value); - } - if (entry.getKey().equalsIgnoreCase("usedResoPara")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setUsedResoPara(value); - } - if (entry.getKey().equalsIgnoreCase("usedEffi")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setUsedEffi(value); - } - if (entry.getKey().equalsIgnoreCase("usedEffiKD")) { - GEfficiencyBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), GEfficiencyBlock.class); - phd.setUsedEffiKD(value); - } - if (entry.getKey().equalsIgnoreCase("usedEffiPara")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setUsedEffiPara(value); - } - if (entry.getKey().equalsIgnoreCase("usedTotE")) { - String value = JSON.parseObject(JSON.toJSONString(entry.getValue()), String.class); - phd.setUsedTotE(value); - } - if (entry.getKey().equalsIgnoreCase("usedTotEKD")) { - TotaleffBlock value = JSON.parseObject(JSON.toJSONString(entry.getValue()), TotaleffBlock.class); - phd.setUsedTotEKD(value); - } - if (entry.getKey().equalsIgnoreCase("usedTotEPara")) { - ParameterInfo value = JSON.parseObject(JSON.toJSONString(entry.getValue()), ParameterInfo.class); - phd.setUsedTotEPara(value); - } - } - BeanUtils.copyProperties(phd.getSetting(), phd.getUsedSetting()); - - for (PeakInfo info:phd.getVPeak()) { - if (Objects.isNull(info.recoilBetaChan)) { - info.recoilBetaChan = "nan"; - } - if (Objects.isNull(info.recoilDeltaChan)) { - info.recoilDeltaChan = "nan"; - } - } - // 重新分析各峰值对应的核素信息 - gammaFileUtil.NuclidesIdent(phd, nuclideLinesMap); - gammaFileUtil.RunQC(phd); - result.setResult(phd); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } finally { - if (Objects.nonNull(tmpFile)) { - tmpFile.delete(); - } - } - result.setSuccess(true); - return result; } @Override @@ -547,6 +222,9 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list", userLib); redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap); } + //缓存phd谱的核素信息 + Map phdNuclideMap = (Map) redisUtil.get(userName + StringPool.DASH + phd.getHeader().getSystem_type()); + phd.setPhdNuclideMap(phdNuclideMap); // 判断数据库信息是否读取正常 if (!bRet) { return result; @@ -951,6 +629,9 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list", userLib); redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap); } + //缓存phd谱的核素信息 + Map phdNuclideMap = (Map) redisUtil.get(userName + StringPool.DASH + phd.getHeader().getSystem_type()); + phd.setPhdNuclideMap(phdNuclideMap); //读取redis缓存的计算mdc信息 Map mdcInfoMap = (Map) redisUtil.get("mdcInfoMap-"+phd.getHeader().getSystem_type()); if (CollectionUtils.isNotEmpty(mdcInfoMap)) { @@ -1335,6 +1016,9 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi result.error500(warning); } else if (flag == -1) { Map nuclideLinesMap = (Map) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type()); + //分析时将phd的核素map重置 + phd.setPhdNuclideMap(nuclideLinesMap); + //重新计算核素的活度浓度 gammaFileUtil.NuclidesIdent(phd, nuclideLinesMap); gammaFileUtil.RunQC(phd); phd.setEfficiencyParam(phd.getUsedEffiPara().getP()); @@ -1350,29 +1034,36 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi result.error500(warning); } else { Map nuclideLinesMap = (Map) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type()); - gammaFileUtil.AnalyseSpectrum(phd, nuclideLinesMap); - // 重新分析各峰值对应的核素信息 -// gammaFileUtil.NuclidesIdent(phd, nuclideLinesMap); - phd.setEfficiencyParam(phd.getUsedEffiPara().getP()); - phd.setEfficiencyEnergy(phd.getUsedEffiKD().getG_energy()); - phd.setEfficiencyCurRow(0); - // 重新计算峰值 - Map nuclideLinesMDCMap = (Map) redisUtil.get("AllNuclideMap"); - gammaFileUtil.getNuclideMDCValue(phd, phd.getMdcInfoMap(), nuclideLinesMDCMap); - Map map = new HashMap<>(); - gammaFileUtil.UpdateChart(phd, map, colorMap); - // 更新 ‘QC Flags’ 状态 - phd.getQcItems().clear(); - List qcstate = gammaFileUtil.Qcstate(phd); - map.put("QCFlag", qcstate); - map.put("bAnalyed", phd.isBAnalyed()); - map.put("peak", phd.getVPeak()); - map.put("BaseCtrls", phd.getBaseCtrls()); - // Bar Chart 柱状图 - List differance = gammaFileUtil.Differance(phd, phd.getVPeak()); - map.put("barChart", differance); - result.setSuccess(true); - result.setResult(map); + //分析时将phd的核素map重置 + phd.setPhdNuclideMap(nuclideLinesMap); + //调用分析算法 + boolean analyseSpectrum = gammaFileUtil.AnalyseSpectrum(phd, nuclideLinesMap); + if (analyseSpectrum) { + // 重新分析各峰值对应的核素信息 +// gammaFileUtil.NuclidesIdent(phd, nuclideLinesMap); + phd.setEfficiencyParam(phd.getUsedEffiPara().getP()); + phd.setEfficiencyEnergy(phd.getUsedEffiKD().getG_energy()); + phd.setEfficiencyCurRow(0); + // 重新计算峰值 + Map nuclideLinesMDCMap = (Map) redisUtil.get("AllNuclideMap"); + gammaFileUtil.getNuclideMDCValue(phd, phd.getMdcInfoMap(), nuclideLinesMDCMap); + Map map = new HashMap<>(); + gammaFileUtil.UpdateChart(phd, map, colorMap); + // 更新 ‘QC Flags’ 状态 + phd.getQcItems().clear(); + List qcstate = gammaFileUtil.Qcstate(phd); + map.put("QCFlag", qcstate); + map.put("bAnalyed", phd.isBAnalyed()); + map.put("peak", phd.getVPeak()); + map.put("BaseCtrls", phd.getBaseCtrls()); + // Bar Chart 柱状图 + List differance = gammaFileUtil.Differance(phd, phd.getVPeak()); + map.put("barChart", differance); + result.setSuccess(true); + result.setResult(map); + } else { + result.error500("There is a problem with the current phd file, Analysis failure!"); + } } return result; } @@ -1738,7 +1429,7 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi return result; } //获取缓存的核素信息 - Map nuclideMap = (Map) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type()); + Map nuclideMap = phd.getPhdNuclideMap(); //获取颜色信息 Map colorMap = sysUserColorService.initColor(userName); //声明一个结果的map @@ -1785,7 +1476,6 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi phd.getVPeak().remove(curRow); //重新计算核素活度浓度 gammaFileUtil.NuclidesIdent(phd, nuclideMap); - redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap); //重新分析数据 gammaFileUtil.PeaksChanged(phd); for (int i = 0; i < phd.getVPeak().size(); i++) { @@ -2008,6 +1698,8 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi phd.getVPeak().get(curRow).nuclides.add(nuclideName); // 查询当前用户所关心的核素名称 Map mapNucLines = (Map) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type()); + //用户当前缓存的核素信息 + Map phdNuclideMap = phd.getPhdNuclideMap(); // 查询出核素信息 NuclideLines it_line = mapNucLines.get(nuclideName); // 如果核素信息不存在返回 @@ -2026,6 +1718,12 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi map.put("identify", list_identify); List vPeak = gammaFileUtil.InitPeakTable(phd.getVPeak()); map.put("table", vPeak); + //如果当前缓存的谱核素信息不包含当前核素 + if (Objects.isNull(phdNuclideMap.get(nuclideName))) { + //将redis缓存的谱核素信息 存入到缓存map中 + phdNuclideMap.put(nuclideName, it_line); + phd.setPhdNuclideMap(phdNuclideMap); + } result.setSuccess(true); result.setResult(map); return result; @@ -2044,7 +1742,7 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi return result; } Map map = new HashMap<>(); - Map nuclideMap = (Map) redisUtil.get(userName+StringPool.DASH+phd.getHeader().getSystem_type()); + Map nuclideMap = phd.getPhdNuclideMap(); //判断当前选择的核素名称是否包含在当前Peak的核素列表中 int index = list_identify.indexOf(nuclideName); if (index >= 0) { @@ -2075,7 +1773,6 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi nuclideMap.remove(nuclideName); //重新计算核素活度浓度 gammaFileUtil.NuclidesIdent(phd, nuclideMap); - redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap); //从核素的选中列表中移除对应下标的核素信息 list_identify.remove(index); //重新初始化峰列表信息 @@ -2091,6 +1788,13 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi List vPeak = gammaFileUtil.InitPeakTable(phd.getVPeak()); // 处理核素MDA、MDC gammaFileUtil.ReCalcMdaMdc(phd, nuclideName, curRow + 1); + // 谱的峰信息通过stream流过滤出包含当前核素名称的峰信息 + List peakInfoList = phd.getVPeak().stream().filter(item -> item.nuclides.indexOf(nuclideName) >= 0).collect(Collectors.toList()); + //过滤结果小于等于0 则说明当前核素在峰值中不存在了 需要从缓存的核素信息map中移除核素 + if (peakInfoList.size() <= 0) { + //移除核素信息 + nuclideMap.remove(nuclideName); + } map.put("identify", list_identify); map.put("table", vPeak); } @@ -4147,6 +3851,7 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi } redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type()+"-list", userLib); redisUtil.set(userName+StringPool.DASH+phd.getHeader().getSystem_type(), nuclideMap); + phd.setPhdNuclideMap(nuclideMap); } else { result.success("Modification failure!"); } @@ -4411,6 +4116,7 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi @Override public Result Spectrum(Integer sampleId, String fileName, HttpServletRequest request) { Result result = new Result(); + Map map = new HashMap<>(); String userName = JwtUtil.getUserNameByToken(request); Cache phdCache = localCache.getPHDCache(); PHDFile phd = phdCache.getIfPresent(fileName + StringPool.DASH + userName); @@ -4419,8 +4125,13 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi return result; } String spectrum = gammaFileUtil.makeUpSpectrum(phd); + map.put("Spectrum", spectrum); + if(StringUtils.isNotBlank(phd.getTmpFilePath())) { + List lines = gammaFileUtil.readLine(phd.getTmpFilePath()); + map.put("phdSpectrum", lines); + } result.setSuccess(true); - result.setResult(spectrum); + result.setResult(map); return result; } @@ -5001,8 +4712,16 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi //格式化名称 Map nameMap = nameStandUtil.NameStandard(phd); String mSaveFileName = nameMap.get("saveFile"); + String dateTimeSubdir = ""; + int pos = mSaveFileName.indexOf('-'); + if(-1 == pos) { + + } else if(fileName.length() >= pos+7) { + dateTimeSubdir+=StringPool.SLASH+fileName.substring(pos+1,pos+5); + dateTimeSubdir+=StringPool.SLASH+fileName.substring(pos+5,pos+7); + } //判断当前分析员是否有过历史分析当前文件 - Integer isExist = spectrumAnalysisMapper.SampleIsExist(sysTemSubdir+ dateTypeSubdir + StringPool.SLASH + mSaveFileName, userName); + Integer isExist = spectrumAnalysisMapper.SampleIsExist(sysTemSubdir+ dateTypeSubdir + dateTimeSubdir + StringPool.SLASH + mSaveFileName, userName); // 如果用户没有权限操作 则查看当前用户是否是高级分析员/管理员 if (!bAnalysisResultWriteAuthority && Objects.isNull(isExist)) { result.error500("You have no permission to save "+phd.getHeader().getSite_code()+" results to DB!"); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsSpectrumServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsSpectrumServiceImpl.java index 0f70be56..210e7cc2 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsSpectrumServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationPairsSpectrumServiceImpl.java @@ -4,6 +4,10 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.base.entity.rnman.GardsCalibrationPairs; +import org.jeecg.modules.base.enums.CalName; +import org.jeecg.modules.base.enums.CalType; +import org.jeecg.modules.base.enums.SystemType; +import org.jeecg.modules.entity.vo.BgDataAnlyseResultIn; import org.jeecg.modules.entity.vo.GStoreMiddleProcessData; import org.jeecg.modules.entity.vo.PHDFile; import org.jeecg.modules.entity.GardsCalibrationPairsSpectrum; @@ -22,7 +26,92 @@ public class GardsCalibrationPairsSpectrumServiceImpl extends ServiceImpl calibrationPairsList) { + public int saveGardsCalibrationPairs(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer gasId, Integer detId, Integer idAnalysis) { + List calibrationPairsList = new LinkedList<>(); + if (CollectionUtils.isNotEmpty(anlyseResultIn.getB_channel_sample())) { + for (int i=0; i< anlyseResultIn.getB_channel_sample().size(); i++){ + GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); + calibrationPairs.setSampleId(sampleId); + calibrationPairs.setIdAnalysis(idAnalysis); + calibrationPairs.setSampleType(SystemType.BETA.getType()); + calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); + calibrationPairs.setInput(CalName.CalPHD.getType()); + calibrationPairs.setIdCalPoint(i); + calibrationPairs.setXValue(anlyseResultIn.getB_channel_sample().get(i)); + calibrationPairs.setYValue(anlyseResultIn.getB_energy_sample().get(i)); + calibrationPairsList.add(calibrationPairs); + } + } + if (CollectionUtils.isNotEmpty(anlyseResultIn.getG_channel_sample())) { + for (int i=0; i< anlyseResultIn.getG_channel_sample().size(); i++){ + GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); + calibrationPairs.setSampleId(sampleId); + calibrationPairs.setIdAnalysis(idAnalysis); + calibrationPairs.setSampleType(SystemType.GAMMA.getType()); + calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); + calibrationPairs.setInput(CalName.CalPHD.getType()); + calibrationPairs.setIdCalPoint(i); + calibrationPairs.setXValue(anlyseResultIn.getG_channel_sample().get(i)); + calibrationPairs.setYValue(anlyseResultIn.getG_energy_sample().get(i)); + calibrationPairsList.add(calibrationPairs); + } + } + if (CollectionUtils.isNotEmpty(anlyseResultIn.getB_channel_gas())) { + for (int i=0; i< anlyseResultIn.getB_channel_gas().size(); i++){ + GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); + calibrationPairs.setSampleId(gasId); + calibrationPairs.setIdAnalysis(idAnalysis); + calibrationPairs.setSampleType(SystemType.BETA.getType()); + calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); + calibrationPairs.setInput(CalName.CalPHD.getType()); + calibrationPairs.setIdCalPoint(i); + calibrationPairs.setXValue(anlyseResultIn.getB_channel_gas().get(i)); + calibrationPairs.setYValue(anlyseResultIn.getB_energy_gas().get(i)); + calibrationPairsList.add(calibrationPairs); + } + } + if (CollectionUtils.isNotEmpty(anlyseResultIn.getG_channel_gas())) { + for (int i=0; i< anlyseResultIn.getG_channel_gas().size(); i++){ + GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); + calibrationPairs.setSampleId(gasId); + calibrationPairs.setIdAnalysis(idAnalysis); + calibrationPairs.setSampleType(SystemType.GAMMA.getType()); + calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); + calibrationPairs.setInput(CalName.CalPHD.getType()); + calibrationPairs.setIdCalPoint(i); + calibrationPairs.setXValue(anlyseResultIn.getG_channel_gas().get(i)); + calibrationPairs.setYValue(anlyseResultIn.getG_energy_gas().get(i)); + calibrationPairsList.add(calibrationPairs); + } + } + if (CollectionUtils.isNotEmpty(anlyseResultIn.getB_channel_det())) { + for (int i=0; i< anlyseResultIn.getB_channel_det().size(); i++){ + GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); + calibrationPairs.setSampleId(detId); + calibrationPairs.setIdAnalysis(idAnalysis); + calibrationPairs.setSampleType(SystemType.BETA.getType()); + calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); + calibrationPairs.setInput(CalName.CalPHD.getType()); + calibrationPairs.setIdCalPoint(i); + calibrationPairs.setXValue(anlyseResultIn.getB_channel_det().get(i)); + calibrationPairs.setYValue(anlyseResultIn.getB_energy_det().get(i)); + calibrationPairsList.add(calibrationPairs); + } + } + if (CollectionUtils.isNotEmpty(anlyseResultIn.getG_channel_det())) { + for (int i=0; i< anlyseResultIn.getG_channel_det().size(); i++){ + GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); + calibrationPairs.setSampleId(detId); + calibrationPairs.setIdAnalysis(idAnalysis); + calibrationPairs.setSampleType(SystemType.GAMMA.getType()); + calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); + calibrationPairs.setInput(CalName.CalPHD.getType()); + calibrationPairs.setIdCalPoint(i); + calibrationPairs.setXValue(anlyseResultIn.getG_channel_det().get(i)); + calibrationPairs.setYValue(anlyseResultIn.getG_energy_det().get(i)); + calibrationPairsList.add(calibrationPairs); + } + } if (CollectionUtils.isNotEmpty(calibrationPairsList)) { this.saveBatch(calibrationPairsList); } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationSpectrumServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationSpectrumServiceImpl.java index ba21ac82..dd4f6f30 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationSpectrumServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsCalibrationSpectrumServiceImpl.java @@ -4,6 +4,12 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.base.entity.rnman.GardsCalibration; +import org.jeecg.modules.base.enums.CalType; +import org.jeecg.modules.base.enums.DataTypeAbbr; +import org.jeecg.modules.base.enums.FittingType; +import org.jeecg.modules.base.enums.SystemType; +import org.jeecg.modules.entity.GardsCalibrationSpectrum; +import org.jeecg.modules.entity.vo.BgDataAnlyseResultIn; import org.jeecg.modules.entity.vo.GStoreMiddleProcessData; import org.jeecg.modules.mapper.GardsCalibrationSpectrumMapper; import org.jeecg.modules.service.IGardsCalibrationSpectrumService; @@ -12,6 +18,8 @@ import org.springframework.transaction.annotation.Transactional; import java.util.LinkedList; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; @Service("gardsCalibrationSpectrumService") @DS("ora") @@ -20,11 +28,116 @@ public class GardsCalibrationSpectrumServiceImpl extends ServiceImpl calibrationPairsList) { - if (CollectionUtils.isNotEmpty(calibrationPairsList)) { - this.saveBatch(calibrationPairsList); + public int saveGardsCalibration(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer gasId, Integer detId, Integer idAnalysis) { + List calibrationSpectrumList = new LinkedList<>(); + if (Objects.nonNull(sampleId)) { + GardsCalibration calibrationB = new GardsCalibration(); + calibrationB.setSampleId(sampleId); + calibrationB.setIdAnalysis(idAnalysis); + calibrationB.setSampleType(SystemType.BETA.getType()); + calibrationB.setCalType(CalType.ENERGY_CAL.getType()); + calibrationB.setFunction(FittingType.POLY2.getCode()); + calibrationB.setFunctionDef(FittingType.POLY2.getDescription()); + calibrationB.setStartOfRange(0); + calibrationB.setEndOfRange(1); + List betaCollect = anlyseResultIn.getBetaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + GardsCalibrationSpectrum betaCalibrationSpectrum = betaCollect.get(0); + calibrationB.setCoeff1(Double.valueOf(betaCalibrationSpectrum.getCoeff1())); + calibrationB.setCoeff2(Double.valueOf(betaCalibrationSpectrum.getCoeff2())); + calibrationB.setCoeff3(Double.valueOf(betaCalibrationSpectrum.getCoeff3())); + calibrationSpectrumList.add(calibrationB); + + GardsCalibration calibrationG = new GardsCalibration(); + calibrationG.setSampleId(sampleId); + calibrationG.setIdAnalysis(idAnalysis); + calibrationG.setSampleType(SystemType.GAMMA.getType()); + calibrationG.setCalType(CalType.ENERGY_CAL.getType()); + calibrationG.setFunction(FittingType.POLY2.getCode()); + calibrationG.setFunctionDef(FittingType.POLY2.getDescription()); + calibrationG.setStartOfRange(0); + calibrationG.setEndOfRange(1); + List gammaCollect = anlyseResultIn.getGammaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + GardsCalibrationSpectrum gammaCalibrationSpectrum = gammaCollect.get(0); + calibrationG.setCoeff1(Double.valueOf(gammaCalibrationSpectrum.getCoeff1())); + calibrationG.setCoeff2(Double.valueOf(gammaCalibrationSpectrum.getCoeff2())); + calibrationG.setCoeff3(Double.valueOf(gammaCalibrationSpectrum.getCoeff3())); + calibrationSpectrumList.add(calibrationG); } - return calibrationPairsList.size(); + + if (Objects.nonNull(gasId)) { + //gas文件 Beta部分 + GardsCalibration calibrationB = new GardsCalibration(); + calibrationB.setSampleId(gasId); + calibrationB.setIdAnalysis(idAnalysis); + calibrationB.setSampleType(SystemType.BETA.getType()); + calibrationB.setCalType(CalType.ENERGY_CAL.getType()); + calibrationB.setFunction(FittingType.POLY2.getCode()); + calibrationB.setFunctionDef(FittingType.POLY2.getDescription()); + calibrationB.setStartOfRange(0); + calibrationB.setEndOfRange(1); + List betaCollect = anlyseResultIn.getBetaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + GardsCalibrationSpectrum betaCalibrationSpectrum = betaCollect.get(0); + calibrationB.setCoeff1(Double.valueOf(betaCalibrationSpectrum.getCoeff1())); + calibrationB.setCoeff2(Double.valueOf(betaCalibrationSpectrum.getCoeff2())); + calibrationB.setCoeff3(Double.valueOf(betaCalibrationSpectrum.getCoeff3())); + calibrationSpectrumList.add(calibrationB); + //gas文件 gamma部分 + GardsCalibration calibrationG = new GardsCalibration(); + calibrationG.setSampleId(gasId); + calibrationG.setIdAnalysis(idAnalysis); + calibrationG.setSampleType(SystemType.GAMMA.getType()); + calibrationG.setCalType(CalType.ENERGY_CAL.getType()); + calibrationG.setFunction(FittingType.POLY2.getCode()); + calibrationG.setFunctionDef(FittingType.POLY2.getDescription()); + calibrationG.setStartOfRange(0); + calibrationG.setEndOfRange(1); + List gammaCollect = anlyseResultIn.getGammaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + GardsCalibrationSpectrum gammaCalibrationSpectrum = gammaCollect.get(0); + calibrationG.setCoeff1(Double.valueOf(gammaCalibrationSpectrum.getCoeff1())); + calibrationG.setCoeff2(Double.valueOf(gammaCalibrationSpectrum.getCoeff2())); + calibrationG.setCoeff3(Double.valueOf(gammaCalibrationSpectrum.getCoeff3())); + calibrationSpectrumList.add(calibrationG); + } + + if (Objects.nonNull(detId)) { + GardsCalibration calibrationB = new GardsCalibration(); + calibrationB.setSampleId(detId); + calibrationB.setIdAnalysis(idAnalysis); + calibrationB.setSampleType(SystemType.BETA.getType()); + calibrationB.setCalType(CalType.ENERGY_CAL.getType()); + calibrationB.setFunction(FittingType.POLY2.getCode()); + calibrationB.setFunctionDef(FittingType.POLY2.getDescription()); + calibrationB.setStartOfRange(0); + calibrationB.setEndOfRange(1); + List betaCollect = anlyseResultIn.getBetaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); + GardsCalibrationSpectrum betaCalibrationSpectrum = betaCollect.get(0); + calibrationB.setCoeff1(Double.valueOf(betaCalibrationSpectrum.getCoeff1())); + calibrationB.setCoeff2(Double.valueOf(betaCalibrationSpectrum.getCoeff2())); + calibrationB.setCoeff3(Double.valueOf(betaCalibrationSpectrum.getCoeff3())); + calibrationSpectrumList.add(calibrationB); + GardsCalibration calibrationG = new GardsCalibration(); + calibrationG.setSampleId(detId); + calibrationG.setIdAnalysis(idAnalysis); + calibrationG.setSampleType(SystemType.GAMMA.getType()); + calibrationG.setCalType(CalType.ENERGY_CAL.getType()); + calibrationG.setFunction(FittingType.POLY2.getCode()); + calibrationG.setFunctionDef(FittingType.POLY2.getDescription()); + calibrationG.setStartOfRange(0); + calibrationG.setEndOfRange(1); + List gammaCollect = anlyseResultIn.getGammaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); + GardsCalibrationSpectrum gammaCalibrationSpectrum = gammaCollect.get(0); + calibrationG.setCoeff1(Double.valueOf(gammaCalibrationSpectrum.getCoeff1())); + calibrationG.setCoeff2(Double.valueOf(gammaCalibrationSpectrum.getCoeff2())); + calibrationG.setCoeff3(Double.valueOf(gammaCalibrationSpectrum.getCoeff3())); + calibrationSpectrumList.add(calibrationG); + } + + if (CollectionUtils.isNotEmpty(calibrationSpectrumList)) { + for (GardsCalibration calibration:calibrationSpectrumList) { + this.baseMapper.insertCalibration(calibration); + } + } + return calibrationSpectrumList.size(); } @Override diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsROIChannelsSpectrumServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsROIChannelsSpectrumServiceImpl.java index 3ef84935..6cf29d63 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsROIChannelsSpectrumServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GardsROIChannelsSpectrumServiceImpl.java @@ -4,12 +4,18 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.modules.base.entity.rnman.GardsRoiChannels; +import org.jeecg.modules.base.enums.DataType; +import org.jeecg.modules.base.enums.DataTypeAbbr; +import org.jeecg.modules.entity.GardsROIChannelsSpectrum; +import org.jeecg.modules.entity.vo.BgDataAnlyseResultIn; import org.jeecg.modules.mapper.GardsROIChannelsSpectrumMapper; import org.jeecg.modules.service.IGardsROIChannelsSpectrumService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; @Service("roiChannelsService") @DS("ora") @@ -17,7 +23,49 @@ public class GardsROIChannelsSpectrumServiceImpl extends ServiceImpl roiChannelsList) { + public int saveGardsROIChannels(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer gasId, Integer detId, Integer idAnalysis) { + List roiChannelsList = new LinkedList<>(); + List roiChannelsSpectrumList = anlyseResultIn.getRoiChannelsSpectrumList(); + //过滤出sample相关的数据 + List sampleRoiChannelsSpectrumList = roiChannelsSpectrumList.stream().filter(item-> item.getDataType().equals(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + for (int i=0; i gasRoiChannelsSpectrumList = roiChannelsSpectrumList.stream().filter(item-> item.getDataType().equals(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + for (int i=0; i detRoiChannelsSpectrumList = roiChannelsSpectrumList.stream().filter(item-> item.getDataType().equals(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); + for (int i=0; i implements IGardsROIResultsSpectrumService { @Override - public int saveGardsROIResults(List roiResultsList) { + public int saveGardsROIResults(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer idAnalysis) { + List roiResultsList = new LinkedList<>(); + List roiResultsSpectrumList = anlyseResultIn.getRoiResultsSpectrumList(); + for (int i=0; i xeResultsList) { + public int saveGardsXeResults(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer idAnalysis) { + List xeResultsList = anlyseResultIn.getXeData(); + for (GardsXeResults xeResults:xeResultsList) { + xeResults.setIdAnalysis(idAnalysis); + xeResults.setSampleId(sampleId); + } if (CollectionUtils.isNotEmpty(xeResultsList)) { this.saveBatch(xeResultsList); } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java index a34c2cce..51df6917 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java @@ -14,7 +14,6 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.cache.Cache; import com.google.common.collect.Maps; -import io.swagger.models.auth.In; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.shiro.SecurityUtils; @@ -44,7 +43,6 @@ import org.jeecg.modules.native_jni.struct.BgAnalyseResult; import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; import org.jeecg.modules.service.*; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.thymeleaf.TemplateEngine; @@ -122,14 +120,25 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements private NameStandUtil nameStandUtil; @Autowired private IDataService dataService; + @Autowired + private IGardsCalibrationPairsSpectrumService gardsCalibrationPairsSpectrumService; + @Autowired + private IGardsCalibrationSpectrumService gardsCalibrationSpectrumService; + @Autowired + private IGardsROIChannelsSpectrumService gardsROIChannelsSpectrumService; + @Autowired + private IGardsXeResultsSpectrumService gardsXeResultsSpectrumService; + @Autowired + private IGardsROIResultsSpectrumService gardsROIResultsSpectrumService; + @Override - public Result initValue(String dbName, Integer sampleId, String analyst, String sampleFileName, String gasFileName, String detFileName, String qcFileName, HttpServletRequest request) { + public void initValue(String dbName, Integer sampleId, String analyst, String sampleFileName, String gasFileName, String detFileName, String qcFileName, HttpServletRequest request) { if (StringUtils.isNotBlank(dbName) && Objects.nonNull(sampleId)) { - return getDBSpectrumChart(dbName, sampleId, analyst, request); + getDBSpectrumChart(dbName, sampleId, analyst, request); } else { - return getFileSpectrumChart(sampleFileName, gasFileName, detFileName, qcFileName, request); + getFileSpectrumChart(sampleFileName, gasFileName, detFileName, qcFileName, request); } } @@ -476,8 +485,8 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements roiChannelsSpectrumList = spectrumAnalysisMapper.ReadROIChannels("RNAUTO", analysisID, sampleId); roiResultsSpectrumList = spectrumAnalysisMapper.ReadROIResults("RNAUTO", analysisID, sampleId); } else { - gammaCalibrationPairsList = spectrumAnalysisMapper.ReadGammaFitChannelEnergy(analysisID, sampleId); - betaCalibrationPairsList = spectrumAnalysisMapper.ReadBetaFitChannelEnergy(analysisID, sampleId); + gammaCalibrationPairsList = spectrumAnalysisMapper.ReadGammaFitChannelEnergy(analysisID); + betaCalibrationPairsList = spectrumAnalysisMapper.ReadBetaFitChannelEnergy(analysisID); xeResultsSpectrumList = spectrumAnalysisMapper.ReadXeResults(dbName, analysisID, sampleId); gammaCalibrationSpectrumList = spectrumAnalysisMapper.ReadGammaCalibrationParam("RNMAN", analysisID); betaCalibrationSpectrumList = spectrumAnalysisMapper.ReadBetaCalibrationParam("RNMAN", analysisID); @@ -486,18 +495,39 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements } //给公用变量赋值sampleId betaDataFile.setSampleId(String.valueOf(sampleId)); - //用于记录文件路径信息 - List filePaths = new LinkedList<>(); //判断sample信息是否存在 if (Objects.nonNull(sample)) { betaDataFile.setSampleFilePathName(ftpUtil.getFtpRootPath() + spectrumPathProperties.getSaveFilePath() + StringPool.SLASH +dbSpectrumFilePath.getSampleFilePath()); betaDataFile.setSampleFileName(sampleFileName); sampleTmp = ftpUtil.downloadFile(betaDataFile.getSampleFilePathName(), "betaGamma"); if (Objects.nonNull(sampleTmp)) { + //sample临时文件路径存储 betaDataFile.setSampleTmpPath(sampleTmp.getAbsolutePath()); + //获取smaple文件解析结果 EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(sampleTmp.getAbsolutePath()); betaDataFile.setSampleStruct(struct); + //处理解析结果 sampleMap = phdFileUtil.getSourceData(struct, sample.getSampleId(), sample.getStatus(), "sample", betaDataFile); + //更新边界值 + if (CollectionUtils.isNotEmpty(roiChannelsSpectrumList)) { + //将数据库的roi范围重新赋值 + List sampleRoiChannel = roiChannelsSpectrumList.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(sampleRoiChannel)) { + //更新边界值 + phdFileUtil.updateBoundary(betaDataFile, "sample", sampleRoiChannel, sampleMap); + } + } + //更新gamma道值-能量折线图 + if (CollectionUtils.isNotEmpty(gammaCalibrationPairsList) && CollectionUtils.isNotEmpty(betaCalibrationPairsList)) { + //过滤出sample的gamma的参数 + List sampleGammaCalibrationPairs = gammaCalibrationPairsList.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + //过滤出sample的beta的参数 + List sampleBetaCalibrationPairs = betaCalibrationPairsList.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + //更新道值-能量折线图 + if (CollectionUtils.isNotEmpty(sampleGammaCalibrationPairs) && CollectionUtils.isNotEmpty(sampleBetaCalibrationPairs)) { + phdFileUtil.updateEnergyData(betaDataFile, "sample", sampleGammaCalibrationPairs, sampleBetaCalibrationPairs, sampleMap); + } + } sampleMap.put("fileName", betaDataFile.getSampleFileName()); resultMap.put("sample",sampleMap); } @@ -508,10 +538,33 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements betaDataFile.setGasFileName(gasFileName); gasTmp = ftpUtil.downloadFile(betaDataFile.getGasFilePathName(), "betaGamma"); if (Objects.nonNull(gasTmp)) { + //存储gas临时文件路径 betaDataFile.setGasTmpPath(gasTmp.getAbsolutePath()); + //获取gas文件解析结果 EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(gasTmp.getAbsolutePath()); betaDataFile.setGasStruct(struct); + //处理gas文件解析结果 gasBgMap = phdFileUtil.getSourceData(struct, gasBg.getSampleId(), gasBg.getStatus(), "gas", betaDataFile); + //更新边界值 + if (CollectionUtils.isNotEmpty(roiChannelsSpectrumList)) { + //将数据库的roi范围重新赋值 + List gasRoiChannel = roiChannelsSpectrumList.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(gasRoiChannel)) { + //更新边界值 + phdFileUtil.updateBoundary(betaDataFile, "gas", gasRoiChannel, gasBgMap); + } + } + //更新gamma道值-能量折线图 + if (CollectionUtils.isNotEmpty(gammaCalibrationPairsList) && CollectionUtils.isNotEmpty(betaCalibrationPairsList)) { + //过滤出sample的gamma的参数 + List gasGammaCalibrationPairs = gammaCalibrationPairsList.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + //过滤出sample的beta的参数 + List gasBetaCalibrationPairs = betaCalibrationPairsList.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + //更新道值-能量折线图 + if (CollectionUtils.isNotEmpty(gasGammaCalibrationPairs) && CollectionUtils.isNotEmpty(gasBetaCalibrationPairs)) { + phdFileUtil.updateEnergyData(betaDataFile, "gas", gasGammaCalibrationPairs, gasBetaCalibrationPairs, gasBgMap); + } + } gasBgMap.put("fileName", betaDataFile.getGasFileName()); resultMap.put("gasBg",gasBgMap); } @@ -522,10 +575,33 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements betaDataFile.setDetFileName(detFileName); detTmp = ftpUtil.downloadFile(betaDataFile.getDetFilePathName(), "betaGamma"); if (Objects.nonNull(detTmp)) { + //存储det临时文件路径 betaDataFile.setDetTmpPath(detTmp.getAbsolutePath()); + //获取det文件解析结果 EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(detTmp.getAbsolutePath()); betaDataFile.setDetStruct(struct); + //处理det文件解析结果 detBgMap = phdFileUtil.getSourceData(struct, detBg.getSampleId(), detBg.getStatus(), "det", betaDataFile); + //更新边界值 + if (CollectionUtils.isNotEmpty(roiChannelsSpectrumList)) { + //将数据库的roi范围重新赋值 + List detRoiChannel = roiChannelsSpectrumList.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(detRoiChannel)) { + //更新边界值 + phdFileUtil.updateBoundary(betaDataFile, "det", detRoiChannel, detBgMap); + } + } + //更新gamma道值-能量折线图 + if (CollectionUtils.isNotEmpty(gammaCalibrationPairsList) && CollectionUtils.isNotEmpty(betaCalibrationPairsList)) { + //过滤出sample的gamma的参数 + List detGammaCalibrationPairs = gammaCalibrationPairsList.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); + //过滤出sample的beta的参数 + List detBetaCalibrationPairs = betaCalibrationPairsList.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); + //更新道值-能量折线图 + if (CollectionUtils.isNotEmpty(detGammaCalibrationPairs) && CollectionUtils.isNotEmpty(detBetaCalibrationPairs)) { + phdFileUtil.updateEnergyData(betaDataFile, "det", detGammaCalibrationPairs, detBetaCalibrationPairs, detBgMap); + } + } detBgMap.put("fileName", betaDataFile.getDetFileName()); resultMap.put("detBg",detBgMap); } @@ -544,6 +620,8 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements resultMap.put("qc",qcMap); } } + //更新缓存数据对应的缓存数据 + phdFileUtil.createBgCalPara(betaDataFile, gammaCalibrationSpectrumList, betaCalibrationSpectrumList, gammaCalibrationPairsList, betaCalibrationPairsList); } else { xeResultsSpectrumList = betaDataFile.getXeResultsSpectrumList(); sampleMap = loadData("sample", betaDataFile); @@ -568,13 +646,10 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements Double mdc = xeData.getMdc(); if (conc < 0){ xeData.setColor("red"); - xeData.setNidFlag(0); } else if (0 mdc) { xeData.setColor("green"); - xeData.setNidFlag(1); } xeData.setMdc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getMdc())))); xeData.setConc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConc())))); @@ -698,13 +773,10 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements Double mdc = xeData.getMdc(); if (conc < 0){ xeData.setColor("red"); - xeData.setNidFlag(0); } else if (0 mdc) { xeData.setColor("green"); - xeData.setNidFlag(1); } xeData.setMdc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getMdc())))); xeData.setConc(Double.valueOf(NumberFormatUtil.numberSixLen(String.valueOf(xeData.getConc())))); @@ -950,9 +1022,9 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements if (betaDataFile.isSaveAnalysisResult()) { //对分析后的内容进行数据获取 List channelsSpectrums = betaDataFile.getRoiChannelsSpectrumList(); - List roiChannelsSpectrumsSample = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase("S")).collect(Collectors.toList()); - List roiChannelsSpectrumsGas = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase("G")).collect(Collectors.toList()); - List roiChannelsSpectrumsDet = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase("D")).collect(Collectors.toList()); + List roiChannelsSpectrumsSample = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + List roiChannelsSpectrumsGas = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + List roiChannelsSpectrumsDet = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); List resultsSpectrums = betaDataFile.getRoiResultsSpectrumList(); List xeResultsSpectrums = betaDataFile.getXeResultsSpectrumList(); for (int i=0; i gammaCalibrationParamList = betaDataFile.getGammaCalibrationSpectrumList(); List gammaCalibrationSpectrumEList = betaDataFile.getGammaCalibrationSpectrumEList(); for (int i=0; i betaCalibrationParamList = betaDataFile.getBetaCalibrationSpectrumList(); List betaCalibrationSpectrumEList = betaDataFile.getBetaCalibrationSpectrumEList(); for (int i=0; i gCounts = struct.g_counts; List gammaParam = EnergySpectrumHandler.GetFileFittingPara(gCentroidChannel, gEnergy); - //计算Calibration Parameter Of Gamma Detector + //根据道值和能量的对应关系 存储表单数据 List oldScatterSeries = new LinkedList<>(); for (int i=0; i fittingPara = EnergySpectrumHandler.GetFileFittingPara(gCentroidChannel, gEnergy); List fittingParaStr = new LinkedList<>(); for (Double para:fittingPara) { @@ -1824,7 +1897,9 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements for (int i=0; i<255; ++i) { channel.add(Double.valueOf(i)); } + //计算出新的道值对应能量值 List energy = EnergySpectrumHandler.GetFileFittingData(channel, fittingPara); + //根据道值和能量对应关系 封装折线图数据 List oldLineSeries = new LinkedList<>(); for (int i=0; i fittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(gEnergy, gCentroidChannel); List fittingParaToUiStr = new LinkedList<>(); for (Double para:fittingParaToUi) { fittingParaToUiStr.add(String.valueOf(para)); } map.put("EToC", fittingParaToUiStr); - //Figure of Gamma Detector Calibration + //计算道值对应能量值参数 List gchannels = new ArrayList<>(); List> gammaEnergyList = new LinkedList<>(); for (int i=0; i xs = new LinkedList(); + //存储计算参数能量值 + List ys = new LinkedList<>(); + //存储所有道值 + List channels = new LinkedList<>(); + //存储所有的能量值 + List> energyList = new LinkedList<>(); + //存储新的线点能量值 + List newLineSeries = new LinkedList<>(); + //存储新的表单能量值 + List tableWidgets = new LinkedList(); + //存储新的公式参数C TO E + List newFittingParaStr = new LinkedList<>(); + //存储新的公式参数E TO C + List newFittingParaToUiStr = new LinkedList<>(); + //记录点值数组 + List newSeriseDataList = new LinkedList<>(); + //遍历临时点数组 将点位的横坐标以及纵坐标封装到对应的数组 + for (int i=0; i newFittingPara = EnergySpectrumHandler.GetFileFittingPara(xs, ys); + for (Double para:newFittingPara) { + newFittingParaStr.add(String.valueOf(para)); + } + map.put("newCToE", newFittingParaStr); + //填充道值数组的数据 + for (int i=0; i<255; i++) { + channels.add(Double.valueOf(i)); + } + //计算道值的能量 + List energys = EnergySpectrumHandler.GetFileFittingData(channels,newFittingPara); + //根据临时点的道值修改对应能量值 + //遍历所有道值 + for (int i=0; i< channels.size(); i++) { + //获取道值 + double newChannel = channels.get(i).doubleValue(); + //遍历临时点数据 + for (int j=0; j newEnergy = new LinkedList<>(); + newEnergy.add(calEnergy); + energyList.add(newEnergy); + } + //遍历道值添加各道值对应点数据到数组 + for (int i=0; i newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(ys, xs); + for (Double para:newFittingParaToUi) { + newFittingParaToUiStr.add(String.valueOf(para)); + } + map.put("newEToC", newFittingParaToUiStr); + } + //计算得到的 if (betaDataFile.getGammaList().size() <= 0 ) { betaDataFile.setGammaList(oldScatterSeries); @@ -2010,6 +2176,96 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements } map.put("EToC", fittingParaToUiStr); + //判断人工交互的道值与能量对应参数数组是否为空 + if (Objects.nonNull(betaDataFile.getBgPara()) && CollectionUtils.isNotEmpty(betaDataFile.getBetaList())) { + //存储计算参数道值 + List xs = new LinkedList(); + //存储计算参数能量值 + List ys = new LinkedList<>(); + //存储所有道值 + List channels = new LinkedList<>(); + //存储所有的能量值 + List> energyList = new LinkedList<>(); + //存储新的线点能量值 + List newLineSeries = new LinkedList<>(); + //存储新的表单能量值 + List tableWidgets = new LinkedList(); + //存储新的公式参数C TO E + List newFittingParaStr = new LinkedList<>(); + //存储新的公式参数E TO C + List newFittingParaToUiStr = new LinkedList<>(); + //记录点值数组 + List newSeriseDataList = new LinkedList<>(); + //遍历临时点数组 将点位的横坐标以及纵坐标封装到对应的数组 + for (int i=0; i newFittingPara = EnergySpectrumHandler.GetFileFittingPara(xs, ys); + for (Double para:newFittingPara) { + newFittingParaStr.add(String.valueOf(para)); + } + map.put("newCToE", newFittingParaStr); + //填充道值数组的数据 + for (int i=0; i<255; i++) { + channels.add(Double.valueOf(i)); + } + //计算道值的能量 + List energys = EnergySpectrumHandler.GetFileFittingData(channels,newFittingPara); + //根据临时点的道值修改对应能量值 + //遍历所有道值 + for (int i=0; i< channels.size(); i++) { + //获取道值 + double newChannel = channels.get(i).doubleValue(); + //遍历临时点数据 + for (int j=0; j newEnergy = new LinkedList<>(); + newEnergy.add(calEnergy); + energyList.add(newEnergy); + } + //遍历道值添加各道值对应点数据到数组 + for (int i=0; i newFittingParaToUi = EnergySpectrumHandler.GetFileFittingPara(ys, xs); + for (Double para:newFittingParaToUi) { + newFittingParaToUiStr.add(String.valueOf(para)); + } + map.put("newEToC", newFittingParaToUiStr); + } + if (betaDataFile.getBetaList().size()<=0) { betaDataFile.setBetaList(oldScatterSeries); } @@ -3038,17 +3294,11 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements return result; } map = BetaGammaAnalyzeCurrentProcess(analyseData, betaDataFile); - map.put("bProcessed", true); - map.put("savedAnalysisResult", true); result.setSuccess(true); result.setResult(map); } else if ("AllSpectrum".equals(analyseData.getApplyType())) { //获取当前选中的文件名称 map = BetaGammaAnalyzeAllProcess(analyseData, userName, currentFileName); - if (CollectionUtils.isNotEmpty(map)) { - map.put("bProcessed", true); - map.put("savedAnalysisResult", true); - } result.setSuccess(true); result.setResult(map); } @@ -3243,6 +3493,8 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements betaDataFile.setSaveAnalysisResult(true); betaDataFile.setBgPara(spectrum_group.BgCalPara); } + xeMap.put("bProcessed", true); + xeMap.put("savedAnalysisResult", true); } else { List sampleBoundary = (List) xeMap.get("SampleBoundary"); if(CollectionUtils.isNotEmpty(sampleBoundary)) { @@ -3260,7 +3512,11 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements if(CollectionUtils.isNotEmpty(qcBoundary)) { betaDataFile.setQcBoundary(qcBoundary); } + betaDataFile.setBProcessed(false); + betaDataFile.setSaveAnalysisResult(false); xeMap.put("XeData", Collections.EMPTY_LIST); + xeMap.put("bProcessed", false); + xeMap.put("savedAnalysisResult", false); } } } catch (Exception e) { @@ -3474,6 +3730,8 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements sampleBetaData.setSaveAnalysisResult(true); sampleBetaData.setBgPara(spectrum_group.BgCalPara); } + xeMap.put("bProcessed", true); + xeMap.put("savedAnalysisResult", true); analyseResultMap.put(sampleFileName, xeMap); } else { List sampleBoundary = (List) xeMap.get("SampleBoundary"); @@ -3492,7 +3750,11 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements if(CollectionUtils.isNotEmpty(qcBoundary)) { sampleBetaData.setQcBoundary(qcBoundary); } + sampleBetaData.setBProcessed(false); + sampleBetaData.setSaveAnalysisResult(false); xeMap.put("XeData", Collections.EMPTY_LIST); + xeMap.put("bProcessed", false); + xeMap.put("savedAnalysisResult", false); analyseResultMap.put(sampleFileName, xeMap); } } @@ -3601,8 +3863,27 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements map.put("savedAnalysisResult", true); } } else { - map.clear(); + List sampleBoundary = (List) map.get("SampleBoundary"); + if(CollectionUtils.isNotEmpty(sampleBoundary)) { + betaDataFile.setSampleBoundary(sampleBoundary); + } + List gasBoundary = (List) map.get("GasBoundary"); + if(CollectionUtils.isNotEmpty(gasBoundary)) { + betaDataFile.setGasBoundary(gasBoundary); + } + List detBoundary = (List) map.get("DetBoundary"); + if(CollectionUtils.isNotEmpty(detBoundary)) { + betaDataFile.setDetBoundary(detBoundary); + } + List qcBoundary = (List) map.get("QCBoundary"); + if(CollectionUtils.isNotEmpty(qcBoundary)) { + betaDataFile.setQcBoundary(qcBoundary); + } map.put("XeData", Collections.EMPTY_LIST); + betaDataFile.setBProcessed(false); + betaDataFile.setSaveAnalysisResult(false); + map.put("bProcessed", false); + map.put("savedAnalysisResult", false); } } catch (Exception e) { e.printStackTrace(); @@ -3724,6 +4005,10 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements betaDataFile.setQcBoundary(qcBoundary); } map.put("XeData", Collections.EMPTY_LIST); + betaDataFile.setBProcessed(false); + betaDataFile.setSaveAnalysisResult(false); + map.put("bProcessed", false); + map.put("savedAnalysisResult", false); mapList.put(sampleFileName, map); } } @@ -3827,6 +4112,11 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements //从本地缓存获取beta gamma的数组 Cache cache = betaCache.getBetaCache(); BetaDataFile betaDataFile = cache.getIfPresent(anlyseResultIn.getSampleFileName() + "-" + userName); + //判断保存分析结果标识 + if (Objects.nonNull(betaDataFile) && !betaDataFile.isSaveAnalysisResult()) { + result.error500("Please first Analyse File!"); + return result; + } List betaList = new LinkedList<>(); List betaFittingPara = new LinkedList<>(); List gammaList = new LinkedList<>(); @@ -3858,8 +4148,6 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements if (userStation.contains(String.valueOf(stationId))) { bAnalysisResultWriteAuthority = true; } - //获取ROI Limit数据 -// getROILimit(anlyseResultIn); //根据sample文件名称模糊查询sampleId if (StringUtils.isNotBlank(betaDataFile.getSampleFilePathName())) { anlyseResultIn.setSampleFilePath(betaDataFile.getSampleFilePathName().substring(0, betaDataFile.getSampleFilePathName().lastIndexOf(StringPool.SLASH))); @@ -3900,7 +4188,7 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements //处理数据 获取对应的channel/energy值 getChannelAndEnergy(anlyseResultIn, betaList, gammaList, betaDataFile); //分析文件内容 - analyzePHDFile(anlyseResultIn, BgCalPara, betaFittingPara, gammaFittingPara, betaDataFile); + analyzePHDFile(anlyseResultIn, betaDataFile); //判断文件是否存储过 如果没有则解析文件并进行存储 if ( !OriginalDataStore(betaDataFile, "gas", gasFilePathName) ){ result.error500("gasFile save failed"); @@ -3968,85 +4256,57 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements GardsAnalysesSpectrum analysis = spectrumAnalysisMapper.getAnalysis("RNMAN.GARDS_ANALYSES", sampleId, userName); Integer idAnalysis = analysis.getIdAnalysis(); //获取sample,gas,det三个文件分别对应的beta,gamma数据集合 - List calibrationPairsList = getCalibrationPairs(anlyseResultIn, sampleId, gasId, detId, idAnalysis); //如果分析过--删除GARDS_CALIBRATION_PAIRS表数据 新增GARDS_CALIBRATION_PAIRS表数据 if (Objects.nonNull(isExist)){ //根据idAnalysis删除GARDS_CALIBRATION_PAIRS表数据 spectrumAnalysisMapper.deleteCalibrationPairs(idAnalysis); //遍历新增GARDS_CALIBRATION_PAIRS表数据 - for (GardsCalibrationPairs calibrationPairs:calibrationPairsList) { - spectrumAnalysisMapper.insertCalibrationPairs(calibrationPairs); - } + gardsCalibrationPairsSpectrumService.saveGardsCalibrationPairs(anlyseResultIn, sampleId, gasId, detId, idAnalysis); }else {//如果没有分析过--新增GARDS_CALIBRATION_PAIRS表数据 //遍历新增GARDS_CALIBRATION_PAIRS表数据 - for (GardsCalibrationPairs calibrationPairs:calibrationPairsList) { - spectrumAnalysisMapper.insertCalibrationPairs(calibrationPairs); - } + gardsCalibrationPairsSpectrumService.saveGardsCalibrationPairs(anlyseResultIn, sampleId, gasId, detId, idAnalysis); } //gards_calibration 数据表 - List calibrationList = getCalibration(anlyseResultIn, sampleId, gasId, detId, idAnalysis); //判断是否分析过 - if (Objects.nonNull(isExist)) { + if (Objects.nonNull(isExist)) { //删除Gards_Calibration表数据 spectrumAnalysisMapper.deleteCalibration(idAnalysis); //新增Gards_Calibration表数据数据 - for (GardsCalibration calibration:calibrationList) { - spectrumAnalysisMapper.insertCalibration(calibration); - } + gardsCalibrationSpectrumService.saveGardsCalibration(anlyseResultIn, sampleId, gasId, detId, idAnalysis); } else { //新增Gards_Calibration表数据数据 - for (GardsCalibration calibration:calibrationList) { - spectrumAnalysisMapper.insertCalibration(calibration); - } + gardsCalibrationSpectrumService.saveGardsCalibration(anlyseResultIn, sampleId, gasId, detId, idAnalysis); } //gards_roi_channels数据表 - List roiChannelsList = new LinkedList<>(); - getROIChannel(sampleId, idAnalysis, anlyseResultIn.getRoiChannelsSpectrumList(), roiChannelsList, DataTypeAbbr.SAMPLEPHD.getType()); - getROIChannel(gasId, idAnalysis, anlyseResultIn.getRoiChannelsSpectrumList(), roiChannelsList, DataTypeAbbr.GASBKPHD.getType()); - getROIChannel(detId, idAnalysis, anlyseResultIn.getRoiChannelsSpectrumList(), roiChannelsList, DataTypeAbbr.DETBKPHD.getType()); //如果分析过数据 if (Objects.nonNull(isExist)){ //删除gards_roi_channels数据表数据 spectrumAnalysisMapper.deleteROIChannels(idAnalysis); //新增gards_roi_channels数据表数据 - for (GardsRoiChannels roiChannels:roiChannelsList) { - spectrumAnalysisMapper.insertROIChannels(roiChannels); - } + gardsROIChannelsSpectrumService.saveGardsROIChannels(anlyseResultIn, sampleId, gasId, detId, idAnalysis); }else {//没有分析过 //新增gards_roi_channels数据表数据 - for (GardsRoiChannels roiChannels:roiChannelsList) { - spectrumAnalysisMapper.insertROIChannels(roiChannels); - } + gardsROIChannelsSpectrumService.saveGardsROIChannels(anlyseResultIn, sampleId, gasId, detId, idAnalysis); } //gards_Xe_results数据表 - List xeResultsList = getXeResults(anlyseResultIn, sampleId, idAnalysis); if(Objects.nonNull(isExist)) { //删除gards_Xe_results数据表数据 spectrumAnalysisMapper.deleteXeResult(idAnalysis); //新增gards_Xe_results数据表数据 - for (GardsXeResults xeResults:xeResultsList) { - spectrumAnalysisMapper.insertXeResult(xeResults); - } + gardsXeResultsSpectrumService.saveGardsXeResults(anlyseResultIn, sampleId, idAnalysis); } else { //新增gards_Xe_results数据表数据 - for (GardsXeResults xeResults:xeResultsList) { - spectrumAnalysisMapper.insertXeResult(xeResults); - } + gardsXeResultsSpectrumService.saveGardsXeResults(anlyseResultIn, sampleId, idAnalysis); } //gards_roi_results数据表 - List roiResultsSpectrumList = getROIResult(anlyseResultIn.getRoiResultsSpectrumList(), sampleId, idAnalysis); if(Objects.nonNull(isExist)) { //删除gards_roi_results数据表数据 spectrumAnalysisMapper.deleteROIResults(idAnalysis); //新增gards_roi_results数据表数据 - for (GardsRoiResults roiResults:roiResultsSpectrumList) { - spectrumAnalysisMapper.insertROIResults(roiResults); - } + gardsROIResultsSpectrumService.saveGardsROIResults(anlyseResultIn, sampleId, idAnalysis); } else { //新增gards_roi_results数据表数据 - for (GardsRoiResults roiResults:roiResultsSpectrumList) { - spectrumAnalysisMapper.insertROIResults(roiResults); - } + gardsROIResultsSpectrumService.saveGardsROIResults(anlyseResultIn, sampleId, idAnalysis); } //上传本次文件到ftp人工交互存储路径下 try { @@ -4072,12 +4332,13 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements String logFileName = analyses_absolute_LogPath.substring(analyses_absolute_LogPath.lastIndexOf(StringPool.SLASH)+1); //获取日志的文件存放路径 String logFilePath = parameterProperties.getLogFilePath() + File.separator + DateUtils.formatDate(new Date(), "yyyy-MM-dd"); + String localLogName = betaDataFile.getSampleFileName().replace("PHD", "log"); //判断文件路径是否存在 File logPath = new File(logFilePath); if (!logPath.exists()) { logPath.mkdirs(); } - File logFile = new File(logFilePath + File.separator +logFileName); + File logFile = new File(logFilePath + File.separator +localLogName); try { //判断日志文件是否存在 如果不存在创建一个空的文件 上传到ftp if (!logFile.exists()) { @@ -4134,6 +4395,191 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements return result; } + @Transactional + public boolean OriginalDataStore(BetaDataFile betaDataFile, String type, String filePathName) { + //根据新的文件路径名称查询数据是否存在 + GardsSampleData isExist = spectrumAnalysisMapper.findSampleByFile(filePathName); + //如果数据已经存入过数据库 则 修改状态后返回 + if (Objects.nonNull(isExist)){ + //如果文件已经存入过数据库则修改状态 + spectrumAnalysisMapper.updateAnalysesStatus(filePathName); + return true; + } + //读取文件内容 + EnergySpectrumStruct sourceData = null; + File file = null; + try { + if (Objects.nonNull(betaDataFile)){ + + if (type.equalsIgnoreCase("sample")) { + file = new File(betaDataFile.getSampleTmpPath()); + sourceData = betaDataFile.getSampleStruct(); + } else if (type.equalsIgnoreCase("gas")) { + file = new File(betaDataFile.getGasTmpPath()); + sourceData = betaDataFile.getGasStruct(); + } else if (type.equalsIgnoreCase("det")) { + file = new File(betaDataFile.getDetTmpPath()); + sourceData = betaDataFile.getDetStruct(); + } else if (type.equalsIgnoreCase("qc")) { + file = new File(betaDataFile.getQcTmpPath()); + sourceData = betaDataFile.getQcStruct(); + } + //获取文件中块名信息 + List readLines = getFileBlockList(file); + //查询台站id + Integer stationId = spectrumAnalysisMapper.getStationId(sourceData.site_code); + Integer detectorId = spectrumAnalysisMapper.getDetectorId(sourceData.detector_code); + if(Objects.isNull(stationId) || Objects.isNull(detectorId)) { + String error = "get station_id or detect_id error"; + return false; + } + //新增Gards_Sample_Data表数据 + sampleDataSpectrumService.saveSampleData(sourceData, stationId, detectorId, filePathName, readLines); + //获取sampleId + Integer sampleId = spectrumAnalysisMapper.getSampleId(filePathName); + //存储Gards_Sample_Aux表数据 + sampleAuxSpectrumService.saveSampleAux(sourceData, sampleId, readLines); + //判断文件是否包含Comment块 新增Gards_Description数据 + if (readLines.contains(SampleFileHeader.COMMENT.getMessage())){ + sampleDescriptionSpectrumService.saveSampleDescription(sourceData, sampleId); + } + //判断文件是否包含Certificate块 新增Gards_Sample_Cert数据 + if (readLines.contains(SampleFileHeader.CERTIFICATE.getMessage())){ + sampleCertSpectrumService.saveSampleCert(sourceData, sampleId); + sampleCertLineSpectrumService.saveSampleCertLine(sourceData, sampleId); + } + //新增Gards_Calibration_Pairs_Orig数据 + calibrationPairsOrigSpectrumService.saveGardsCalibrationPairsOrig(sourceData, sampleId, readLines); + //判断文件是否包含b-gEfficiency块 新增Gards_Sample_Cert数据 + if (readLines.contains(SampleFileHeader.BGEFFICIENCY.getMessage())){ + bgEfficiencyPairsSpectrumService.saveBgEfficiencyPairs(sourceData, sampleId); + } + //判断文件是否包含TotalEff块 新增Gards_Sample_Cert数据 + if (readLines.contains(SampleFileHeader.TOTALEFF.getMessage())){ + totalEfficiencyPairsSpectrumService.saveTotalEfficiencyPairs(sourceData, sampleId); + } + //判断文件是否包含Ratios块 新增Gards_Sample_Ratios数据 + if (readLines.contains(SampleFileHeader.RATIOS.getMessage())){ + sampleRatiosSpectrumService.saveSampleRatios(sourceData, sampleId); + } + //判断是否包含ROI_Limits块 新增Gards_ROI_Limits数据 + if (readLines.contains(SampleFileHeader.ROILIMITS.getMessage())){ + roiLimitsSpectrumService.saveRoiLimits(sourceData, sampleId); + } + //新增Gards_Spectrum数据 + spectrumService.saveSpectrum(sourceData, sampleId, readLines, filePathName); + //判断是否包含Histogram块 新增Gards_Histogram数据 + if (readLines.contains(SampleFileHeader.HISTOGRAM.getMessage())){ + histogramService.saveHistogram(sourceData, sampleId, filePathName); + } + } + return true; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public List getFileBlockList(File file) { + List readLines = new LinkedList<>(); + try { + List allLines = FileUtils.readLines(file, "UTF-8"); + for (String line:allLines) { + if (line.contains("#")){ + readLines.add(line); + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } + return readLines; + } + + public SpectrumData getSpectrumData(Integer sampleId, BetaDataFile betaDataFile, String type) { + //根据 sampleId获取sampleData的数据内容 + GardsSampleDataSpectrum sampleData = spectrumAnalysisMapper.getSampleData(sampleId); + File file = null; + EnergySpectrumStruct struct = null; + if (type.equalsIgnoreCase("sample")) { + file = new File(betaDataFile.getSampleTmpPath()); + struct = betaDataFile.getSampleStruct(); + } else if (type.equalsIgnoreCase("gas")) { + file = new File(betaDataFile.getGasTmpPath()); + struct = betaDataFile.getGasStruct(); + } else if (type.equalsIgnoreCase("det")) { + file = new File(betaDataFile.getDetTmpPath()); + struct = betaDataFile.getDetStruct(); + } else if (type.equalsIgnoreCase("qc")) { + file = new File(betaDataFile.getQcTmpPath()); + struct = betaDataFile.getQcStruct(); + } + SpectrumData spectrumData = new SpectrumData(); + try { + //封装散点图下的基础数据信息 + //Station Code + String stationCode = struct.site_code; + //Detector Code + String detectorCode = struct.detector_code; + //Data Type + String dataType = struct.data_type; + //Collection Start + Date CollectionStart = null; + if ( StringUtils.isNotBlank(struct.collection_start_date) && StringUtils.isNotBlank(struct.collection_start_time) ){ + CollectionStart = DateUtils.parseDate(struct.collection_start_date + StringPool.SPACE + struct.collection_start_time); + } + //Collection Stop + Date CollectionStop = null; + if ( StringUtils.isNotBlank(struct.collection_stop_date) && StringUtils.isNotBlank(struct.collection_stop_time) ){ + CollectionStop = DateUtils.parseDate(struct.collection_stop_date + StringPool.SPACE + struct.collection_stop_time); + } + //Collection Time + String CollectionTime = ""; + if ( Objects.nonNull(CollectionStart) && Objects.nonNull(CollectionStop) ){ + CollectionTime = String.format ("%.2f",Double.valueOf(CollectionStop.getTime()/1000 - CollectionStart.getTime()/ 1000)); + } + //Acquisition Start + Date AcquisitionStart = null; + if ( StringUtils.isNotBlank(struct.collection_start_date) && StringUtils.isNotBlank(struct.collection_start_time) ){ + AcquisitionStart = DateUtils.parseDate(struct.acquisition_start_date + StringPool.SPACE + struct.acquisition_start_time); + } + //Acq Real Time + double AcquisitionRealTime = struct.acquisition_real_time; + //Acq live Time + double AcquisitionLiveTime = struct.acquisition_live_time; + //Air Volume[m3] + double airVolume = struct.air_volume; + //Xe Volume[m3] + double xeVolume = struct.sample_volume_of_Xe; + //xeCollectionYield + double xeCollectionYield = struct.Xe_collection_yield; + //gasBkMeasurementId + String gasBkMeasurementId = struct.gas_bk_measurement_id; + //detectorBkMeasurementId + String detectorBkMeasurementId = struct.detector_bk_measurement_id; + //measurementId + String measurementId = struct.measurement_id; + spectrumData.setSampleId(sampleId); + spectrumData.setStatus(sampleData.getStatus()); + spectrumData.setStationCode(stationCode); + spectrumData.setDetectorCode(detectorCode); + spectrumData.setDataType(dataType); + spectrumData.setCollectionStart(CollectionStart); + spectrumData.setCollectionStop(CollectionStop); + spectrumData.setCollectionTime(CollectionTime); + spectrumData.setAcquisitionStart(AcquisitionStart); + spectrumData.setAcquisitionRealTime(String.format("%.2f", AcquisitionRealTime)); + spectrumData.setAcquisitionLiveTime(String.format("%.2f", AcquisitionLiveTime)); + spectrumData.setAirVolume(String.format("%.5f", airVolume)); + spectrumData.setXeVolume(String.format("%.5f", xeVolume)); + spectrumData.setYield(xeCollectionYield); + spectrumData.setGasBkMeasurementId(gasBkMeasurementId); + spectrumData.setDetectorBkMeasurementId(detectorBkMeasurementId); + spectrumData.setMeasurementId(measurementId); + } catch (ParseException e) { + throw new RuntimeException(e); + } + return spectrumData; + } + /** * 分析成功数据发送到Redis */ @@ -4350,9 +4796,9 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements if (betaDataFile.isSaveAnalysisResult()) { //对分析后的内容进行数据获取 List channelsSpectrums = betaDataFile.getRoiChannelsSpectrumList(); - List roiChannelsSpectrumsSample = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase("S")).collect(Collectors.toList()); - List roiChannelsSpectrumsGas = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase("G")).collect(Collectors.toList()); - List roiChannelsSpectrumsDet = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase("D")).collect(Collectors.toList()); + List roiChannelsSpectrumsSample = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); + List roiChannelsSpectrumsGas = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); + List roiChannelsSpectrumsDet = channelsSpectrums.stream().filter(item -> item.getDataType().equalsIgnoreCase(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); List resultsSpectrums = betaDataFile.getRoiResultsSpectrumList(); List xeResultsSpectrums = betaDataFile.getXeResultsSpectrumList(); for (int i=0; i gammaCalibrationParamList = betaDataFile.getGammaCalibrationSpectrumList(); List gammaCalibrationSpectrumEList = betaDataFile.getGammaCalibrationSpectrumEList(); for (int i=0; i betaCalibrationParamList = betaDataFile.getBetaCalibrationSpectrumList(); List betaCalibrationSpectrumEList = betaDataFile.getBetaCalibrationSpectrumEList(); for (int i=0; i betaList, List gammaList, BetaDataFile betaDataFile) { - File sampleTmp = null; - File gasTmp = null; - File detTmp = null; - try { - //获取ftp文件路径下临时文件 - sampleTmp = new File(betaDataFile.getSampleTmpPath()); - gasTmp = new File(betaDataFile.getGasTmpPath()); - detTmp = new File(betaDataFile.getDetTmpPath()); - //如果勾选了Energy Calibration页面下sample Data - if (Objects.nonNull(sampleTmp)) { - if(anlyseResultIn.isCheckSample()) { - EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(sampleTmp.getAbsolutePath()); - //没有点击过Energy Calibration页面下Gamma Detector Calibration的fitting按钮 channel/energy数据读取文件 如果点击过数据来源页面 - if (!anlyseResultIn.isBGammaEnergyValidSample()){ - anlyseResultIn.setG_channel_sample(sourceData.g_centroid_channel); - anlyseResultIn.setG_energy_sample(sourceData.g_energy); - } else { - List channels = gammaList.stream().map(SeriseData::getX).collect(Collectors.toList()); - anlyseResultIn.setG_channel_sample(channels); - List energys = gammaList.stream().map(SeriseData::getY).collect(Collectors.toList()); - anlyseResultIn.setG_energy_sample(energys); - } - //没有点击过Energy Calibration页面下Beta Detector Calibration的fitting按钮 channel/energy数据读取文件 如果点击过数据来源页面 - if (!anlyseResultIn.isBBetaEnergyValidSample()){ - anlyseResultIn.setB_channel_sample(sourceData.b_channel); - anlyseResultIn.setB_energy_sample(sourceData.b_electron_energy); - } else { - List channels = betaList.stream().map(SeriseData::getX).collect(Collectors.toList()); - anlyseResultIn.setB_channel_sample(channels); - List energys = betaList.stream().map(SeriseData::getY).collect(Collectors.toList()); - anlyseResultIn.setB_energy_sample(energys); - } - } else {//如果没有勾选Energy Calibration页面下sample Data - EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(sampleTmp.getAbsolutePath()); + //获取ftp文件路径下临时文件 + String sampleTmp = betaDataFile.getSampleTmpPath(); + String gasTmp = betaDataFile.getGasTmpPath(); + String detTmp = betaDataFile.getDetTmpPath(); + BgCalibratePara bgPara = betaDataFile.getBgPara(); + //如果勾选了Energy Calibration页面下sample Data + if (StringUtils.isNotBlank(sampleTmp)) { + //判断是否进行了重新分析操作 + if(Objects.nonNull(bgPara) && bgPara.bApplyNewCalicSample) { + EnergySpectrumStruct sourceData = betaDataFile.getSampleStruct(); + //如果gamma的能量分析页面 没有勾选sample 并且gamma数组是空的 存储文件中的数据 + if (!anlyseResultIn.isBGammaEnergyValidSample() && CollectionUtils.isEmpty(gammaList)){ anlyseResultIn.setG_channel_sample(sourceData.g_centroid_channel); anlyseResultIn.setG_energy_sample(sourceData.g_energy); + } else { + List channels = gammaList.stream().map(SeriseData::getX).collect(Collectors.toList()); + anlyseResultIn.setG_channel_sample(channels); + List energys = gammaList.stream().map(SeriseData::getY).collect(Collectors.toList()); + anlyseResultIn.setG_energy_sample(energys); + } + //如果beta的能量分析页面 没有勾选sample 并且beta数组是空的 存储文件中的数据 + if (!anlyseResultIn.isBBetaEnergyValidSample() && CollectionUtils.isEmpty(betaList)){ anlyseResultIn.setB_channel_sample(sourceData.b_channel); anlyseResultIn.setB_energy_sample(sourceData.b_electron_energy); - } - } - if (Objects.nonNull(gasTmp)) { - if (anlyseResultIn.isCheckGas()) { - EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(gasTmp.getAbsolutePath()); - if (!anlyseResultIn.isBGammaEnergyValidGas()){ - anlyseResultIn.setG_channel_gas(sourceData.g_centroid_channel); - anlyseResultIn.setG_energy_gas(sourceData.g_energy); - } else { - List channels = gammaList.stream().map(SeriseData::getX).collect(Collectors.toList()); - anlyseResultIn.setG_channel_gas(channels); - List energys = gammaList.stream().map(SeriseData::getY).collect(Collectors.toList()); - anlyseResultIn.setG_energy_gas(energys); - } - if (!anlyseResultIn.isBBetaEnergyValidGas()){ - anlyseResultIn.setB_channel_gas(sourceData.b_channel); - anlyseResultIn.setB_energy_gas(sourceData.b_electron_energy); - } else { - List channels = betaList.stream().map(SeriseData::getX).collect(Collectors.toList()); - anlyseResultIn.setB_channel_gas(channels); - List energys = betaList.stream().map(SeriseData::getY).collect(Collectors.toList()); - anlyseResultIn.setB_energy_gas(energys); - } } else { - EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(gasTmp.getAbsolutePath()); + List channels = betaList.stream().map(SeriseData::getX).collect(Collectors.toList()); + anlyseResultIn.setB_channel_sample(channels); + List energys = betaList.stream().map(SeriseData::getY).collect(Collectors.toList()); + anlyseResultIn.setB_energy_sample(energys); + } + } else {//如果没有勾选Energy Calibration页面下sample Data + EnergySpectrumStruct sourceData = betaDataFile.getSampleStruct(); + anlyseResultIn.setG_channel_sample(sourceData.g_centroid_channel); + anlyseResultIn.setG_energy_sample(sourceData.g_energy); + anlyseResultIn.setB_channel_sample(sourceData.b_channel); + anlyseResultIn.setB_energy_sample(sourceData.b_electron_energy); + } + } + if (StringUtils.isNotBlank(gasTmp)) { + if (Objects.nonNull(bgPara) && bgPara.bApplyNewCalicGasBg) { + EnergySpectrumStruct sourceData = betaDataFile.getGasStruct(); + //如果gamma的能量分析页面 没有勾选gas 并且gamma数组是空的 存储文件中的数据 + if (!anlyseResultIn.isBGammaEnergyValidGas() && CollectionUtils.isEmpty(gammaList)){ anlyseResultIn.setG_channel_gas(sourceData.g_centroid_channel); anlyseResultIn.setG_energy_gas(sourceData.g_energy); + } else { + List channels = gammaList.stream().map(SeriseData::getX).collect(Collectors.toList()); + anlyseResultIn.setG_channel_gas(channels); + List energys = gammaList.stream().map(SeriseData::getY).collect(Collectors.toList()); + anlyseResultIn.setG_energy_gas(energys); + } + //如果beta的能量分析页面 没有勾选gas 并且beta数组是空的 存储文件中的数据 + if (!anlyseResultIn.isBBetaEnergyValidGas() && CollectionUtils.isEmpty(betaList)){ anlyseResultIn.setB_channel_gas(sourceData.b_channel); anlyseResultIn.setB_energy_gas(sourceData.b_electron_energy); - } - } - if (Objects.nonNull(detTmp)) { - if (anlyseResultIn.isCheckDet()) { - EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(detTmp.getAbsolutePath()); - if (!anlyseResultIn.isBGammaEnergyValidDet()){ - anlyseResultIn.setG_channel_det(sourceData.g_centroid_channel); - anlyseResultIn.setG_energy_det(sourceData.g_energy); - } else { - List channels = gammaList.stream().map(SeriseData::getX).collect(Collectors.toList()); - anlyseResultIn.setG_channel_det(channels); - List energys = gammaList.stream().map(SeriseData::getY).collect(Collectors.toList()); - anlyseResultIn.setG_energy_det(energys); - } - if (!anlyseResultIn.isBBetaEnergyValidDet()){ - anlyseResultIn.setB_channel_det(sourceData.b_channel); - anlyseResultIn.setB_energy_det(sourceData.b_electron_energy); - } else { - List channels = betaList.stream().map(SeriseData::getX).collect(Collectors.toList()); - anlyseResultIn.setB_channel_det(channels); - List energys = betaList.stream().map(SeriseData::getY).collect(Collectors.toList()); - anlyseResultIn.setB_energy_det(energys); - } } else { - EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(detTmp.getAbsolutePath()); + List channels = betaList.stream().map(SeriseData::getX).collect(Collectors.toList()); + anlyseResultIn.setB_channel_gas(channels); + List energys = betaList.stream().map(SeriseData::getY).collect(Collectors.toList()); + anlyseResultIn.setB_energy_gas(energys); + } + } else { + EnergySpectrumStruct sourceData = betaDataFile.getGasStruct(); + anlyseResultIn.setG_channel_gas(sourceData.g_centroid_channel); + anlyseResultIn.setG_energy_gas(sourceData.g_energy); + anlyseResultIn.setB_channel_gas(sourceData.b_channel); + anlyseResultIn.setB_energy_gas(sourceData.b_electron_energy); + } + } + if (StringUtils.isNotBlank(detTmp)) { + if (Objects.nonNull(bgPara) && bgPara.bApplyNewCalicDetBg) { + EnergySpectrumStruct sourceData = betaDataFile.getDetStruct(); + //如果gamma的能量分析页面 没有勾选det 并且gamma数组是空的 存储文件中的数据 + if (!anlyseResultIn.isBGammaEnergyValidDet() && CollectionUtils.isEmpty(gammaList)){ anlyseResultIn.setG_channel_det(sourceData.g_centroid_channel); anlyseResultIn.setG_energy_det(sourceData.g_energy); + } else { + List channels = gammaList.stream().map(SeriseData::getX).collect(Collectors.toList()); + anlyseResultIn.setG_channel_det(channels); + List energys = gammaList.stream().map(SeriseData::getY).collect(Collectors.toList()); + anlyseResultIn.setG_energy_det(energys); + } + //如果beta的能量分析页面 没有勾选det 并且beta数组是空的 存储文件中的数据 + if (!anlyseResultIn.isBBetaEnergyValidDet() && CollectionUtils.isEmpty(betaList)){ anlyseResultIn.setB_channel_det(sourceData.b_channel); anlyseResultIn.setB_energy_det(sourceData.b_electron_energy); + } else { + List channels = betaList.stream().map(SeriseData::getX).collect(Collectors.toList()); + anlyseResultIn.setB_channel_det(channels); + List energys = betaList.stream().map(SeriseData::getY).collect(Collectors.toList()); + anlyseResultIn.setB_energy_det(energys); } + } else { + EnergySpectrumStruct sourceData = betaDataFile.getDetStruct(); + anlyseResultIn.setG_channel_det(sourceData.g_centroid_channel); + anlyseResultIn.setG_energy_det(sourceData.g_energy); + anlyseResultIn.setB_channel_det(sourceData.b_channel); + anlyseResultIn.setB_energy_det(sourceData.b_electron_energy); } - } catch (Exception e) { - e.printStackTrace(); } } @@ -5353,701 +5797,58 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements } } - public void analyzePHDFile(BgDataAnlyseResultIn anlyseResultIn, BgCalibratePara BgCalPara, List betaFittingPara, List gammaFittingPara, BetaDataFile betaDataFile) { - File sampleTmp = null; - File gasTmp = null; - File detTmp = null; - try { - //根据文件路径 文件名称获取对应的临时文件 - sampleTmp = new File(betaDataFile.getSampleTmpPath()); - gasTmp = new File(betaDataFile.getGasTmpPath()); - detTmp = new File(betaDataFile.getDetTmpPath()); - //调用动态库解析文件 - //Gamma Energy Calibration页面 如果点击过fitting使BGammaEnergyValid并且有勾选 - //如果三个sampleData,GasData,DetData数据都是被勾选状态 则需要传递新的参数重新分析 否则不需要改变数据分析当前文件内容 - BgAnalyseResult bgAnalyseResult = null; - if (Objects.nonNull(sampleTmp) && Objects.nonNull(gasTmp) && Objects.nonNull(detTmp)) { - if (Objects.isNull(BgCalPara)) { - bgAnalyseResult = EnergySpectrumHandler.bgAnalyse(sampleTmp.getAbsolutePath(), gasTmp.getAbsolutePath(), detTmp.getAbsolutePath()); - } else { - bgAnalyseResult = EnergySpectrumHandler.bgReAnalyse(sampleTmp.getAbsolutePath(), gasTmp.getAbsolutePath(), detTmp.getAbsolutePath(), BgCalPara); - } - if (StringUtils.isBlank(bgAnalyseResult.error_log) || bgAnalyseResult.error_log.equalsIgnoreCase("no error.")) { - //处理XeData的数据 - List xeResultsSpectrumList = new LinkedList<>(); - GardsXeResults xe131m = new GardsXeResults(); - xe131m.setNuclideName(XeNuclideName.XE_131m.getType()); - xe131m.setConc(bgAnalyseResult.Xe131m_con); - xe131m.setConcErr(bgAnalyseResult.Xe131m_uncer); - xe131m.setLc(bgAnalyseResult.LC_Xe131m); - xe131m.setMdc(bgAnalyseResult.MDC_Xe131m); - xe131m.setNidFlag(anlyseResultIn.getXe131mFlag()); - xeResultsSpectrumList.add(xe131m); - GardsXeResults xe133 = new GardsXeResults(); - xe133.setNuclideName(XeNuclideName.XE_133.getType()); - xe133.setConc(bgAnalyseResult.Xe133_con); - xe133.setConcErr(bgAnalyseResult.Xe133_uncer); - xe133.setLc(bgAnalyseResult.LC_Xe133); - xe133.setMdc(bgAnalyseResult.MDC_Xe133); - xe133.setNidFlag(anlyseResultIn.getXe133Flag()); - xeResultsSpectrumList.add(xe133); - GardsXeResults xe133m = new GardsXeResults(); - xe133m.setNuclideName(XeNuclideName.XE_133m.getType()); - xe133m.setConc(bgAnalyseResult.Xe133m_con); - xe133m.setConcErr(bgAnalyseResult.Xe133m_uncer); - xe133m.setLc(bgAnalyseResult.LC_Xe133m); - xe133m.setMdc(bgAnalyseResult.MDC_Xe133m); - xe133m.setNidFlag(anlyseResultIn.getXe133mFlag()); - xeResultsSpectrumList.add(xe133m); - GardsXeResults xe135 = new GardsXeResults(); - xe135.setNuclideName(XeNuclideName.XE_135.getType()); - xe135.setConc(bgAnalyseResult.Xe135_con); - xe135.setConcErr(bgAnalyseResult.Xe135_uncer); - xe135.setLc(bgAnalyseResult.LC_Xe135); - xe135.setMdc(bgAnalyseResult.MDC_Xe135); - xe135.setNidFlag(anlyseResultIn.getXe135Flag()); - xeResultsSpectrumList.add(xe135); - anlyseResultIn.setXeData(xeResultsSpectrumList); - //处理GammaCalibration的数据 - List gammaCalibrationSpectrumList = new LinkedList<>(); - if (anlyseResultIn.isBGammaEnergyValidSample()) { - GardsCalibrationSpectrum gammaCalibrationS = new GardsCalibrationSpectrum(); - gammaCalibrationS.setDataType(DataTypeAbbr.SAMPLEPHD.getType()); - gammaCalibrationS.setCoeff1(Double.valueOf(gammaFittingPara.get(0))); - gammaCalibrationS.setCoeff2(Double.valueOf(gammaFittingPara.get(1))); - gammaCalibrationS.setCoeff3(Double.valueOf(gammaFittingPara.get(2))); - gammaCalibrationSpectrumList.add(gammaCalibrationS); - } else { - GardsCalibrationSpectrum gammaCalibrationS = new GardsCalibrationSpectrum(); - gammaCalibrationS.setDataType(DataTypeAbbr.SAMPLEPHD.getType()); - gammaCalibrationS.setCoeff1(bgAnalyseResult.s_g_fitting_e_c.get(0)); - gammaCalibrationS.setCoeff2(bgAnalyseResult.s_g_fitting_e_c.get(1)); - gammaCalibrationS.setCoeff3(bgAnalyseResult.s_g_fitting_e_c.get(2)); - gammaCalibrationSpectrumList.add(gammaCalibrationS); - } - if (anlyseResultIn.isBGammaEnergyValidGas()) { - GardsCalibrationSpectrum gammaCalibrationG = new GardsCalibrationSpectrum(); - gammaCalibrationG.setDataType(DataTypeAbbr.GASBKPHD.getType()); - gammaCalibrationG.setCoeff1(Double.valueOf(gammaFittingPara.get(0))); - gammaCalibrationG.setCoeff2(Double.valueOf(gammaFittingPara.get(1))); - gammaCalibrationG.setCoeff3(Double.valueOf(gammaFittingPara.get(2))); - gammaCalibrationSpectrumList.add(gammaCalibrationG); - } else { - GardsCalibrationSpectrum gammaCalibrationG = new GardsCalibrationSpectrum(); - gammaCalibrationG.setDataType(DataTypeAbbr.GASBKPHD.getType()); - gammaCalibrationG.setCoeff1(bgAnalyseResult.g_g_fitting_e_c.get(0)); - gammaCalibrationG.setCoeff2(bgAnalyseResult.g_g_fitting_e_c.get(1)); - gammaCalibrationG.setCoeff3(bgAnalyseResult.g_g_fitting_e_c.get(2)); - gammaCalibrationSpectrumList.add(gammaCalibrationG); - } - if (anlyseResultIn.isBGammaEnergyValidDet()) { - GardsCalibrationSpectrum gammaCalibrationD = new GardsCalibrationSpectrum(); - gammaCalibrationD.setDataType(DataTypeAbbr.DETBKPHD.getType()); - gammaCalibrationD.setCoeff1(Double.valueOf(gammaFittingPara.get(0))); - gammaCalibrationD.setCoeff2(Double.valueOf(gammaFittingPara.get(1))); - gammaCalibrationD.setCoeff3(Double.valueOf(gammaFittingPara.get(2))); - gammaCalibrationSpectrumList.add(gammaCalibrationD); - } else { - GardsCalibrationSpectrum gammaCalibrationD = new GardsCalibrationSpectrum(); - gammaCalibrationD.setDataType(DataTypeAbbr.DETBKPHD.getType()); - gammaCalibrationD.setCoeff1(bgAnalyseResult.d_g_fitting_e_c.get(0)); - gammaCalibrationD.setCoeff2(bgAnalyseResult.d_g_fitting_e_c.get(1)); - gammaCalibrationD.setCoeff3(bgAnalyseResult.d_g_fitting_e_c.get(2)); - gammaCalibrationSpectrumList.add(gammaCalibrationD); - } - anlyseResultIn.setGammaCalibrationSpectrumList(gammaCalibrationSpectrumList); - //处理BetaCalibration数据 - List betaCalibrationSpectrumList = new LinkedList<>(); - if (anlyseResultIn.isBBetaEnergyValidSample()) { - GardsCalibrationSpectrum betaCalibrationS = new GardsCalibrationSpectrum(); - betaCalibrationS.setDataType(DataTypeAbbr.SAMPLEPHD.getType()); - betaCalibrationS.setCoeff1(Double.valueOf(betaFittingPara.get(0))); - betaCalibrationS.setCoeff2(Double.valueOf(betaFittingPara.get(1))); - betaCalibrationS.setCoeff3(Double.valueOf(betaFittingPara.get(2))); - betaCalibrationSpectrumList.add(betaCalibrationS); - } else { - GardsCalibrationSpectrum betaCalibrationS = new GardsCalibrationSpectrum(); - betaCalibrationS.setDataType(DataTypeAbbr.SAMPLEPHD.getType()); - betaCalibrationS.setCoeff1(bgAnalyseResult.s_b_fitting_e_c.get(0)); - betaCalibrationS.setCoeff2(bgAnalyseResult.s_b_fitting_e_c.get(1)); - betaCalibrationS.setCoeff3(bgAnalyseResult.s_b_fitting_e_c.get(2)); - betaCalibrationSpectrumList.add(betaCalibrationS); - } - if (anlyseResultIn.isBBetaEnergyValidGas()) { - GardsCalibrationSpectrum betaCalibrationG = new GardsCalibrationSpectrum(); - betaCalibrationG.setDataType(DataTypeAbbr.GASBKPHD.getType()); - betaCalibrationG.setCoeff1(Double.valueOf(betaFittingPara.get(0))); - betaCalibrationG.setCoeff2(Double.valueOf(betaFittingPara.get(1))); - betaCalibrationG.setCoeff3(Double.valueOf(betaFittingPara.get(2))); - betaCalibrationSpectrumList.add(betaCalibrationG); - } else { - GardsCalibrationSpectrum betaCalibrationG = new GardsCalibrationSpectrum(); - betaCalibrationG.setDataType(DataTypeAbbr.GASBKPHD.getType()); - betaCalibrationG.setCoeff1(bgAnalyseResult.g_b_fitting_e_c.get(0)); - betaCalibrationG.setCoeff2(bgAnalyseResult.g_b_fitting_e_c.get(1)); - betaCalibrationG.setCoeff3(bgAnalyseResult.g_b_fitting_e_c.get(2)); - betaCalibrationSpectrumList.add(betaCalibrationG); - } - if (anlyseResultIn.isBBetaEnergyValidDet()) { - GardsCalibrationSpectrum betaCalibrationD = new GardsCalibrationSpectrum(); - betaCalibrationD.setDataType(DataTypeAbbr.DETBKPHD.getType()); - betaCalibrationD.setCoeff1(Double.valueOf(betaFittingPara.get(0))); - betaCalibrationD.setCoeff2(Double.valueOf(betaFittingPara.get(1))); - betaCalibrationD.setCoeff3(Double.valueOf(betaFittingPara.get(2))); - betaCalibrationSpectrumList.add(betaCalibrationD); - } else { - GardsCalibrationSpectrum betaCalibrationD = new GardsCalibrationSpectrum(); - betaCalibrationD.setDataType(DataTypeAbbr.DETBKPHD.getType()); - betaCalibrationD.setCoeff1(bgAnalyseResult.d_b_fitting_e_c.get(0)); - betaCalibrationD.setCoeff2(bgAnalyseResult.d_b_fitting_e_c.get(1)); - betaCalibrationD.setCoeff3(bgAnalyseResult.d_b_fitting_e_c.get(2)); - betaCalibrationSpectrumList.add(betaCalibrationD); - } - anlyseResultIn.setBetaCalibrationSpectrumList(betaCalibrationSpectrumList); - //存储roiChannel数据 - List roiChannelsSpectrumList = new LinkedList<>(); - for (int i=0; i roiResultsSpectrumList = new LinkedList<>(); - for (int i=0; ibgAnalyseResult.MDC.get(i)) { - roiResults.setNidFlag(1); - } else { - roiResults.setNidFlag(0); - } - roiResultsSpectrumList.add(roiResults); - } - anlyseResultIn.setRoiResultsSpectrumList(roiResultsSpectrumList); - betaDataFile.getXeResultsSpectrumList().forEach(item -> { - if (item.getNuclideName().equals(XeNuclideName.XE_131m.getType())) { - item.setNidFlag(anlyseResultIn.getXe131mFlag()); - } else if (item.getNuclideName().equals(XeNuclideName.XE_133.getType())) { - item.setNidFlag(anlyseResultIn.getXe133Flag()); - } else if (item.getNuclideName().equals(XeNuclideName.XE_133m.getType())) { - item.setNidFlag(anlyseResultIn.getXe133mFlag()); - } else if (item.getNuclideName().equals(XeNuclideName.XE_135.getType())) { - item.setNidFlag(anlyseResultIn.getXe135Flag()); - } - }); - } + public void analyzePHDFile(BgDataAnlyseResultIn anlyseResultIn, BetaDataFile betaDataFile) { + //处理XeData表数据 + List xeDataList = betaDataFile.getXeDataList(); + if (CollectionUtils.isEmpty(xeDataList)) { + List xeResultsSpectrumList = betaDataFile.getXeResultsSpectrumList(); + xeDataList = getXeDataList(xeResultsSpectrumList); + } + for (GardsXeResults xeData :xeDataList) { + if (xeData.getNuclideName().equals(XeNuclideName.XE_131m)) { + xeData.setNidFlag(anlyseResultIn.getXe131mFlag()); + } else if (xeData.getNuclideName().equals(XeNuclideName.XE_133)) { + xeData.setNidFlag(anlyseResultIn.getXe133Flag()); + } else if (xeData.getNuclideName().equals(XeNuclideName.XE_133m)) { + xeData.setNidFlag(anlyseResultIn.getXe133mFlag()); + } else if (xeData.getNuclideName().equals(XeNuclideName.XE_135)) { + xeData.setNidFlag(anlyseResultIn.getXe135Flag()); } - } catch (Exception e) { - e.printStackTrace(); } - } - - public List getCalibrationPairs(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer gasId, Integer detId, Integer idAnalysis) { - List calibrationPairsList = new LinkedList<>(); - for (int i=0; i< anlyseResultIn.getB_channel_sample().size(); i++){ - GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); - calibrationPairs.setSampleId(sampleId); - calibrationPairs.setIdAnalysis(idAnalysis); - calibrationPairs.setSampleType(SystemType.BETA.getType()); - calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); - calibrationPairs.setInput(CalName.CalPHD.getType()); - calibrationPairs.setIdCalPoint(i); - calibrationPairs.setXValue(anlyseResultIn.getB_channel_sample().get(i)); - calibrationPairs.setYValue(anlyseResultIn.getB_energy_sample().get(i)); - calibrationPairsList.add(calibrationPairs); - } - for (int i=0; i< anlyseResultIn.getG_channel_sample().size(); i++){ - GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); - calibrationPairs.setSampleId(sampleId); - calibrationPairs.setIdAnalysis(idAnalysis); - calibrationPairs.setSampleType(SystemType.GAMMA.getType()); - calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); - calibrationPairs.setInput(CalName.CalPHD.getType()); - calibrationPairs.setIdCalPoint(i); - calibrationPairs.setXValue(anlyseResultIn.getG_channel_sample().get(i)); - calibrationPairs.setYValue(anlyseResultIn.getG_energy_sample().get(i)); - calibrationPairsList.add(calibrationPairs); - } - - for (int i=0; i< anlyseResultIn.getB_channel_gas().size(); i++){ - GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); - calibrationPairs.setSampleId(gasId); - calibrationPairs.setIdAnalysis(idAnalysis); - calibrationPairs.setSampleType(SystemType.BETA.getType()); - calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); - calibrationPairs.setInput(CalName.CalPHD.getType()); - calibrationPairs.setIdCalPoint(i); - calibrationPairs.setXValue(anlyseResultIn.getB_channel_gas().get(i)); - calibrationPairs.setYValue(anlyseResultIn.getB_energy_gas().get(i)); - calibrationPairsList.add(calibrationPairs); - } - - for (int i=0; i< anlyseResultIn.getG_channel_gas().size(); i++){ - GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); - calibrationPairs.setSampleId(gasId); - calibrationPairs.setIdAnalysis(idAnalysis); - calibrationPairs.setSampleType(SystemType.GAMMA.getType()); - calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); - calibrationPairs.setInput(CalName.CalPHD.getType()); - calibrationPairs.setIdCalPoint(i); - calibrationPairs.setXValue(anlyseResultIn.getG_channel_gas().get(i)); - calibrationPairs.setYValue(anlyseResultIn.getG_energy_gas().get(i)); - calibrationPairsList.add(calibrationPairs); - } - - for (int i=0; i< anlyseResultIn.getB_channel_det().size(); i++){ - GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); - calibrationPairs.setSampleId(detId); - calibrationPairs.setIdAnalysis(idAnalysis); - calibrationPairs.setSampleType(SystemType.BETA.getType()); - calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); - calibrationPairs.setInput(CalName.CalPHD.getType()); - calibrationPairs.setIdCalPoint(i); - calibrationPairs.setXValue(anlyseResultIn.getB_channel_det().get(i)); - calibrationPairs.setYValue(anlyseResultIn.getB_energy_det().get(i)); - calibrationPairsList.add(calibrationPairs); - } - - for (int i=0; i< anlyseResultIn.getG_channel_det().size(); i++){ - GardsCalibrationPairs calibrationPairs = new GardsCalibrationPairs(); - calibrationPairs.setSampleId(detId); - calibrationPairs.setIdAnalysis(idAnalysis); - calibrationPairs.setSampleType(SystemType.GAMMA.getType()); - calibrationPairs.setCaltype(CalType.ENERGY_CAL.getType()); - calibrationPairs.setInput(CalName.CalPHD.getType()); - calibrationPairs.setIdCalPoint(i); - calibrationPairs.setXValue(anlyseResultIn.getG_channel_det().get(i)); - calibrationPairs.setYValue(anlyseResultIn.getG_energy_det().get(i)); - calibrationPairsList.add(calibrationPairs); - } - return calibrationPairsList; - } - - public List getCalibration(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer gasId, Integer detId, Integer idAnalysis) { - List calibrationSpectrumList = new LinkedList<>(); - if (Objects.nonNull(sampleId)) { - GardsCalibration calibrationB = new GardsCalibration(); - calibrationB.setSampleId(sampleId); - calibrationB.setIdAnalysis(idAnalysis); - calibrationB.setSampleType(SystemType.BETA.getType()); - calibrationB.setCalType(CalType.ENERGY_CAL.getType()); - calibrationB.setFunction(FittingType.POLY2.getCode()); - calibrationB.setFunctionDef(FittingType.POLY2.getDescription()); - calibrationB.setStartOfRange(0); - calibrationB.setEndOfRange(1); - List betaCollect = anlyseResultIn.getBetaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); - GardsCalibrationSpectrum betaCalibrationSpectrum = betaCollect.get(0); - calibrationB.setCoeff1(Double.valueOf(betaCalibrationSpectrum.getCoeff1())); - calibrationB.setCoeff2(Double.valueOf(betaCalibrationSpectrum.getCoeff2())); - calibrationB.setCoeff3(Double.valueOf(betaCalibrationSpectrum.getCoeff3())); - calibrationSpectrumList.add(calibrationB); - - GardsCalibration calibrationG = new GardsCalibration(); - calibrationG.setSampleId(sampleId); - calibrationG.setIdAnalysis(idAnalysis); - calibrationG.setSampleType(SystemType.GAMMA.getType()); - calibrationG.setCalType(CalType.ENERGY_CAL.getType()); - calibrationG.setFunction(FittingType.POLY2.getCode()); - calibrationG.setFunctionDef(FittingType.POLY2.getDescription()); - calibrationG.setStartOfRange(0); - calibrationG.setEndOfRange(1); - List gammaCollect = anlyseResultIn.getGammaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.SAMPLEPHD.getType())).collect(Collectors.toList()); - GardsCalibrationSpectrum gammaCalibrationSpectrum = gammaCollect.get(0); - calibrationG.setCoeff1(Double.valueOf(gammaCalibrationSpectrum.getCoeff1())); - calibrationG.setCoeff2(Double.valueOf(gammaCalibrationSpectrum.getCoeff2())); - calibrationG.setCoeff3(Double.valueOf(gammaCalibrationSpectrum.getCoeff3())); - calibrationSpectrumList.add(calibrationG); - } - - if (Objects.nonNull(gasId)) { - //gas文件 Beta部分 - GardsCalibration calibrationB = new GardsCalibration(); - calibrationB.setSampleId(gasId); - calibrationB.setIdAnalysis(idAnalysis); - calibrationB.setSampleType(SystemType.BETA.getType()); - calibrationB.setCalType(CalType.ENERGY_CAL.getType()); - calibrationB.setFunction(FittingType.POLY2.getCode()); - calibrationB.setFunctionDef(FittingType.POLY2.getDescription()); - calibrationB.setStartOfRange(0); - calibrationB.setEndOfRange(1); - List betaCollect = anlyseResultIn.getBetaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); - GardsCalibrationSpectrum betaCalibrationSpectrum = betaCollect.get(0); - calibrationB.setCoeff1(Double.valueOf(betaCalibrationSpectrum.getCoeff1())); - calibrationB.setCoeff2(Double.valueOf(betaCalibrationSpectrum.getCoeff2())); - calibrationB.setCoeff3(Double.valueOf(betaCalibrationSpectrum.getCoeff3())); - calibrationSpectrumList.add(calibrationB); - //gas文件 gamma部分 - GardsCalibration calibrationG = new GardsCalibration(); - calibrationG.setSampleId(gasId); - calibrationG.setIdAnalysis(idAnalysis); - calibrationG.setSampleType(SystemType.BETA.getType()); - calibrationG.setCalType(CalType.ENERGY_CAL.getType()); - calibrationG.setFunction(FittingType.POLY2.getCode()); - calibrationG.setFunctionDef(FittingType.POLY2.getDescription()); - calibrationG.setStartOfRange(0); - calibrationG.setEndOfRange(1); - List gammaCollect = anlyseResultIn.getGammaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.GASBKPHD.getType())).collect(Collectors.toList()); - GardsCalibrationSpectrum gammaCalibrationSpectrum = gammaCollect.get(0); - calibrationG.setCoeff1(Double.valueOf(gammaCalibrationSpectrum.getCoeff1())); - calibrationG.setCoeff2(Double.valueOf(gammaCalibrationSpectrum.getCoeff2())); - calibrationG.setCoeff3(Double.valueOf(gammaCalibrationSpectrum.getCoeff3())); - calibrationSpectrumList.add(calibrationG); - } - - if (Objects.nonNull(detId)) { - GardsCalibration calibrationB = new GardsCalibration(); - calibrationB.setSampleId(detId); - calibrationB.setIdAnalysis(idAnalysis); - calibrationB.setSampleType(SystemType.BETA.getType()); - calibrationB.setCalType(CalType.ENERGY_CAL.getType()); - calibrationB.setFunction(FittingType.POLY2.getCode()); - calibrationB.setFunctionDef(FittingType.POLY2.getDescription()); - calibrationB.setStartOfRange(0); - calibrationB.setEndOfRange(1); - List betaCollect = anlyseResultIn.getBetaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); - GardsCalibrationSpectrum betaCalibrationSpectrum = betaCollect.get(0); - calibrationB.setCoeff1(Double.valueOf(betaCalibrationSpectrum.getCoeff1())); - calibrationB.setCoeff2(Double.valueOf(betaCalibrationSpectrum.getCoeff2())); - calibrationB.setCoeff3(Double.valueOf(betaCalibrationSpectrum.getCoeff3())); - calibrationSpectrumList.add(calibrationB); - GardsCalibration calibrationG = new GardsCalibration(); - calibrationG.setSampleId(detId); - calibrationG.setIdAnalysis(idAnalysis); - calibrationG.setSampleType(SystemType.GAMMA.getType()); - calibrationG.setCalType(CalType.ENERGY_CAL.getType()); - calibrationG.setFunction(FittingType.POLY2.getCode()); - calibrationG.setFunctionDef(FittingType.POLY2.getDescription()); - calibrationG.setStartOfRange(0); - calibrationG.setEndOfRange(1); - List gammaCollect = anlyseResultIn.getGammaCalibrationSpectrumList().stream().filter(item -> item.getDataType().equals(DataTypeAbbr.DETBKPHD.getType())).collect(Collectors.toList()); - GardsCalibrationSpectrum gammaCalibrationSpectrum = gammaCollect.get(0); - calibrationG.setCoeff1(Double.valueOf(gammaCalibrationSpectrum.getCoeff1())); - calibrationG.setCoeff2(Double.valueOf(gammaCalibrationSpectrum.getCoeff2())); - calibrationG.setCoeff3(Double.valueOf(gammaCalibrationSpectrum.getCoeff3())); - calibrationSpectrumList.add(calibrationG); - } - return calibrationSpectrumList; - } - - public void getROIChannel(Integer sampleId, Integer idAnalysis, List roiChannelsSpectrumList, List roiChannelsList, String dataType) { - roiChannelsSpectrumList = roiChannelsSpectrumList.stream().filter(item-> item.getDataType().equals(dataType)).collect(Collectors.toList()); - for (int i=0; i getXeDataList(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer idAnalysis) { - List xeResultsList = new LinkedList<>(); - //Xe131m - GardsXeResultsSpectrum xe131m = new GardsXeResultsSpectrum(); - xe131m.setSampleId(sampleId); - xe131m.setIdAnalysis(idAnalysis); - xe131m.setNuclideName(XeNuclideName.XE_131m.getType()); - xe131m.setConc(anlyseResultIn.getXe131m_con()); - xe131m.setConcErr(anlyseResultIn.getXe131m_uncer()); - xe131m.setMdc(anlyseResultIn.getMdc_Xe131m()); - xe131m.setLc(anlyseResultIn.getLc_Xe131m()); - xe131m.setNidFlag(anlyseResultIn.getXe131mFlag()); - xeResultsList.add(xe131m); - //Xe133 - GardsXeResultsSpectrum xe133 = new GardsXeResultsSpectrum(); - xe133.setSampleId(sampleId); - xe133.setIdAnalysis(idAnalysis); - xe133.setNuclideName(XeNuclideName.XE_133.getType()); - xe133.setConc(anlyseResultIn.getXe133_con()); - xe133.setConcErr(anlyseResultIn.getXe133_uncer()); - xe133.setMdc(anlyseResultIn.getMdc_Xe133()); - xe133.setLc(anlyseResultIn.getLc_Xe133()); - xe133.setNidFlag(anlyseResultIn.getXe133Flag()); - xeResultsList.add(xe133); - //Xe133m - GardsXeResultsSpectrum xe133m = new GardsXeResultsSpectrum(); - xe133m.setSampleId(sampleId); - xe133m.setIdAnalysis(idAnalysis); - xe133m.setNuclideName(XeNuclideName.XE_133m.getType()); - xe133m.setConc(anlyseResultIn.getXe133m_con()); - xe133m.setConcErr(anlyseResultIn.getXe133m_uncer()); - xe133m.setMdc(anlyseResultIn.getMdc_Xe133m()); - xe133m.setLc(anlyseResultIn.getLc_Xe133m()); - xe133m.setNidFlag(anlyseResultIn.getXe133mFlag()); - xeResultsList.add(xe133m); - //Xe135 - GardsXeResultsSpectrum xe135 = new GardsXeResultsSpectrum(); - xe135.setSampleId(sampleId); - xe135.setIdAnalysis(idAnalysis); - xe135.setNuclideName(XeNuclideName.XE_135.getType()); - xe135.setConc(anlyseResultIn.getXe135_con()); - xe135.setConcErr(anlyseResultIn.getXe135_uncer()); - xe135.setMdc(anlyseResultIn.getMdc_Xe135()); - xe135.setLc(anlyseResultIn.getLc_Xe135()); - xe135.setNidFlag(anlyseResultIn.getXe135Flag()); - xeResultsList.add(xe135); - return xeResultsList; - } - - public List getXeResults(BgDataAnlyseResultIn anlyseResultIn, Integer sampleId, Integer idAnalysis) { - List xeResultsList = anlyseResultIn.getXeData(); - for (GardsXeResults xeResults:xeResultsList) { - xeResults.setIdAnalysis(idAnalysis); - xeResults.setSampleId(sampleId); - } - return xeResultsList; - } - - @Transactional - public boolean OriginalDataStore(BetaDataFile betaDataFile, String type, String filePathName) { - //根据新的文件路径名称查询数据是否存在 - GardsSampleData isExist = spectrumAnalysisMapper.findSampleByFile(filePathName); - //如果数据已经存入过数据库 则 修改状态后返回 - if (Objects.nonNull(isExist)){ - //如果文件已经存入过数据库则修改状态 - spectrumAnalysisMapper.updateAnalysesStatus(filePathName); - return true; - } - //读取文件内容 - EnergySpectrumStruct sourceData = null; - File file = null; - try { - if (Objects.nonNull(betaDataFile)){ - - if (type.equalsIgnoreCase("sample")) { - file = new File(betaDataFile.getSampleTmpPath()); - sourceData = betaDataFile.getSampleStruct(); - } else if (type.equalsIgnoreCase("gas")) { - file = new File(betaDataFile.getGasTmpPath()); - sourceData = betaDataFile.getGasStruct(); - } else if (type.equalsIgnoreCase("det")) { - file = new File(betaDataFile.getDetTmpPath()); - sourceData = betaDataFile.getDetStruct(); - } else if (type.equalsIgnoreCase("qc")) { - file = new File(betaDataFile.getQcTmpPath()); - sourceData = betaDataFile.getQcStruct(); - } - //获取文件中块名信息 - List readLines = getFileBlockList(file); - //查询台站id - Integer stationId = spectrumAnalysisMapper.getStationId(sourceData.site_code); - Integer detectorId = spectrumAnalysisMapper.getDetectorId(sourceData.detector_code); - if(Objects.isNull(stationId) || Objects.isNull(detectorId)) { - String error = "get station_id or detect_id error"; - return false; - } - //新增Gards_Sample_Data表数据 - sampleDataSpectrumService.saveSampleData(sourceData, stationId, detectorId, filePathName, readLines); - //获取sampleId - Integer sampleId = spectrumAnalysisMapper.getSampleId(filePathName); - //存储Gards_Sample_Aux表数据 - sampleAuxSpectrumService.saveSampleAux(sourceData, sampleId, readLines); - //判断文件是否包含Comment块 新增Gards_Description数据 - if (readLines.contains(SampleFileHeader.COMMENT.getMessage())){ - sampleDescriptionSpectrumService.saveSampleDescription(sourceData, sampleId); - } - //判断文件是否包含Certificate块 新增Gards_Sample_Cert数据 - if (readLines.contains(SampleFileHeader.CERTIFICATE.getMessage())){ - sampleCertSpectrumService.saveSampleCert(sourceData, sampleId); - sampleCertLineSpectrumService.saveSampleCertLine(sourceData, sampleId); - } - //新增Gards_Calibration_Pairs_Orig数据 - calibrationPairsOrigSpectrumService.saveGardsCalibrationPairsOrig(sourceData, sampleId, readLines); - //判断文件是否包含b-gEfficiency块 新增Gards_Sample_Cert数据 - if (readLines.contains(SampleFileHeader.BGEFFICIENCY.getMessage())){ - bgEfficiencyPairsSpectrumService.saveBgEfficiencyPairs(sourceData, sampleId); - } - //判断文件是否包含TotalEff块 新增Gards_Sample_Cert数据 - if (readLines.contains(SampleFileHeader.TOTALEFF.getMessage())){ - totalEfficiencyPairsSpectrumService.saveTotalEfficiencyPairs(sourceData, sampleId); - } - //判断文件是否包含Ratios块 新增Gards_Sample_Ratios数据 - if (readLines.contains(SampleFileHeader.RATIOS.getMessage())){ - sampleRatiosSpectrumService.saveSampleRatios(sourceData, sampleId); - } - //判断是否包含ROI_Limits块 新增Gards_ROI_Limits数据 - if (readLines.contains(SampleFileHeader.ROILIMITS.getMessage())){ - roiLimitsSpectrumService.saveRoiLimits(sourceData, sampleId); - } - //新增Gards_Spectrum数据 - spectrumService.saveSpectrum(sourceData, sampleId, readLines, filePathName); - //判断是否包含Histogram块 新增Gards_Histogram数据 - if (readLines.contains(SampleFileHeader.HISTOGRAM.getMessage())){ - histogramService.saveHistogram(sourceData, sampleId, filePathName); - } + anlyseResultIn.setXeData(xeDataList); + betaDataFile.getXeResultsSpectrumList().forEach(item -> { + if (item.getNuclideName().equals(XeNuclideName.XE_131m.getType())) { + item.setNidFlag(anlyseResultIn.getXe131mFlag()); + } else if (item.getNuclideName().equals(XeNuclideName.XE_133.getType())) { + item.setNidFlag(anlyseResultIn.getXe133Flag()); + } else if (item.getNuclideName().equals(XeNuclideName.XE_133m.getType())) { + item.setNidFlag(anlyseResultIn.getXe133mFlag()); + } else if (item.getNuclideName().equals(XeNuclideName.XE_135.getType())) { + item.setNidFlag(anlyseResultIn.getXe135Flag()); } - return true; - } catch (Exception e) { - throw new RuntimeException(e); - } + }); + //处理GammaCalibration的数据 + List gammaCalibrationSpectrumList = betaDataFile.getGammaCalibrationSpectrumEList(); + anlyseResultIn.setGammaCalibrationSpectrumList(gammaCalibrationSpectrumList); + //处理BetaCalibration数据 + List betaCalibrationSpectrumList = betaDataFile.getBetaCalibrationSpectrumEList(); + anlyseResultIn.setBetaCalibrationSpectrumList(betaCalibrationSpectrumList); + //存储roiChannel数据 + List roiChannelsSpectrumList = betaDataFile.getRoiChannelsSpectrumList(); + anlyseResultIn.setRoiChannelsSpectrumList(roiChannelsSpectrumList); + //存储roiResult的数据 + List roiResultsSpectrumList = betaDataFile.getRoiResultsSpectrumList(); + anlyseResultIn.setRoiResultsSpectrumList(roiResultsSpectrumList); } - public List getFileBlockList(File file) { - List readLines = new LinkedList<>(); - try { - List allLines = FileUtils.readLines(file, "UTF-8"); - for (String line:allLines) { - if (line.contains("#")){ - readLines.add(line); - } - } - } catch (IOException e) { - throw new RuntimeException(e); + public List getXeDataList(List xeResultsSpectrumList) { + List xeDataList = new LinkedList<>(); + for (GardsXeResultsSpectrum xeResultsSpectrum:xeResultsSpectrumList) { + GardsXeResults xeResults = new GardsXeResults(); + BeanUtil.copyProperties(xeResultsSpectrum, xeResults); + xeDataList.add(xeResults); } - return readLines; - } - - public List getROIResult(List roiResultsSpectrumList, Integer sampleId, Integer idAnalysis) { - List roiResultsList = new LinkedList<>(); - for (int i=0; i fileNames = new ArrayList<>(); List fileList = new ArrayList<>(); @@ -98,7 +99,6 @@ public class SpectrumFileServiceImpl implements ISpectrumFileService { if (!created) return Result.error(Prompt.DIR_CREATE_FAIL + filePath); // 上传所有文件 List failList = new ArrayList<>(); - String rootPath = ftpUtil.getFtpRootPath(); for (File oneFile : fileList) { String fileName = oneFile.getName(); // 判断能谱文件名称是否符合规则,不符合则进行重命名 @@ -107,9 +107,9 @@ public class SpectrumFileServiceImpl implements ISpectrumFileService { String suffix = nameStandUtil.GetSuffix(struct.data_type, struct.spectrum_quantity, String.valueOf(struct.acquisition_live_time)); fileName = nameStandUtil.GetFileNameFromDateTime(struct.measurement_id, suffix); } - String fullFilePath = rootPath + filePath + slash + fileName; + String fullFilePath = filePath + slash + fileName; FileInputStream local = new FileInputStream(oneFile); - boolean success = ftpClient.storeFile(fullFilePath, local); + boolean success = ftpClient.storeFile(fileName, local); if (!success) failList.add(fullFilePath); } if (CollUtil.isNotEmpty(failList)) diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/DataReceivingStatusManager.java b/jeecg-module-station-operation/src/main/java/org/jeecg/DataReceivingStatusManager.java index 506ba9df..335d2721 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/DataReceivingStatusManager.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/DataReceivingStatusManager.java @@ -160,16 +160,18 @@ public class DataReceivingStatusManager { } else { continue; } - //处理开始时间 - Date acquisitionStart = sampleData.getAcquisitionStart(); - dataInfo.setBeginTime(Double.valueOf(acquisitionStart.getTime() / 1000)); - //处理结束时间 - Date acquisitionStop = sampleData.getAcquisitionStop(); - dataInfo.setEndTime(Double.valueOf(acquisitionStop.getTime() / 1000)); - //时间间隔 - Double span = Double.valueOf((acquisitionStop.getTime() - acquisitionStart.getTime()) / 1000); - dataInfo.setSpanTime(span); - dataInfoList.add(dataInfo); + if (Objects.nonNull(sampleData.getAcquisitionStart()) && Objects.nonNull(sampleData.getAcquisitionStop())) { + //处理开始时间 + Date acquisitionStart = sampleData.getAcquisitionStart(); + dataInfo.setBeginTime(Double.valueOf(acquisitionStart.getTime() / 1000)); + //处理结束时间 + Date acquisitionStop = sampleData.getAcquisitionStop(); + dataInfo.setEndTime(Double.valueOf(acquisitionStop.getTime() / 1000)); + //时间间隔 + Double span = Double.valueOf((acquisitionStop.getTime() - acquisitionStart.getTime()) / 1000); + dataInfo.setSpanTime(span); + dataInfoList.add(dataInfo); + } } } } diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/common/StationTypeUtil.java b/jeecg-module-station-operation/src/main/java/org/jeecg/common/StationTypeUtil.java index 212bdb7f..3bf78d4e 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/common/StationTypeUtil.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/common/StationTypeUtil.java @@ -20,13 +20,19 @@ public class StationTypeUtil { return stationTypes; } - public String getStationType(Integer stationId){ + public String getStationType(Integer stationId, Integer category){ String type = ""; List stationTypeList = stationType.getTypes(); for (StationType stationType:stationTypeList) { if (StringUtils.isNotBlank(stationType.getMinId()) && StringUtils.isNotBlank(stationType.getMaxId())){ if (stationId>Integer.valueOf(stationType.getMinId()) && stationId<=Integer.valueOf(stationType.getMaxId())){ - type = stationType.getName(); + if (category == 3) { + type = "Car"; + } else if (category == 4) { + type = "Ship"; + } else { + type = stationType.getName(); + } } } } diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/StationOperationController.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/StationOperationController.java index 6d3fd575..95ca38bd 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/StationOperationController.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/StationOperationController.java @@ -39,6 +39,13 @@ public class StationOperationController { return result; } + @GetMapping("findListApp") + @ApiOperation(value = "查询台站/核设施信息", notes = "查询台站/核设施信息") + public List findListApp(@RequestParam String status,@RequestParam String stationType){ + List result = stationOperationService.findList(status, stationType); + return result; + } + @GetMapping("findInfo") @ApiOperation(value = "查询台站/核设施详情信息", notes = "查询台站/核设施详情信息") public Result findInfo(String stationId, String type){ @@ -46,6 +53,13 @@ public class StationOperationController { return result; } + @GetMapping("findInfoApp") + @ApiOperation(value = "查询台站/核设施详情信息", notes = "查询台站/核设施详情信息") + public Result findInfoApp(@RequestParam String stationId,@RequestParam String type){ + Result result = stationOperationService.findInfo(stationId, type); + return result; + } + @GetMapping("findTree") @ApiOperation(value = "查询台站树形结构", notes = "查询台站树形结构") public Result findTree(){ @@ -62,10 +76,15 @@ public class StationOperationController { @GetMapping("getDataReceivingStatus") @ApiOperation(value = "查询台站监测数据信息", notes = "查询台站监测数据信息") - public Result getDataReceivingStatus(String userId, String oneStationId){ - return stationOperationService.getDataReceivingStatus(userId, oneStationId); + public Result getDataReceivingStatus(String userId, Double cacheTime, String oneStationId){ + return stationOperationService.getDataReceivingStatus(userId, cacheTime, oneStationId); } + @GetMapping("getDataReceivingStatusApp") + @ApiOperation(value = "查询台站监测数据信息", notes = "查询台站监测数据信息") + public Result getDataReceivingStatusApp(@RequestParam String userId,@RequestParam Double cacheTime,@RequestParam String oneStationId){ + return stationOperationService.getDataReceivingStatus(userId, cacheTime, oneStationId); + } @GetMapping("getDataProvisionEfficiency") @ApiOperation(value = "查询台站数据提供率及有效率", notes = "查询台站数据提供率及有效率") @@ -83,7 +102,9 @@ public class StationOperationController { @GetMapping("getSelfStationGPS") @ApiOperation(value = "查询自建台站运行轨迹", notes = "查询自建台站运行轨迹") - public Result getSelfStationGPS(String stationCode, @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate, @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) { + public Result getSelfStationGPS(@RequestParam("stationCode") String stationCode, + @RequestParam("startDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate, + @RequestParam("endDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) { return stationOperationService.getSelfStationGPS(stationCode, startDate, endDate); } diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/SysUserFocusStationController.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/SysUserFocusStationController.java index 4d04374e..522e7ed8 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/SysUserFocusStationController.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/SysUserFocusStationController.java @@ -38,12 +38,23 @@ public class SysUserFocusStationController { return sysUserFocusStationService.deleteById(stationId); } + @DeleteMapping("deleteUserCache") + @ApiOperation(value = "删除用户的临时缓存", notes = "删除用户的临时缓存") + public Result deleteUserCache(String userId) { + return sysUserFocusStationService.deleteUserCache(userId); + } + @GetMapping("findUserFocusByUserId") @ApiOperation(value = "根据用户id查询用户的缓存配置信息及关注台站信息", notes = "根据用户id查询用户的缓存配置信息及关注台站信息") public Result findUserFocusByUserId(String userId){ return sysUserFocusStationService.findUserFocusByUserId(userId); } + @GetMapping("findUserFocusByUserIdApp") + @ApiOperation(value = "根据用户id查询用户的缓存配置信息及关注台站信息", notes = "根据用户id查询用户的缓存配置信息及关注台站信息") + public Result findUserFocusByUserIdApp(@RequestParam String userId){ + return sysUserFocusStationService.findUserFocusByUserId(userId); + } } diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/entity/SysUserFocusStationStation.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/entity/SysUserFocusStationStation.java index c1522232..6ec9e37e 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/entity/SysUserFocusStationStation.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/entity/SysUserFocusStationStation.java @@ -39,4 +39,10 @@ public class SysUserFocusStationStation extends SysUserFocusStation { @TableField(exist = false) private String stationCode; + /** + * 是否是排班任务台站 + */ + @TableField(exist = false) + private boolean isScheduling; + } diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/IStationOperationService.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/IStationOperationService.java index a898149f..c5edd232 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/IStationOperationService.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/IStationOperationService.java @@ -50,7 +50,7 @@ public interface IStationOperationService extends IService { * @param oneStationId * @return */ - Result getDataReceivingStatus(String userId, String oneStationId); + Result getDataReceivingStatus(String userId, Double cacheTime, String oneStationId); /** * 获取台站数据的提供率及有效率 diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/ISysUserFocusStationService.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/ISysUserFocusStationService.java index 309f9ea3..bf8195ae 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/ISysUserFocusStationService.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/ISysUserFocusStationService.java @@ -27,6 +27,13 @@ public interface ISysUserFocusStationService extends IService stationDataMap = (Map) redisUtil.get("stationDataMap"); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(StationReceivingConfig::getUserId, userId); - StationReceivingConfigStation configStation = stationReceivingConfigMapper.selectOne(queryWrapper); - Double cacheTime = configStation.getCacheTime(); + //调用接口获取数据库中对应缓存配置信息默认值 + if (Objects.isNull(cacheTime) || cacheTime <= 0) { + List> cacheList = cacheTimeService.findCacheTime(); + for (int i=0; i< cacheList.size(); i++){ + if ( StringUtils.isNotBlank(cacheList.get(i).get(CacheName.cacheTime)) ){ + cacheTime = Double.valueOf(cacheList.get(i).get(CacheName.cacheTime)); + } + } + } //获取当前日期时间 作为结束查询时间 LocalDateTime endDate = LocalDateTime.now(); //根据缓存日期 得到开始查询时间 LocalDateTime startDate = endDate.minusDays(cacheTime.intValue()); //获取到开始时间的秒数 - long startMill = startDate.toInstant(ZoneOffset.UTC).toEpochMilli(); + long startMill = startDate.toInstant(ZoneOffset.UTC).toEpochMilli()/1000; //过滤出当前用户关注的台站信息 List stationDataList = new LinkedList<>(); if (CollectionUtils.isNotEmpty(stationDataMap)) { @@ -416,38 +424,54 @@ public class StationOperationServiceImpl extends ServiceImpl detectorDataMap:detectorValue) { for (String key :detectorDataMap.keySet()) { DetectorData detectorData = detectorDataMap.get(key); + List dataList = detectorData.getDataList(); //通过流过滤出数据的开始时间戳在用户统计的开始时间戳之后的数据 - detectorData.getDataList().stream().filter(item -> item.getBeginTime() >= startMill).collect(Collectors.toList()); + dataList = dataList.stream().filter(item -> item.getBeginTime() >= startMill).collect(Collectors.toList()); + detectorData.setDataList(dataList); } } } + stationDataList.add(stationData); } - stationDataList.add(stationData); } else { + List stationIds = new LinkedList<>(); //根据用户id查询出当前用户关注的台站信息 LambdaQueryWrapper userFocusStationQueryWrapper = new LambdaQueryWrapper<>(); userFocusStationQueryWrapper.eq(SysUserFocusStationStation::getUserId, userId); List userFocusStations = sysUserFocusStationMapper.selectList(userFocusStationQueryWrapper); - List stationIds = userFocusStations.stream().map(SysUserFocusStation::getStationId).collect(Collectors.toList()); - for (String stationId:stationIds) { - StationData stationData = stationDataMap.get(stationId); - if (Objects.nonNull(stationData)) { - //读取探测器的数据集合 - Map>> detectors = stationData.getDetectors(); - //遍历探测器的集合 - for (Map.Entry>> detector:detectors.entrySet()) { - //获取探测器对应的数组 - List> detectorValue = detector.getValue(); - //遍历探测器数组 - for (Map detectorDataMap:detectorValue) { - for (String key :detectorDataMap.keySet()) { - DetectorData detectorData = detectorDataMap.get(key); - //通过流过滤出数据的开始时间戳在用户统计的开始时间戳之后的数据 - detectorData.getDataList().stream().filter(item -> item.getBeginTime() >= startMill).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(userFocusStations)) { + List focusStationIds = userFocusStations.stream().map(SysUserFocusStation::getStationId).collect(Collectors.toList()); + stationIds.addAll(focusStationIds); + } + String nowDate = DateUtils.now(); + List taskStationIds = taskStationMapper.findTaskStation(userId, nowDate); + if (CollectionUtils.isNotEmpty(taskStationIds)) { + stationIds.addAll(taskStationIds); + } + stationIds = stationIds.stream().distinct().collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(stationIds)) { + for (String stationId:stationIds) { + StationData stationData = stationDataMap.get(stationId); + if (Objects.nonNull(stationData)) { + //读取探测器的数据集合 + Map>> detectors = stationData.getDetectors(); + //遍历探测器的集合 + for (Map.Entry>> detector:detectors.entrySet()) { + //获取探测器对应的数组 + List> detectorValue = detector.getValue(); + //遍历探测器数组 + for (Map detectorDataMap:detectorValue) { + for (String key :detectorDataMap.keySet()) { + DetectorData detectorData = detectorDataMap.get(key); + List dataList = detectorData.getDataList(); + //通过流过滤出数据的开始时间戳在用户统计的开始时间戳之后的数据 + dataList = dataList.stream().filter(item -> item.getBeginTime() >= startMill).collect(Collectors.toList()); + detectorData.setDataList(dataList); + } } } + stationDataList.add(stationData); } - stationDataList.add(stationData); } } } diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/impl/SysUserFocusStationServiceImpl.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/impl/SysUserFocusStationServiceImpl.java index b11356de..1a3d8ee6 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/impl/SysUserFocusStationServiceImpl.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/impl/SysUserFocusStationServiceImpl.java @@ -8,7 +8,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.common.CacheName; import org.jeecg.common.StationTypeUtil; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.config.mqtoken.UserTokenContext; import org.jeecg.common.system.util.JwtUtil; +import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.modules.base.entity.configuration.GardsStations; @@ -18,9 +20,11 @@ import org.jeecg.modules.entity.StationReceivingConfigStation; import org.jeecg.modules.entity.SysUserFocusStationStation; import org.jeecg.modules.entity.data.UserFocusStation; import org.jeecg.modules.mapper.StationReceivingConfigMapper; +import org.jeecg.modules.mapper.SysTaskStationMapper; import org.jeecg.modules.mapper.SysUserFocusStationMapper; import org.jeecg.modules.service.ICacheTimeService; import org.jeecg.modules.service.ISysUserFocusStationService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -30,6 +34,8 @@ import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; +import static org.jeecg.common.util.TokenUtils.getTempToken; + @Service("sysUserFocusStationService") public class SysUserFocusStationServiceImpl extends ServiceImpl implements ISysUserFocusStationService { @@ -38,7 +44,7 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl stationInfoMap = (HashMap) redisUtil.get("stationInfoMap"); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysUserFocusStationStation::getUserId, sysUser.getId()); - List sysUserFocusStations = this.baseMapper.selectList(queryWrapper); - if (CollectionUtils.isNotEmpty(sysUserFocusStations)){ - sysUserFocusStations.stream().forEach(item->{ - if (CollectionUtils.isNotEmpty(stationInfoMap)){ - if (Objects.nonNull(stationInfoMap.get(item.getStationId()))){ - GardsStations stations = (GardsStations) stationInfoMap.get(item.getStationId()); - String stationType = stationTypeUtil.getStationType(stations.getStationId()); - item.setStationType(stationType); - item.setStationCode(stations.getStationCode()); - item.setLon(stations.getLon()); - item.setLat(stations.getLat()); - item.setStatus(stations.getStatus()); - item.setAltitude(Objects.isNull(stations.getElevation())?"--":stations.getElevation()+"m"); - } - } - }); - return sysUserFocusStations; - } - return Collections.emptyList(); + //调用公用方法查询关注台站信息 + List resultList = findUserFocusStations(sysUser.getId()); + return resultList; } @Override @Transactional public Result create(UserFocusStation userFocusStation) { Result result = new Result(); + //查询全部台站信息 + HashMap stationInfoMap = (HashMap) redisUtil.get("stationInfoMap"); //获取request HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); //获取当前操作人用户名 @@ -91,28 +79,22 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl receivingConfigQueryWrapper = new LambdaQueryWrapper<>(); - receivingConfigQueryWrapper.eq(StationReceivingConfigStation::getUserId, sysUser.getId()); - StationReceivingConfigStation receivingConfig = stationReceivingConfigMapper.selectOne(receivingConfigQueryWrapper); - //如果没有对应的用户缓存信息 则进行新增 - if (Objects.isNull(receivingConfig)){ - receivingConfig = new StationReceivingConfigStation(); - Long id = IdWorker.getId(); - receivingConfig.setId(id.toString()); - receivingConfig.setUserId(sysUser.getId()); - receivingConfig.setCacheTime(userFocusStation.getCacheTime()); - receivingConfig.setScaleInterval(userFocusStation.getScaleInterval()); - receivingConfig.setTimelineLength(userFocusStation.getTimelineLength()); - receivingConfig.setUpdateIntervalTime(userFocusStation.getUpdateIntervalTime()); - stationReceivingConfigMapper.insert(receivingConfig); - }else { - receivingConfig.setCacheTime(userFocusStation.getCacheTime()); - receivingConfig.setScaleInterval(userFocusStation.getScaleInterval()); - receivingConfig.setTimelineLength(userFocusStation.getTimelineLength()); - receivingConfig.setUpdateIntervalTime(userFocusStation.getUpdateIntervalTime()); - stationReceivingConfigMapper.updateById(receivingConfig); + //判断是否包含最大缓存时间 + if (redisUtil.hasKey("maxCacheTime")) { + //最大的缓存时间 + String maxCacheTime = (String) redisUtil.get("maxCacheTime"); + //用户临时记录的缓存时间 + Double cacheTime = userFocusStation.getCacheTime(); + //如果用户临时记录的缓存时间大于最大缓存时间 + if (cacheTime > Double.valueOf(maxCacheTime)) { + redisUtil.set("maxCacheTime", String.valueOf(cacheTime)); + } } + //记录当前用户的临时数据 + redisUtil.set("cacheTime:"+sysUser.getId(), userFocusStation.getCacheTime()); + redisUtil.set("scaleInterval:"+sysUser.getId(), userFocusStation.getScaleInterval()); + redisUtil.set("timelineLength:"+sysUser.getId(), userFocusStation.getTimelineLength()); + redisUtil.set("updateIntervalTime:"+sysUser.getId(), userFocusStation.getUpdateIntervalTime()); } if (CollectionUtils.isNotEmpty(userFocusStation.getStationIds())){ //根据用户id查询出对应的用户关注台站信息 删除用户的所有关注台站信息并重新保存 @@ -121,12 +103,13 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl focusStationStationList = new LinkedList<>(); for (Integer stationId:userFocusStation.getStationIds()) { + GardsStations stations = (GardsStations) stationInfoMap.get(stationId.toString()); SysUserFocusStationStation sysUserFocusStation = new SysUserFocusStationStation(); Long id = IdWorker.getId(); sysUserFocusStation.setId(String.valueOf(id)); sysUserFocusStation.setUserId(sysUser.getId()); sysUserFocusStation.setStationId(String.valueOf(stationId)); - String stationType = stationTypeUtil.getStationType(stationId); + String stationType = stationTypeUtil.getStationType(stationId, stations.getCategory()); sysUserFocusStation.setStationType(stationType); sysUserFocusStation.setCreateTime(LocalDateTime.now()); sysUserFocusStation.setCreateBy(username); @@ -135,9 +118,12 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl0) { this.saveBatch(focusStationStationList); } + } else { + //根据用户id查询出对应的用户关注台站信息 删除用户的所有关注台站信息并重新保存 + LambdaQueryWrapper userFocusStationQueryWrapper = new LambdaQueryWrapper<>(); + userFocusStationQueryWrapper.eq(SysUserFocusStationStation::getUserId, sysUser.getId()); + this.baseMapper.delete(userFocusStationQueryWrapper); } - //重新保存后重新缓存 - cacheStationReceivingConfig(); result.success("Save successfully"); return result; } @@ -164,16 +150,28 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(StationReceivingConfigStation::getUserId, userId); - StationReceivingConfigStation receivingConfig = stationReceivingConfigMapper.selectOne(queryWrapper); //如果用户对应的缓存配置信息为空时,查询字典表中的默认值 - if (Objects.isNull(receivingConfig)){ - receivingConfig = new StationReceivingConfigStation(); + StationReceivingConfigStation receivingConfig = new StationReceivingConfigStation(); + //判断用户是否有缓存数据记录 + if (redisUtil.hasKey("cacheTime:"+userId)) { + String cacheTime = String.valueOf(redisUtil.get("cacheTime:"+userId)); + receivingConfig.setCacheTime(Double.valueOf(cacheTime)); + String scaleInterval = String.valueOf(redisUtil.get("scaleInterval:"+userId)); + receivingConfig.setScaleInterval(Double.valueOf(scaleInterval)); + String timelineLength = String.valueOf(redisUtil.get("timelineLength:"+userId)); + receivingConfig.setTimelineLength(Double.valueOf(timelineLength)); + String updateIntervalTime = String.valueOf(redisUtil.get("updateIntervalTime:"+userId)); + receivingConfig.setUpdateIntervalTime(Double.valueOf(updateIntervalTime)); + } else { //调用接口获取数据库中对应缓存配置信息默认值 List> cacheList = cacheTimeService.findCacheTime(); for (int i=0; i< cacheList.size(); i++){ @@ -196,8 +194,10 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl focusStationQueryWrapper = new LambdaQueryWrapper<>(); focusStationQueryWrapper.eq(SysUserFocusStationStation::getUserId, userId); List sysUserFocusStations = this.baseMapper.selectList(focusStationQueryWrapper); - if (Objects.nonNull(sysUserFocusStations)){ + if (CollectionUtils.isNotEmpty(sysUserFocusStations)){ receivingConfig.setSysUserFocusStations(sysUserFocusStations); + } else { + receivingConfig.setSysUserFocusStations(Collections.emptyList()); } result.setSuccess(true); result.setResult(receivingConfig); @@ -206,9 +206,92 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl> cacheList = cacheTimeService.findCacheTime(); + for (int i=0; i< cacheList.size(); i++){ + if ( StringUtils.isNotBlank(cacheList.get(i).get(CacheName.cacheTime)) ){ + maxCacheTime = cacheList.get(i).get(CacheName.cacheTime); + } + } + if (StringUtils.isNotBlank(maxCacheTime)) { + redisUtil.set("maxCacheTime", maxCacheTime); + } + UserTokenContext.remove(); + } + + private List findUserFocusStations(String userId) { + List resultList = new LinkedList<>(); + //查询全部台站信息 + HashMap stationInfoMap = (HashMap) redisUtil.get("stationInfoMap"); + //根据用户id查询关注台站信息 + LambdaQueryWrapper focusStationQueryWrapper = new LambdaQueryWrapper<>(); + focusStationQueryWrapper.eq(SysUserFocusStationStation::getUserId, userId); + List sysUserFocusStations = this.baseMapper.selectList(focusStationQueryWrapper); + //根据用户id查询排班任务的台站信息 + //查询用户的排班任务 + String nowDate = DateUtils.now(); + List taskStation = taskStationMapper.findTaskStation(userId, nowDate); + //判断用户是否有关注台站列表 + if (CollectionUtils.isNotEmpty(sysUserFocusStations)){ + //遍历关注台站列表 + for (SysUserFocusStationStation item:sysUserFocusStations) { + //判断台站map是否为空 + if (CollectionUtils.isNotEmpty(stationInfoMap)){ + //判断台站map是否包含当前台站id + if (Objects.nonNull(stationInfoMap.get(item.getStationId()))){ + //获取台站信息 + GardsStations stations = (GardsStations) stationInfoMap.get(item.getStationId()); + //如果排班任务台站id数组中 不包含当前关注台站id 则关注台站正常存储 + if (!taskStation.contains(stations.getStationId().toString())) { + //获取台站类型 + String stationType = stationTypeUtil.getStationType(stations.getStationId(), stations.getCategory()); + item.setStationType(stationType); + item.setStationCode(stations.getStationCode()); + item.setLon(stations.getLon()); + item.setLat(stations.getLat()); + item.setStatus(stations.getStatus()); + item.setAltitude(Objects.isNull(stations.getElevation())?"--":stations.getElevation()+"m"); + item.setScheduling(false); + resultList.add(item); + } + } + } + } + } + if (CollectionUtils.isNotEmpty(taskStation)) { + //遍历排班任务id + for (String stationId:taskStation) { + //台站map不为空 + if (CollectionUtils.isNotEmpty(stationInfoMap)){ + if (Objects.nonNull(stationInfoMap.get(stationId))){ + SysUserFocusStationStation item = new SysUserFocusStationStation(); + //获取台站信息 + GardsStations stations = (GardsStations) stationInfoMap.get(stationId); + //获取台站类型 + String stationType = stationTypeUtil.getStationType(stations.getStationId(), stations.getCategory()); + //将台站信息复制给关注台站实体类 + BeanUtils.copyProperties(stations, item); + item.setStationId(stationId); + item.setUserId(userId); + item.setStationType(stationType); + item.setStationCode(stations.getStationCode()); + item.setLon(stations.getLon()); + item.setLat(stations.getLat()); + item.setStatus(stations.getStatus()); + item.setAltitude(Objects.isNull(stations.getElevation())?"--":stations.getElevation()+"m"); + item.setScheduling(true); + resultList.add(item); + } + } + } + } + if (CollectionUtils.isNotEmpty(resultList)) { + resultList = resultList.stream().distinct().sorted(Comparator.comparing(SysUserFocusStationStation::getStationCode)).collect(Collectors.toList()); + } + return resultList; } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/AbnormalAlarmClient.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/AbnormalAlarmClient.java index 7ca3c5d2..9f8ad726 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/AbnormalAlarmClient.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/AbnormalAlarmClient.java @@ -1,6 +1,7 @@ package org.jeecg.modules.feignclient; import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.base.dto.SpaceInfo; import org.jeecg.modules.base.entity.postgre.AlarmLog; import org.jeecg.modules.base.entity.postgre.SysDatabase; import org.jeecg.modules.base.entity.postgre.SysEmail; @@ -44,6 +45,9 @@ public interface AbnormalAlarmClient { @PutMapping("/sysDatabase/updateStatus") void updateDatabase(@RequestBody SysDatabase database); + @GetMapping("/sysDatabase/spaceInfo") + Result> spaceInfo(@RequestParam String sourceId); + /* SysServerController下相关接口 */ @GetMapping("/sysServer/getNameById") String getServerName(@RequestParam String id); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/ManageUtil.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/ManageUtil.java index 17b8ed10..7f68d45c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/ManageUtil.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/feignclient/ManageUtil.java @@ -1,5 +1,6 @@ package org.jeecg.modules.feignclient; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.RedisConstant; import org.jeecg.common.system.util.JwtUtil; @@ -9,6 +10,7 @@ import org.jeecg.modules.base.dto.LoginResult; import org.jeecg.modules.base.dto.LoginVo; import org.springframework.core.env.Environment; +@Slf4j public class ManageUtil { private static RedisUtil redisUtil; @@ -31,20 +33,28 @@ public class ManageUtil { * 登录运管系统 获取Token * */ public static String getToken(){ - if (redisUtil.hasKey(RedisConstant.MANAGE_TOKEN)) - return (String) redisUtil.get(RedisConstant.MANAGE_TOKEN); - - LoginVo loginVo = new LoginVo(username, password); - Result loginRes = monitorSystem.login(loginVo); - String token = loginRes.getResult().getToken(); - redisUtil.set(RedisConstant.MANAGE_TOKEN, token, JwtUtil.EXPIRE_TIME / 1000 - 10); - return token; + String token = null; + try { + if (redisUtil.hasKey(RedisConstant.MANAGE_TOKEN)) + return (String) redisUtil.get(RedisConstant.MANAGE_TOKEN); + LoginVo loginVo = new LoginVo(username, password); + Result loginRes = monitorSystem.login(loginVo); + token = loginRes.getResult().getToken(); + redisUtil.set(RedisConstant.MANAGE_TOKEN, token, JwtUtil.EXPIRE_TIME / 1000 - 10); + return token; + }catch (RuntimeException e){ + return token; + } } public static void refreshToken(){ - LoginVo loginVo = new LoginVo(username, password); - Result loginRes = monitorSystem.login(loginVo); - String token = loginRes.getResult().getToken(); - redisUtil.set(RedisConstant.MANAGE_TOKEN, token, JwtUtil.EXPIRE_TIME / 1000 - 10); + try { + LoginVo loginVo = new LoginVo(username, password); + Result loginRes = monitorSystem.login(loginVo); + String token = loginRes.getResult().getToken(); + redisUtil.set(RedisConstant.MANAGE_TOKEN, token, JwtUtil.EXPIRE_TIME / 1000 - 10); + }catch (RuntimeException e){ + log.error("运管系统登录异常, Token刷新失败: {}", e.getMessage()); + } } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/SendMessage.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/SendMessage.java index 698fa427..d3e39205 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/SendMessage.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/SendMessage.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.ListUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.dto.message.MessageDTO; import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.constant.enums.MessageTypeEnum; @@ -27,6 +28,7 @@ import static org.jeecg.common.constant.enums.MessageTypeEnum.*; * @author nieziyan * @date 2023-06-21 */ +@Slf4j @Component public class SendMessage { @@ -50,6 +52,7 @@ public class SendMessage { */ public void send(MessageDTO messageDTO, String groupId, String notific){ Map contact = getContact(groupId); + if (MapUtil.isEmpty(contact)) return; if (StrUtil.isBlank(notific)) return; List ways = ListUtil.toList(StrUtil.split(notific, COMMA)); if (ways.contains(ALL.getValue())) @@ -96,26 +99,33 @@ public class SendMessage { * @param groupId */ private Map getContact(String groupId){ - List userIds = abnormalAlarmClient.userIds(groupId).getResult(); - // 查询用户信息 - List sysUsers = sysUserService.listByIds(userIds); - // 用户名 - String usernameList = sysUsers.stream().map(SysUser::getUsername).filter(StrUtil::isNotBlank) - .collect(Collectors.joining(COMMA)); - // 邮箱 - String emailList = sysUsers.stream().map(SysUser::getEmail).filter(StrUtil::isNotBlank) - .collect(Collectors.joining(COMMA)); - // 用户名-邮箱Map - Map userEmail = sysUsers.stream() - .collect(Collectors.toMap(SysUser::getUsername, SysUser::getEmail)); - // 手机号码 - String phoneList = sysUsers.stream().map(SysUser::getPhone).filter(StrUtil::isNotBlank) - .collect(Collectors.joining(COMMA)); Map result = new HashMap<>(); - result.put(SYSTEM, usernameList); - result.put(EMAIL, emailList); - result.put(SMS, phoneList); - result.putAll(userEmail); - return result; + try { + List userIds = abnormalAlarmClient.userIds(groupId).getResult(); + // 查询用户信息 + List sysUsers = sysUserService.listByIds(userIds); + // 用户名 + String usernameList = sysUsers.stream().map(SysUser::getUsername).filter(StrUtil::isNotBlank) + .collect(Collectors.joining(COMMA)); + // 邮箱 + String emailList = sysUsers.stream().map(SysUser::getEmail).filter(StrUtil::isNotBlank) + .collect(Collectors.joining(COMMA)); + // 用户名-邮箱Map + Map userEmail = sysUsers.stream() + .filter(item -> StrUtil.isNotBlank(item.getEmail())) + .collect(Collectors.toMap(SysUser::getUsername, SysUser::getEmail)); + // 手机号码 + String phoneList = sysUsers.stream().map(SysUser::getPhone).filter(StrUtil::isNotBlank) + .collect(Collectors.joining(COMMA)); + + result.put(SYSTEM, usernameList); + result.put(EMAIL, emailList); + result.put(SMS, phoneList); + result.putAll(userEmail); + return result; + }catch (Exception e) { + log.error("获取收件人联系信息异常: {}", e.getMessage()); + return result; + } } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/EmailPushMsgHandle.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/EmailPushMsgHandle.java index 7f3a8ba1..a0528728 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/EmailPushMsgHandle.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/EmailPushMsgHandle.java @@ -61,8 +61,7 @@ public class EmailPushMsgHandle implements ISendMsgHandle { String context = messageDTO.getContent(); String alarmTitle = "邮件发送失败提醒"; StringBuilder alarmContext = new StringBuilder(); - alarmContext.append("系统给您发送的邮件 [标题: ").append(title) - .append(", 内容: ").append(context).append("]发送失败,失败原因: "); + alarmContext.append("系统给您发送的邮件 [标题: ").append(title).append(", 内容: ").append(context).append("]发送失败,失败原因: "); // 循环给每一个用户发送邮件 for (Map.Entry userEmails : messageDTO.getUserEmail().entrySet()) { String username = userEmails.getKey(); @@ -71,9 +70,9 @@ public class EmailPushMsgHandle implements ISendMsgHandle { messageDTO.setToUser(email); emailService.sendMailToOne(messageDTO); } catch (MessagingException e) { - if (e instanceof SMTPAddressFailedException) { // 无效的电子邮箱异常 + if (e instanceof SMTPAddressFailedException) { alarmContext.append("无效的电子邮箱: ").append(email); - } else if (e instanceof SendFailedException) { // 邮件发送失败异常 + } else { alarmContext.append(e.getMessage()); } // 邮件发送失败 给用户发送站内提示消息 diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/util/PushAppUtil.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/util/PushAppUtil.java index 5d325de5..e33f4182 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/util/PushAppUtil.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/util/PushAppUtil.java @@ -131,11 +131,9 @@ public class PushAppUtil { ups.addOption("HW", "/message/android/notification/importance", "HIGH"); ups.addOption("HW", "/message/android/category", "WORK"); //OPPO手机配置厂商参数 - ups.addOption("OP", "/channel_id", "Default"); ups.addOption("OP", "/off_line", true); ups.addOption("OP", "/show_ttl", 86400); //VIVO手机配置厂商参数 - ups.addOption("VV", "/category", "DEVICE_REMINDER"); ups.addOption("VV", "/notifyType", 4); ups.addOption("VV", "/timeToLive", 86400); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java index 7022bdf1..5da9a25a 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/DatabaseJob.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import feign.FeignException; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.dto.message.MessageDTO; @@ -22,6 +23,7 @@ import org.jeecg.modules.base.entity.postgre.AlarmRule; import org.jeecg.modules.base.entity.postgre.SysDatabase; import org.jeecg.modules.base.enums.Item; import org.jeecg.modules.feignclient.AbnormalAlarmClient; +import org.jeecg.modules.feignclient.ManageUtil; import org.jeecg.modules.feignclient.MonitorSystem; import org.jeecg.modules.message.SendMessage; import org.jeecg.modules.quartz.entity.Monitor; @@ -55,6 +57,16 @@ public class DatabaseJob extends Monitor implements Job{ Set keys = getRedisStreamUtil().keys(pattern); if (CollUtil.isEmpty(keys)) return; + // 时间间隔为每分钟 + LocalDateTime now = LocalDateTime.now() + .withSecond(0) + .withNano(0); + LocalDateTime beforeMin = now.minusMinutes(1); + DateTimeFormatter formatter = DateTimeFormatter + .ofPattern(DateConstant.DATE_TIME); + String start = beforeMin.format(formatter); + String end = now.format(formatter); + String prefixSilence = RedisConstant.PREFIX_SILENCE; String operator = null; for (String ruleKey : keys) { @@ -64,6 +76,8 @@ public class DatabaseJob extends Monitor implements Job{ operator = alarmRule.getOperator(); String ruleId = alarmRule.getId(); String itemId = alarmRule.getItemId(); + String type = alarmRule.getItemType(); + Integer itemType = StrUtil.isBlank(type) ? 0 : Integer.parseInt(type); String silenceKey = prefixSilence + ruleId; boolean hasKey = getRedisStreamUtil().hasKey(silenceKey); boolean blank1 = StrUtil.isBlank(operator); @@ -75,7 +89,7 @@ public class DatabaseJob extends Monitor implements Job{ String sourceId = alarmRule.getSourceId(); String databaseName = getAlarmClient().getDatabaseName(sourceId); - // 根据监控项id选择要查询的监控项信息 + /*// 根据监控项id选择要查询的监控项信息 Item item = Item.of(itemId); if (ObjectUtil.isNull(item)) continue; Number current = null; @@ -86,7 +100,21 @@ public class DatabaseJob extends Monitor implements Job{ // 追加的监控项... default: break; + }*/ + // 向运管查询监控项数据 + String token = ManageUtil.getToken(); + if(StrUtil.isBlank(token)){ + log.error("运管系统登录异常, Token获取失败"); + continue; } + Result result = getMonitorSystem().itemBack(itemId, itemType, start, end, token); + ItemHistory itemHistory = result.getResult(); + if (ObjectUtil.isNull(itemHistory)){ + log.warn("Database监控异常: [{}]查询监控项历史数据为空", databaseName); + continue; + } + Double current = itemHistory.getNow(); + // 解析预警规则,判断是否需要报警 ObjectMapper mapper = new ObjectMapper(); Rule rule = mapper.readValue(operator, Rule.class); @@ -118,9 +146,12 @@ public class DatabaseJob extends Monitor implements Job{ getSendMessage().send(messageDTO, groupId, notific); getPushAppUtil().pushToSingle(messageDTO, groupId); } + } catch (FeignException.Unauthorized e){ + ManageUtil.refreshToken(); + log.warn("向运管系统查询ItemHistory信息异常: Token失效,已刷新Token"); } catch (JsonProcessingException e) { log.error("Database预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); - }catch (Exception e){ + } catch (Exception e){ log.error("Database监控异常: {}", e.getMessage()); } } @@ -130,12 +161,12 @@ public class DatabaseJob extends Monitor implements Job{ /* * 监控项-2: 测试数据源是否可以连接成功 (0:失败 1:成功) * */ - private Integer isConnection(String databaseId){ + /*private Integer isConnection(String databaseId){ int res = 1; String statusKey = RedisConstant.DATABASE_STATUS; NameValue nameValue = (NameValue)getRedisUtil().hget(statusKey, databaseId); if (ObjectUtil.isNull(nameValue) || ObjectUtil.isNull(nameValue.getValue()) || !nameValue.getValue()) res = 0; return res; - } + }*/ } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java index 5d5c8a89..2c544195 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/job/ServerJob.java @@ -85,6 +85,10 @@ public class ServerJob extends Monitor implements Job { // 向运管查询监控项数据 String token = ManageUtil.getToken(); + if(StrUtil.isBlank(token)){ + log.error("运管系统登录异常, Token获取失败"); + continue; + } Result result = getMonitorSystem().itemBack(itemId, itemType, start, end, token); ItemHistory itemHistory = result.getResult(); if (ObjectUtil.isNull(itemHistory)){ @@ -124,12 +128,12 @@ public class ServerJob extends Monitor implements Job { getSendMessage().send(messageDTO, groupId, notific); getPushAppUtil().pushToSingle(messageDTO, groupId); } - }catch (FeignException.Unauthorized e){ + } catch (FeignException.Unauthorized e){ ManageUtil.refreshToken(); log.warn("向运管系统查询ItemHistory信息异常: Token失效,已刷新Token"); } catch (JsonProcessingException e) { log.error("Server预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); - }catch (Exception e){ + } catch (Exception e){ log.error("Server监控异常: {}", e.getMessage()); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/DatabaseJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/DatabaseJob.java index 6a2fd875..5f76098c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/DatabaseJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/DatabaseJob.java @@ -1,10 +1,12 @@ package org.jeecg.modules.quartz.jobs; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import feign.FeignException; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.dto.message.MessageDTO; @@ -18,6 +20,7 @@ import org.jeecg.modules.base.entity.Rule; import org.jeecg.modules.base.entity.monitor.ItemHistory; import org.jeecg.modules.base.entity.postgre.AlarmLog; import org.jeecg.modules.base.entity.postgre.AlarmRule; +import org.jeecg.modules.base.enums.Item; import org.jeecg.modules.feignclient.ManageUtil; import org.jeecg.modules.quartz.entity.Monitor; import org.quartz.*; @@ -67,6 +70,8 @@ public class DatabaseJob extends Monitor { operator = alarmRule.getOperator(); String ruleId = alarmRule.getId(); String itemId = alarmRule.getItemId(); + // 如果是其它自定义监控项(表空间使用率、...) 则跳过 + if (CollUtil.contains(ListUtil.toList(Item.TABLESPACE_USAGE.getValue()), itemId)) continue; String type = alarmRule.getItemType(); Integer itemType = StrUtil.isBlank(type) ? 0 : Integer.parseInt(type); String silenceKey = prefixSilence + ruleId; @@ -80,20 +85,12 @@ public class DatabaseJob extends Monitor { String sourceId = alarmRule.getSourceId(); String databaseName = getAlarmClient().getDatabaseName(sourceId); - /*// 根据监控项id选择要查询的监控项信息 - Item item = Item.of(itemId); - if (ObjectUtil.isNull(item)) continue; - Number current = null; - switch (item){ - case DATABASE_CONN: // 监控项-2: 测试数据源是否可以连接成功 - current = isConnection(sourceId); - break; - // 追加的监控项... - default: - break; - }*/ // 向运管查询监控项数据 String token = ManageUtil.getToken(); + if(StrUtil.isBlank(token)){ + log.error("运管系统登录异常, Token获取失败"); + continue; + } Result result = getMonitorSystem().itemBack(itemId, itemType, start, end, token); ItemHistory itemHistory = result.getResult(); if (ObjectUtil.isNull(itemHistory)){ @@ -133,6 +130,9 @@ public class DatabaseJob extends Monitor { getSendMessage().send(messageDTO, groupId, notific); getPushAppUtil().pushToSingle(messageDTO, groupId); } + }catch (FeignException.Unauthorized e){ + ManageUtil.refreshToken(); + log.warn("向运管系统查询ItemHistory信息异常: Token失效,已刷新Token"); } catch (JsonProcessingException e) { log.error("Database预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); }catch (Exception e){ @@ -141,16 +141,4 @@ public class DatabaseJob extends Monitor { } destroy(); } - - /* - * 监控项-2: 测试数据源是否可以连接成功 (0:失败 1:成功) - * */ - /*private Integer isConnection(String databaseId){ - int res = 1; - String statusKey = RedisConstant.DATABASE_STATUS; - NameValue nameValue = (NameValue)getRedisUtil().hget(statusKey, databaseId); - if (ObjectUtil.isNull(nameValue) || ObjectUtil.isNull(nameValue.getValue()) || !nameValue.getValue()) - res = 0; - return res; - }*/ } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/ServerJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/ServerJob.java index 5ffa9e86..42182ba7 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/ServerJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/ServerJob.java @@ -84,6 +84,10 @@ public class ServerJob extends Monitor{ // 向运管查询监控项数据 String token = ManageUtil.getToken(); + if(StrUtil.isBlank(token)){ + log.error("运管系统登录异常, Token获取失败"); + continue; + } Result result = getMonitorSystem().itemBack(itemId, itemType, start, end, token); ItemHistory itemHistory = result.getResult(); if (ObjectUtil.isNull(itemHistory)){ @@ -123,12 +127,12 @@ public class ServerJob extends Monitor{ getSendMessage().send(messageDTO, groupId, notific); getPushAppUtil().pushToSingle(messageDTO, groupId); } - }catch (FeignException.Unauthorized e){ + } catch (FeignException.Unauthorized e){ ManageUtil.refreshToken(); log.warn("向运管系统查询ItemHistory信息异常: Token失效,已刷新Token"); } catch (JsonProcessingException e) { log.error("Server预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); - }catch (Exception e){ + } catch (Exception e){ log.error("Server监控异常: {}", e.getMessage()); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/TableSpaceJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/TableSpaceJob.java new file mode 100644 index 00000000..9705aceb --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/quartz/jobs/TableSpaceJob.java @@ -0,0 +1,160 @@ +package org.jeecg.modules.quartz.jobs; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.api.dto.message.MessageDTO; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.constant.DateConstant; +import org.jeecg.common.constant.RedisConstant; +import org.jeecg.common.util.DataTool; +import org.jeecg.common.util.NumUtil; +import org.jeecg.common.util.TemplateUtil; +import org.jeecg.modules.base.dto.SpaceInfo; +import org.jeecg.modules.base.entity.Rule; +import org.jeecg.modules.base.entity.monitor.ItemHistory; +import org.jeecg.modules.base.entity.postgre.AlarmLog; +import org.jeecg.modules.base.entity.postgre.AlarmRule; +import org.jeecg.modules.base.enums.Item; +import org.jeecg.modules.feignclient.ManageUtil; +import org.jeecg.modules.quartz.entity.Monitor; +import org.jeecg.modules.system.service.ISysDataSourceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import static org.jeecg.modules.base.enums.Item.TABLESPACE_USAGE; +import static org.jeecg.modules.base.enums.SourceType.DATABASE; +import static org.jeecg.modules.base.enums.Template.MONITOR_DATABASE; + +@Slf4j +@Component +public class TableSpaceJob extends Monitor { + /** + * 解析Oracle 表空间预警规则 + **/ + @Scheduled(cron = "${task.period-space:0 0/1 * * * ?}") + public void execute(){ + init(); + + // 查询所有Database的报警规则,根据报警规则查询监控项数据 + String pattern = RedisConstant.PREFIX_RULE + DATABASE.getType(); + Set keys = getRedisStreamUtil().keys(pattern); + if (CollUtil.isEmpty(keys)) return; + + String prefixSilence = RedisConstant.PREFIX_SILENCE; + String operator = null; + for (String ruleKey : keys) { + try { + AlarmRule alarmRule = (AlarmRule) getRedisStreamUtil().get(ruleKey); + // 如果报警规则为空,或者在沉默周期内,跳过当前规则 + operator = alarmRule.getOperator(); + String ruleId = alarmRule.getId(); + String itemId = alarmRule.getItemId(); + String silenceKey = prefixSilence + ruleId; + boolean hasKey = getRedisStreamUtil().hasKey(silenceKey); + boolean blank1 = StrUtil.isBlank(operator); + boolean blank2 = StrUtil.isBlank(itemId); + + if (blank1 || blank2 || hasKey) continue; + + // 根据sourceId查询Database信息(缓存) + String sourceId = alarmRule.getSourceId(); + String databaseName = getAlarmClient().getDatabaseName(sourceId); + + // 根据监控项id选择要查询的监控项信息 + Item item = Item.of(itemId); + if (ObjectUtil.isNull(item)) continue; + + // 解析预警规则,判断是否需要报警 + boolean needWarn = false; + Map result = null; + Map spaceMap = null; + ObjectMapper mapper = new ObjectMapper(); + Rule rule = mapper.readValue(operator, Rule.class); + String op = rule.getOperator(); + Double threshold = rule.getThreshold(); + + if (item == TABLESPACE_USAGE){ // 监控项id: 2 Oracle表空间使用率 + List spaceInfos = getAlarmClient().spaceInfo(sourceId).getResult(); + if (CollUtil.isEmpty(spaceInfos)) continue; + spaceMap = spaceInfos.stream().collect(Collectors.toMap(SpaceInfo::getSpaceName, SpaceInfo::getUsed)); + result = NumUtil.compare(spaceMap, threshold, op); + needWarn = result.containsValue(true); + } + + // 如果当前值超过阈值 则需要发送报警信息 + if (needWarn){ + // 记录报警日志 + AlarmLog alarmLog = new AlarmLog(); + alarmLog.setRuleId(ruleId); + alarmLog.setOperator(operator); + alarmLog.setAlarmValue(value(spaceMap, result)); + + String ruleName = alarmRule.getName(); + Map data = DataTool.getInstance(). + put(databaseName).put(ruleName).put(rule.joint()).put(info(spaceMap, result)).get(); + MessageDTO messageDTO = TemplateUtil.parse(MONITOR_DATABASE.getCode(), data); + + alarmLog.setAlarmInfo(messageDTO.getContent()); + getAlarmClient().create(alarmLog); + // 规则触发报警后,设置该规则的沉默周期(如果有) + // 沉默周期失效之前,该规则不会再次被触发 + Long silenceCycle = alarmRule.getSilenceCycle(); + ruleSilence(silenceKey, silenceCycle); + + // 发送报警信息 + String groupId = alarmRule.getContactId(); + String notific = alarmRule.getNotification(); + getSendMessage().send(messageDTO, groupId, notific); + getPushAppUtil().pushToSingle(messageDTO, groupId); + } + } catch (JsonProcessingException e) { + log.error("Database-TableSpace预警规则: {}解析失败,失败原因: {}", operator, e.getMessage()); + }catch (Exception e){ + log.error("Database-TableSpace监控异常: {}", e.getMessage()); + } + } + destroy(); + } + + /* + * 所有的预警值 以,分割 + * */ + private String value(Map sapceMap, Map result){ + List keys = result.entrySet().stream() + .filter(Map.Entry::getValue) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + return sapceMap.entrySet().stream() + .filter(entry -> CollUtil.contains(keys, entry.getKey())) + .map(entry -> String.valueOf(entry.getValue())) + .collect(Collectors.joining(", ")); + } + + /* + * [表空间名1: 预警值1, 表空间名2: 预警值2] + * */ + private String info(Map sapceMap, Map result){ + List keys = result.entrySet().stream() + .filter(Map.Entry::getValue) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + return "[" + sapceMap.entrySet().stream() + .filter(entry -> CollUtil.contains(keys, entry.getKey())) + .map(entry -> entry.getKey() + ": " + entry.getValue()) + .collect(Collectors.joining(", ")) + + "]"; + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java index df9484e4..aa69b370 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java @@ -214,7 +214,39 @@ public class LoginController { return Result.error("Token无效!"); } } - + + /** + * app端退出登录 + * @return + */ + @RequestMapping(value = "/mlogout") + public Result mlogout(HttpServletRequest request) { + //用户退出逻辑 + String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); + if(oConvertUtils.isEmpty(token)) { + return Result.error("退出登录失败!"); + } + String username = JwtUtil.getUsername(token); + LoginUser sysUser = sysBaseApi.getUserByName(username); + if(sysUser!=null) { + //update-begin--Author:wangshuai Date:20200714 for:登出日志没有记录人员 + baseCommonService.addLog("用户名: "+sysUser.getRealname()+",退出成功!", CommonConstant.LOG_TYPE_1, null,sysUser); + //update-end--Author:wangshuai Date:20200714 for:登出日志没有记录人员 + log.info(" 用户名: "+sysUser.getRealname()+",退出成功! "); + //清空用户登录Token缓存 + redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + token); + //清空用户登录Shiro权限缓存 + redisUtil.del(CommonConstant.PREFIX_USER_SHIRO_CACHE + sysUser.getId()); + //清空用户的缓存信息(包括部门信息),例如sys:cache:user:: + redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, sysUser.getUsername())); + //调用shiro的logout + SecurityUtils.getSubject().logout(); + return Result.ok("退出登录成功!"); + }else { + return Result.error("Token无效!"); + } + } + /** * 获取访问量 * @return @@ -504,25 +536,24 @@ public class LoginController { /** * 后台生成图形验证码 :有效 - * @param response * @param key */ @ApiOperation("获取验证码") @GetMapping(value = "/randomImage/{key}") - public Result randomImage(HttpServletResponse response,@PathVariable("key") String key){ + public Result randomImage(@PathVariable("key") String key){ Result res = new Result(); try { //生成验证码 String code = RandomUtil.randomString(BASE_CHECK_CODES,4); //存到redis中 String lowerCaseCode = code.toLowerCase(); - + //update-begin-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 // 加入密钥作为混淆,避免简单的拼接,被外部利用,用户自定义该密钥即可 String origin = lowerCaseCode+key+jeecgBaseConfig.getSignatureSecret(); String realKey = Md5Util.md5Encode(origin, "utf-8"); //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 - + redisUtil.set(realKey, lowerCaseCode, 60); log.info("获取验证码,Redis key = {},checkCode = {}", realKey, code); //返回前端 @@ -679,6 +710,7 @@ public class LoginController { } return Result.ok(); } + /** * 登录二维码 */ diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java index 1b14eb43..904dc6d7 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementController.java @@ -332,8 +332,8 @@ public class SysAnnouncementController { * @return */ @RequestMapping(value = "/listByUser", method = RequestMethod.GET) - public Result> listByUser(@RequestParam(required = false, defaultValue = "5") Integer pageSize) { - Result> result = new Result>(); + public Result listByUser(@RequestParam(required = false, defaultValue = "5") Integer pageSize) { + Result result = new Result(); LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); // 1.将系统消息补充到用户通告阅读标记表中 @@ -456,8 +456,8 @@ public class SysAnnouncementController { * @return */ @RequestMapping(value = "/syncNotic", method = RequestMethod.GET) - public Result syncNotic(@RequestParam(name="anntId",required=false) String anntId, HttpServletRequest request) { - Result result = new Result(); + public Result syncNotic(@RequestParam(name="anntId",required=false) String anntId, HttpServletRequest request) { + Result result = new Result(); JSONObject obj = new JSONObject(); if(StringUtils.isNotBlank(anntId)){ SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(anntId); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java index e28d36f5..4b06e9f6 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysAnnouncementSendController.java @@ -185,8 +185,8 @@ public class SysAnnouncementSendController { * @return */ @PutMapping(value = "/editByAnntIdAndUserId") - public Result editById(@RequestBody JSONObject json) { - Result result = new Result(); + public Result editById(@RequestBody JSONObject json) { + Result result = new Result(); String anntId = json.getString("anntId"); LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); @@ -199,16 +199,37 @@ public class SysAnnouncementSendController { result.setSuccess(true); return result; } - + + /** + * @功能:获取我的消息 + * @return + */ + @GetMapping(value = "/getMyAnnouncementSend") + public Result> getMyAnnouncementSend(AnnouncementSendModel announcementSendModel, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + Result> result = new Result>(); + LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + announcementSendModel.setUserId(userId); + announcementSendModel.setPageNo((pageNo-1)*pageSize); + announcementSendModel.setPageSize(pageSize); + Page pageList = new Page(pageNo,pageSize); + pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(pageList, announcementSendModel); + result.setResult(pageList); + result.setSuccess(true); + return result; + } + /** * @功能:获取我的消息 * @return */ - @GetMapping(value = "/getMyAnnouncementSend") - public Result> getMyAnnouncementSend(AnnouncementSendModel announcementSendModel, + @PostMapping(value = "/getMyAnnouncementSendApp") + public Result getMyAnnouncementSendApp(@RequestBody AnnouncementSendModel announcementSendModel, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { - Result> result = new Result>(); + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + Result result = new Result(); LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); announcementSendModel.setUserId(userId); @@ -226,8 +247,8 @@ public class SysAnnouncementSendController { * @return */ @PutMapping(value = "/readAll") - public Result readAll() { - Result result = new Result(); + public Result readAll() { + Result result = new Result(); LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); String userId = sysUser.getId(); LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java index 53bc8834..b75e338b 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysRoleController.java @@ -1,6 +1,7 @@ package org.jeecg.modules.system.controller; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -11,6 +12,7 @@ import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.config.TenantContext; import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.constant.Prompt; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; @@ -142,22 +144,16 @@ public class SysRoleController { //@RequiresPermissions("system:role:edit") @RequestMapping(value = "/edit",method = {RequestMethod.PUT,RequestMethod.POST}) public Result edit(@RequestBody SysRole role) { - Result result = new Result(); - SysRole sysrole = sysRoleService.getById(role.getId()); - if(sysrole==null) { - result.error500("未找到对应实体"); - }else { - role.setUpdateTime(new Date()); - boolean ok = sysRoleService.updateById(role); - //TODO 返回false说明什么? - if(ok) { - result.success("修改成功!"); - } - } - - return result; + String roleId = role.getId(); + SysRole sysRole = sysRoleService.getById(roleId); + if (ObjectUtil.isNull(sysRole)) + return Result.error(Prompt.DATA_NOT_EXITS); + boolean success = sysRoleService.updateById(role); + if (success) + return Result.OK(Prompt.UPDATE_SUCC); + return Result.error(Prompt.UPDATE_ERR); } - + /** * 通过id删除 * @param id diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/GardsSampleDataMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/GardsSampleDataMapper.java index fee55dfe..2039e979 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/GardsSampleDataMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/GardsSampleDataMapper.java @@ -19,6 +19,6 @@ public interface GardsSampleDataMapper extends BaseMapper void delBatch(@Param("tableNames") List tableNames, @Param("sampleId") Integer sampleId); - AnalysesDto getAnalysis(@Param("owner") String owner, + List getAnalysis(@Param("owner") String owner, @Param("sampleId") Integer sampleId); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/GardsSampleDataMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/GardsSampleDataMapper.xml index 5f83e28a..55ba83d2 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/GardsSampleDataMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/GardsSampleDataMapper.xml @@ -25,11 +25,12 @@ - SELECT * + SELECT user_id, dep_id FROM sys_user_depart WHERE user_id = #{userId, jdbcType=VARCHAR} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/GardsSampleDataServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/GardsSampleDataServiceImpl.java index 00efcd60..22984ab2 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/GardsSampleDataServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/GardsSampleDataServiceImpl.java @@ -171,7 +171,13 @@ public class GardsSampleDataServiceImpl extends ServiceImpl failList = ftpUtil.removeFiles(needDel); + List failList = new ArrayList<>(); + for (String path:needDel) { + boolean success = ftpUtil.removeFiles(path); + if (!success) { + failList.add(path); + } + } if (CollUtil.isNotEmpty(failList)) return Result.error("Data clearing is complete, but file clearing fails!", failList); return Result.OK("Data and file cleanup complete!"); @@ -208,23 +214,30 @@ public class GardsSampleDataServiceImpl extends ServiceImpl manOrAutoPath(String savePath, String logPath, Integer sampleId, String owner){ List fileList = new ArrayList<>(); - AnalysesDto AnalysesDto = baseMapper.getAnalysis(owner, sampleId); - if (ObjectUtil.isNull(AnalysesDto)) - return fileList; - String baselinePath = AnalysesDto.getBaselinePath(); - if (StrUtil.isNotBlank(baselinePath)) - fileList.add(savePath + baselinePath); - String lcPath = AnalysesDto.getLcPath(); - if (StrUtil.isNotBlank(lcPath)) - fileList.add(savePath + lcPath); - String scacPath = AnalysesDto.getScacPath(); - if (StrUtil.isNotBlank(scacPath)) - fileList.add(savePath + scacPath); - if (StrUtil.isNotBlank(AnalysesDto.getLogPath())) - fileList.add(logPath + AnalysesDto.getLogPath()); - String reportPath = AnalysesDto.getReportPath(); - if (StrUtil.isNotBlank(reportPath)) - fileList.add(savePath + reportPath + FileTypeEnum.txt.getType()); + List AnalysesDtoList = baseMapper.getAnalysis(owner, sampleId); + if (CollectionUtils.isNotEmpty(AnalysesDtoList)) { + for (AnalysesDto AnalysesDto:AnalysesDtoList) { + String baselinePath = AnalysesDto.getBaselinePath(); + if (StrUtil.isNotBlank(baselinePath)) { + fileList.add(savePath + baselinePath); + } + String lcPath = AnalysesDto.getLcPath(); + if (StrUtil.isNotBlank(lcPath)) { + fileList.add(savePath + lcPath); + } + String scacPath = AnalysesDto.getScacPath(); + if (StrUtil.isNotBlank(scacPath)) { + fileList.add(savePath + scacPath); + } + if (StrUtil.isNotBlank(AnalysesDto.getLogPath())) { + fileList.add(logPath + AnalysesDto.getLogPath()); + } + String reportPath = AnalysesDto.getReportPath(); + if (StrUtil.isNotBlank(reportPath)) { + fileList.add(savePath + reportPath + FileTypeEnum.txt.getType()); + } + } + } return fileList; } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java index 78b1fa25..5356fa85 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java @@ -749,7 +749,8 @@ public class SysUserServiceImpl extends ServiceImpl impl arr = departs.split(","); } //查询已关联部门 - List userDepartList = sysUserDepartMapper.selectList(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); + // List userDepartList = sysUserDepartMapper.selectList(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); + List userDepartList = sysUserDepartMapper.getUserDepartByUid(user.getId()); if(userDepartList != null && userDepartList.size()>0){ for(SysUserDepart depart : userDepartList ){ //修改已关联部门删除部门用户角色关系 diff --git a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/RadionuclideController.java b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/RadionuclideController.java index e32bbe8a..0b49dfed 100644 --- a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/RadionuclideController.java +++ b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/RadionuclideController.java @@ -7,9 +7,7 @@ import org.jeecg.modules.service.IAutoService; import org.jeecg.modules.service.IReviewedService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -38,4 +36,24 @@ public class RadionuclideController { @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime){ return reviewedService.findReviewedPage(queryRequest, stationIds, qualifie,startTime, endTime); } + + @PostMapping("findAutoPageApp") + @ApiOperation(value = "分页查询自动处理结果", notes = "分页查询自动处理结果") + public Result findAutoPageApp(@RequestBody QueryRequest queryRequest, + @RequestParam("stationIds") Integer[] stationIds, + @RequestParam("qualifie") String qualifie, @RequestParam("sampleType") String sampleType, + @RequestParam("startTime") @DateTimeFormat(pattern = "yyyy-MM-dd")Date startTime, + @RequestParam("endTime") @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime){ + return autoService.findAutoPage(queryRequest, stationIds, qualifie, sampleType,startTime, endTime); + } + + @PostMapping("findReviewedPageApp") + @ApiOperation(value = "分页查询人工交互结果", notes = "分页查询人工交互结果") + public Result findReviewedPageApp(@RequestBody QueryRequest queryRequest, + @RequestParam("stationIds") Integer[] stationIds,@RequestParam("qualifie") String qualifie, + @RequestParam("startTime") @DateTimeFormat(pattern = "yyyy-MM-dd")Date startTime, + @RequestParam("endTime") @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime){ + return reviewedService.findReviewedPage(queryRequest, stationIds, qualifie,startTime, endTime); + } + } diff --git a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/WebStatisticsController.java b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/WebStatisticsController.java index e1db2a8a..f28a02d5 100644 --- a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/WebStatisticsController.java +++ b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/controller/WebStatisticsController.java @@ -57,6 +57,16 @@ public class WebStatisticsController { return result; } + @GetMapping("findStationListApp") + @ApiOperation(value = "根据菜单名称查询对应的台站信息", notes = "根据菜单名称查询对应的台站信息") + public Result findStationListApp(@RequestParam String menuName){ + Result result = new Result(); + List gardsStations = menuNameService.findStationListByMenuName(menuName); + result.setSuccess(true); + result.setResult(gardsStations); + return result; + } + @GetMapping("findParticulatePage") @ApiOperation(value = "气溶胶分页查询", notes = "气溶胶分页查询") public Result findParticulatePage(QueryRequest queryRequest, Integer[] stationIds, String dataType, diff --git a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataWebServiceImpl.java b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataWebServiceImpl.java index 5c49cb00..c64a1e1b 100644 --- a/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataWebServiceImpl.java +++ b/jeecg-module-web-statistics/src/main/java/org/jeecg/modules/service/impl/GardsSampleDataWebServiceImpl.java @@ -25,6 +25,7 @@ import org.jeecg.modules.base.entity.original.GardsSampleData; import org.jeecg.modules.base.entity.original.GardsSampleDescription; import org.jeecg.modules.base.entity.postgre.SysDefaultNuclide; import org.jeecg.modules.base.enums.SystemType; +import org.jeecg.modules.base.enums.XeNuclideName; import org.jeecg.modules.entity.GardsSampleDataWeb; import org.jeecg.modules.entity.data.*; import org.jeecg.modules.entity.dto.SampleDataDto; @@ -134,8 +135,6 @@ public class GardsSampleDataWebServiceImpl extends ServiceImpl listBySampleIds(Integer[] stationIds, String startTime, String endTime, List sampleIds) { + public List listBySampleIds(Integer[] stationIds, + String startTime, + String endTime, + List sampleIds) { Date startDate = DateUtil .parse(startTime + " 00:00:00","yyyy-MM-dd HH:mm:ss") .toJdkDate(); @@ -987,6 +993,13 @@ public class GardsSampleDataWebServiceImpl extends ServiceImplarmd-abnormal-alarm-start armd-auto-process-start armd-spectrum-analysis-start + armd-app-start \ No newline at end of file diff --git a/pom.xml b/pom.xml index 775a8acb..1e8a9549 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,8 @@ jeecg-module-auto-process jeecg-module-spectrum-analysis jeecg-module-beta-gamma-analyser - + jeecg-module-app + @@ -202,6 +203,11 @@ jeecg-module-spectrum-analysis ${jeecgboot.version} + + org.jeecgframework.boot + jeecg-module-app + ${jeecgboot.version} + org.jeecgframework.boot