Compare commits

...

10 Commits

Author SHA1 Message Date
nieziyan
ff2f73eb41 fix:优化 2024-05-15 09:13:54 +08:00
nieziyan
4bb2518d36 feat:获取探测器Id 2024-05-13 16:25:44 +08:00
qiaoqinzheng
c5ffa77954 自动处理模块模块同步代码 2024-05-13 14:15:05 +08:00
qiaoqinzheng
7b5e167eb2 自动处理模块下载邮件代码修改 2024-05-13 14:10:59 +08:00
nieziyan
cbe8ef9bb0 fix:SQL逻辑判断符 2024-05-13 09:27:23 +08:00
nieziyan
f309792c0d fix:纠正库名 2024-05-11 16:02:33 +08:00
nieziyan
09a23b371b feat:修改分析结果报警[核素首次发现|出现两种及以上] 2024-05-11 15:39:05 +08:00
nieziyan
95a150122c feat:修改分析结果报警条件逻辑 2024-05-08 15:37:52 +08:00
nieziyan
035e842240 feat:自动处理邮箱邮件监控报警逻辑 2024-05-06 18:11:29 +08:00
nieziyan
ebf8958f60 feat:自动处理邮箱邮件监控时间单位 2024-05-06 09:50:46 +08:00
39 changed files with 398 additions and 253 deletions

View File

@ -9,6 +9,8 @@ import com.sun.mail.imap.IMAPStore;
import com.sun.mail.smtp.SMTPAddressFailedException;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.Charsets;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.common.constant.RedisConstant;
@ -124,7 +126,7 @@ public class EmailServiceManager {
/**
* 接收邮件
*/
public Message[] receiveMail() {
public Message[] receiveMail() throws MessagingException {
String status = EmailLogManager.STATUS_SUCCESS;
try{
//配置邮件服务属性
@ -183,12 +185,11 @@ public class EmailServiceManager {
return Arrays.copyOfRange(messages,0,this.receiveNum-1);
}
}
}catch (MessagingException e){
} catch (MessagingException e){
status = EmailLogManager.STATUS_ERROR;
log.error("Email connection is abnormal, account is {}, service is {},the reason is {}.",email.getName(),email.getEmailServerAddress(),e.getMessage());
e.printStackTrace();
return null;
}finally {
throw e;
} finally {
EmailLogEvent connectEvent = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,email,status,EmailLogManager.CONNECT);
EmailLogManager.getInstance().setConnectLogEvent(connectEvent);
//GetAllId C++原业务是把远程邮箱邮件同步到C++本次java编写没有这一步所以和Connect绑定若Connect成功则GetAllId成功
@ -532,7 +533,8 @@ public class EmailServiceManager {
File emlFile = null;
String status = EmailLogManager.STATUS_SUCCESS;
Date receivedDate = null;
FileOutputStream outputStream = null;
InputStream inputStream = null;
BufferedOutputStream outputStream = null;
try {
//获取发件人
final String address = ((InternetAddress) message.getFrom()[0]).getAddress();
@ -566,25 +568,19 @@ public class EmailServiceManager {
final String rootPath = spectrumPathProperties.getRootPath();
final String emlPath = spectrumPathProperties.getEmlPath();
emlFile = new File(rootPath+emlPath+File.separator+fileName);
outputStream = new FileOutputStream(emlFile);
message.writeTo(outputStream);
// outputStream = new FileOutputStream(emlFile);
// message.writeTo(outputStream);
int bufferSize = 1024 * 1024; // 1M
inputStream = message.getInputStream();
outputStream = new BufferedOutputStream(new FileOutputStream(emlFile), bufferSize);
// 从邮件的输入流读取内容并写入到本地文件
byte[] buffer = new byte[bufferSize];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
// 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;
@ -598,7 +594,11 @@ public class EmailServiceManager {
(Objects.isNull(emlFile)?" ":emlFile.getAbsolutePath()));
EmailLogManager.getInstance().offer(Thread.currentThread().getId(),event);
try {
if (Objects.nonNull(inputStream)) {
inputStream.close();
}
if (Objects.nonNull(outputStream)) {
outputStream.flush();
outputStream.close();
}
} catch (IOException e) {

View File

@ -1,13 +1,14 @@
package org.jeecg.common.util;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
public class DataTool {
private int counter = 1;
private final Map<String, Object> data = new HashMap<>();
private final Map<String, Object> data = new LinkedHashMap<>();
public DataTool put(Object value) {
data.put(String.format("p%d", counter), value);

View File

@ -61,7 +61,8 @@ public class TemplateUtil {
for (String key : keys) {
contents.add(ReUtil.getGroup1(StrUtil.format(pattern, key), templateContent));
}
templateContent = CollUtil.join(contents, "#");
String join = StrUtil.SPACE + "#" + StrUtil.SPACE;
templateContent = CollUtil.join(contents, join);
String content = FreemarkerParseFactory
.parseTemplateContent(templateContent, data, true);
messageDTO.setContent(content);
@ -102,7 +103,8 @@ public class TemplateUtil {
for (String key : keys) {
contents.add(ReUtil.getGroup1(StrUtil.format(pattern, key), templateContent));
}
templateContent = CollUtil.join(contents, "#");
String join = StrUtil.SPACE + "#" + StrUtil.SPACE;
templateContent = CollUtil.join(contents, join);
String content = FreemarkerParseFactory
.parseTemplateContent(templateContent, data, true);
messageDTO.setContent(content);

View File

@ -164,8 +164,8 @@ public class TokenUtils {
String secret = CommonConstant.TEMP_TOKEN_SECRET;
// 模拟登录生成Token
String token = JwtUtil.sign(username, secret);
// 设置Token缓存有效时间为 3 分钟
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token, 3 * 60);
// 设置Token缓存有效时间为 60
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token, 60);
return token;
}
}

View File

@ -0,0 +1,11 @@
package org.jeecg.modules.base.dto;
import lombok.Data;
@Data
public class SampNucl {
private String sampleId;
private String nuclideName;
}

View File

@ -9,7 +9,7 @@ import lombok.Getter;
public enum Item {
EMAIL_CONN("1", "Email Connection Status"),
TABLESPACE_USAGE("2", "TableSpace Usage"),
EMAIL_PROCESS("3", "Email Process");
EMAIL_UNPROCESSED("3", "Email Unprocessed");
private final String value;

View File

@ -2,6 +2,7 @@ package org.jeecg.modules.base.enums;
import cn.hutool.core.util.StrUtil;
import lombok.Getter;
/**
* 资源类型
@ -9,22 +10,19 @@ import cn.hutool.core.util.StrUtil;
* @author nieziyan
* @date 2023-06-30
*/
@Getter
public enum SourceType {
EMAIL("Email"),
DATABASE("Database"),
SERVER("Server");
private String type;
private final String type;
SourceType(String type) {
this.type = type;
}
public String getType() {
return type;
}
public static SourceType typeOf(String type){
for (SourceType sourceType : SourceType.values()) {
if (StrUtil.equals(sourceType.getType(),type))

View File

@ -69,9 +69,8 @@ public class SysEmailLogController {
return sysEmailLogService.analysis(emailId, startDate, endDate);
}
@GetMapping("hoursAgo")
public Boolean hoursAgo(@RequestParam("emailId") String emailId,
@RequestParam("hoursAgo") String hoursAgo){
return sysEmailLogService.hoursAgo(emailId, hoursAgo);
@GetMapping("getMinus")
public Integer getMinus(@RequestParam("emailId") String emailId){
return sysEmailLogService.getMinus(emailId);
}
}

View File

@ -43,5 +43,7 @@ public interface SystemClient {
@PostMapping("/sys/appMessage/pushMessageToSingle")
void pushMessageToSingle(@RequestBody MessageDTO messageDTO, @RequestParam String groupId);
/* GardsSampleDataController下相关接口 */
@GetMapping("/gardsSampleData/getDetectorId")
String getDetectorId(@RequestParam String sampleId);
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.ConcDtoXe;
import org.jeecg.modules.base.dto.SampNucl;
import org.jeecg.modules.base.entity.rnauto.GardsNuclIded;
import java.util.List;
@ -15,5 +16,5 @@ public interface GardsNuclIdedAutoMapper extends BaseMapper<GardsNuclIded> {
List<ConcDto> getConc(Map<String,Object> param);
List<String> nuclideNames(Set<String> nuclideNames);
List<SampNucl> sampNucl(String stationId, String detectorId, Set<String> nuclideNames);
}

View File

@ -3,6 +3,7 @@ package org.jeecg.modules.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.SampNucl;
import org.jeecg.modules.base.entity.rnman.GardsNuclIded;
import java.util.List;
@ -12,7 +13,7 @@ import java.util.Set;
@Mapper
public interface GardsNuclIdedManMapper extends BaseMapper<GardsNuclIded> {
List<ConcDto> getConc(Map<String,Object> param);
List<ConcDto> getConc(Map<String, Object> param);
List<String> nuclideNames(Set<String> nuclideNames);
List<SampNucl> sampNucl(String stationId, String detectorId, Set<String> nuclideNames);
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.ConcDtoXe;
import org.jeecg.modules.base.dto.SampNucl;
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
import java.util.List;
@ -15,5 +16,5 @@ public interface GardsXeResultsAutoMapper extends BaseMapper<GardsXeResults> {
List<ConcDtoXe> getConc(Map<String,Object> params);
List<String> nuclideNames(Set<String> nuclideNames);
List<SampNucl> sampNucl(String stationId, String detectorId, Set<String> nuclideNames);
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.ConcDtoXe;
import org.jeecg.modules.base.dto.SampNucl;
import org.jeecg.modules.base.entity.rnman.GardsXeResults;
import java.util.List;
@ -15,5 +16,5 @@ public interface GardsXeResultsManMapper extends BaseMapper<GardsXeResults> {
List<ConcDtoXe> getConc(Map<String,Object> params);
List<String> nuclideNames(Set<String> nuclideNames);
List<SampNucl> sampNucl(String stationId, String detectorId, Set<String> nuclideNames);
}

View File

@ -23,18 +23,20 @@
</if>
</where>
</select>
<select id="nuclideNames" resultType="java.lang.String">
<select id="sampNucl" resultType="org.jeecg.modules.base.dto.SampNucl">
SELECT
NUCLIDENAME
n.SAMPLE_ID,
n.NUCLIDENAME AS nuclideName
FROM
RNAUTO.GARDS_NUCL_IDED
WHERE
NUCLIDENAME IN
<foreach collection="nuclideNames" separator="," item="nuclideName" index="index" open="(" close=")">
#{nuclideName}
ORIGINAL.GARDS_SAMPLE_DATA s
INNER JOIN RNAUTO.GARDS_NUCL_IDED n ON s.SAMPLE_ID = n.SAMPLE_ID
WHERE s.STATION_ID = #{stationId} AND s.DETECTOR_ID = #{detectorId}
<if test="nuclideNames != null and nuclideNames.size() > 0">
AND n.NUCLIDENAME IN
<foreach collection="nuclideNames" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
GROUP BY
NUCLIDENAME
</if>
AND TO_NUMBER(n.CONCENTRATION) &gt; TO_NUMBER(n.MDC)
</select>
</mapper>

View File

@ -23,18 +23,20 @@
</if>
</where>
</select>
<select id="nuclideNames" resultType="java.lang.String">
<select id="sampNucl" resultType="org.jeecg.modules.base.dto.SampNucl">
SELECT
NUCLIDENAME
n.SAMPLE_ID,
n.NUCLIDENAME AS nuclideName
FROM
RNMAN.GARDS_NUCL_IDED
WHERE
NUCLIDENAME IN
<foreach collection="nuclideNames" separator="," item="nuclideName" index="index" open="(" close=")">
#{nuclideName}
ORIGINAL.GARDS_SAMPLE_DATA s
INNER JOIN RNMAN.GARDS_NUCL_IDED n ON s.SAMPLE_ID = n.SAMPLE_ID
WHERE s.STATION_ID = #{stationId} AND s.DETECTOR_ID = #{detectorId}
<if test="nuclideNames != null and nuclideNames.size() > 0">
AND n.NUCLIDENAME IN
<foreach collection="nuclideNames" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
GROUP BY
NUCLIDENAME
</if>
AND TO_NUMBER(n.CONCENTRATION) &gt; TO_NUMBER(n.MDC)
</select>
</mapper>

View File

@ -23,18 +23,20 @@
</if>
</where>
</select>
<select id="nuclideNames" resultType="java.lang.String">
<select id="sampNucl" resultType="org.jeecg.modules.base.dto.SampNucl">
SELECT
NUCLIDE_NAME
n.SAMPLE_ID,
n.NUCLIDE_NAME
FROM
RNAUTO.GARDS_XE_RESULTS
WHERE
NUCLIDE_NAME IN
<foreach collection="nuclideNames" separator="," item="nuclideName" index="index" open="(" close=")">
#{nuclideName}
</foreach>
GROUP BY
NUCLIDE_NAME
ORIGINAL.GARDS_SAMPLE_DATA s
INNER JOIN RNAUTO.GARDS_XE_RESULTS n ON s.SAMPLE_ID = n.SAMPLE_ID
WHERE s.STATION_ID = #{stationId} AND s.DETECTOR_ID = #{detectorId}
<if test="nuclideNames != null and nuclideNames.size() > 0">
AND n.NUCLIDE_NAME IN
<foreach collection="nuclideNames" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
AND n.NID_FLAG = 1
</select>
</mapper>

View File

@ -23,18 +23,20 @@
</if>
</where>
</select>
<select id="nuclideNames" resultType="java.lang.String">
<select id="sampNucl" resultType="org.jeecg.modules.base.dto.SampNucl">
SELECT
NUCLIDE_NAME
n.SAMPLE_ID,
n.NUCLIDE_NAME
FROM
RNMAN.GARDS_XE_RESULTS
WHERE
NUCLIDE_NAME IN
<foreach collection="nuclideNames" separator="," item="nuclideName" index="index" open="(" close=")">
#{nuclideName}
ORIGINAL.GARDS_SAMPLE_DATA s
INNER JOIN RNMAN.GARDS_XE_RESULTS n ON s.SAMPLE_ID = n.SAMPLE_ID
WHERE s.STATION_ID = #{stationId} AND s.DETECTOR_ID = #{detectorId}
<if test="nuclideNames != null and nuclideNames.size() > 0">
AND n.NUCLIDE_NAME IN
<foreach collection="nuclideNames" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
GROUP BY
NUCLIDE_NAME
</if>
AND n.NID_FLAG = 1
</select>
</mapper>

View File

@ -5,21 +5,18 @@ 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;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hwpf.sprm.SprmIterator;
import org.jeecg.common.api.dto.message.MessageDTO;
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.*;
import org.jeecg.common.util.dynamic.db.FreemarkerParseFactory;
import org.jeecg.modules.base.dto.NuclideInfo;
import org.jeecg.modules.base.dto.Info;
import org.jeecg.modules.base.entity.postgre.AlarmAnalysisLog;
@ -40,13 +37,10 @@ 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.time.LocalDate;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Data
@ -156,6 +150,8 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
String betaOrGamma = info.getBetaOrGamma();
String datasource = info.getDatasource();
String stationId = info.getStationId();
String sampleId = info.getSampleId();
String sampleName = info.getSampleName();
// 获取谱文件采样日期 如果为null 则默认为LocalDate.now()
LocalDate collDate = ObjectUtil.isNull(info.getCollectionDate()) ? LocalDate.now() :
info.getCollectionDate().toLocalDate();
@ -163,20 +159,20 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
List<String> conditions = ListUtil.toList(conditionStr.split(COMMA));
List<String> firstDetected = new ArrayList<>(); // 首次发现
List<NuclideInfo> moreThanAvg = new ArrayList<>(); // 超浓度均值
List<String> meanwhile = new ArrayList<>(); // 同时出现两种及以上核素
List<String> meanWhile = new ArrayList<>(); // 同时出现两种及以上核素
for (String con : conditions) {
Condition condition = Condition.valueOf1(con);
if (ObjectUtil.isNull(condition)) continue;
switch (condition){
case FIRST_FOUND: // 首次发现该元素
firstDetected = firstDetected(betaOrGamma, datasource, nuclideNames);
firstDetected = firstDetected(betaOrGamma, datasource, stationId, sampleId, nuclideNames);
break;
case ABOVE_AVERAGE: // 元素浓度高于均值
moreThanAvg = moreThanAvg(datasource, stationId, collDate, nuclidesCross);
break;
case MEANWHILE: // 同时出现两种及以上核素
if (CollUtil.isNotEmpty(nuclideNames) && nuclideNames.size() >= 2)
meanwhile.addAll(nuclideNames);
meanWhile = meanWhile(betaOrGamma, datasource, sampleId, nuclideNames);
if (meanWhile.size() < 2) meanWhile = ListUtil.empty();
break;
default:
break;
@ -192,10 +188,13 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
.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 (CollUtil.isNotEmpty(meanWhile))
dataTool.put("meanwhile", CollUtil.join(meanWhile, StrUtil.COMMA + StrUtil.SPACE));
// 如果报警数据为空 则不需要发送报警信息和生成报警日志
if (MapUtil.isEmpty(dataTool.get())) return;
// 产生报警信息的Sample信息
dataTool.put("sampleId", sampleId).put("sampleName", sampleName);
// 构建预警信息实例 准备发送预警信息
MessageDTO messageDTO = TemplateUtil.parse1(ANALYSIS_NUCLIDE.getCode(), dataTool.get());
// 保存报警日志
AlarmAnalysisLog logInfo = new AlarmAnalysisLog();
@ -216,13 +215,14 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
/**
* 首次发现该核素
*/
private List<String> firstDetected(String betaOrGamma,
String dataSourceType,
Set<String> nuclideNames){
List<String> existNames = analysisResultService
.nuclideNames(betaOrGamma, dataSourceType, nuclideNames);
// 两个集合元素相减
return CollUtil.subtractToList(nuclideNames, existNames);
private List<String> firstDetected(String betaOrGamma, String dataSourceType,
String stationId, String sampleId, Set<String> nuclideNames){
/* 查询用户关注的核素是否存在 如果不存在则为首次发现该核素
判断核素是否存在的条件: 该核素的Conc值是否大于MDC值
*/
String detectorId = systemClient.getDetectorId(sampleId);
return analysisResultService.nuclideFirst(betaOrGamma, dataSourceType, stationId,
detectorId, sampleId, nuclideNames);
}
/**
@ -240,8 +240,6 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
String nuclideName = nuclide.getKey();
String concValue = nuclide.getValue();// 浓度值
String avgValue = nuclideAvgs.get(nuclideName);// 浓度均值
if (StrUtil.isBlank(concValue) || StrUtil.isBlank(avgValue))
continue;
if (!NumberUtil.isNumber(concValue) || !NumberUtil.isNumber(avgValue))
continue;
BigDecimal conc = new BigDecimal(concValue);
@ -260,6 +258,17 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
return nuclideInfos;
}
/*
* 是否同时存在两种及以上核素
* */
private List<String> meanWhile(String betaOrGamma, String dataSourceType,
String sampleId, Set<String> nuclideNames){
/* 查询用户关注的核素中 该谱中是否存在两种及以上核素
判断核素是否存在的条件: 该核素的Conc值是否大于MDC值
*/
return analysisResultService.nuclideExist(betaOrGamma, dataSourceType, sampleId, nuclideNames);
}
private void init() {
// start 生成临时Token到线程中
UserTokenContext.setToken(getTempToken());

View File

@ -5,7 +5,10 @@ import java.util.Set;
public interface AnalysisResultService {
List<String> nuclideNames(String betaOrGamma,
String dataSourceType,
Set<String> nuclideNames);
List<String> nuclideExist(String betaOrGamma, String dataSourceType,
String sampleId, Set<String> nuclideNames);
List<String> nuclideFirst(String betaOrGamma, String dataSourceType,
String stationId, String detectorId,
String sampleId, Set<String> nuclideNames);
}

View File

@ -2,7 +2,6 @@ package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.ConcDtoXe;
import org.jeecg.modules.base.entity.rnauto.GardsNuclIded;
import java.util.List;
@ -13,5 +12,8 @@ public interface IGardsNuclIdedAutoService extends IService<GardsNuclIded> {
List<ConcDto> getConc(Map<String,Object> params);
List<String> nuclideNames(Set<String> nuclideNames);
List<String> nuclideExist(String sampleId, Set<String> nuclideNames);
List<String> nuclideFirst(String stationId, String detectorId,
String sampleId, Set<String> nuclideNames);
}

View File

@ -10,7 +10,10 @@ import java.util.Set;
public interface IGardsNuclIdedManService extends IService<GardsNuclIded> {
List<ConcDto> getConc(Map<String,Object> params);
List<ConcDto> getConc(Map<String, Object> params);
List<String> nuclideNames(Set<String> nuclideNames);
List<String> nuclideExist(String sampleId, Set<String> nuclideNames);
List<String> nuclideFirst(String stationId, String detectorId,
String sampleId, Set<String> nuclideNames);
}

View File

@ -1,7 +1,6 @@
package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.ConcDtoXe;
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
@ -13,5 +12,8 @@ public interface IGardsXeResultsAutoService extends IService<GardsXeResults> {
List<ConcDtoXe> getConc(Map<String,Object> params, Set<String> nuclides);
List<String> nuclideNames(Set<String> nuclideNames);
List<String> nuclideExist(String sampleId, Set<String> nuclideNames);
List<String> nuclideFirst(String stationId, String detectorId,
String sampleId, Set<String> nuclideNames);
}

View File

@ -1,7 +1,6 @@
package org.jeecg.modules.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.ConcDtoXe;
import org.jeecg.modules.base.entity.rnman.GardsXeResults;
@ -13,5 +12,8 @@ public interface IGardsXeResultsManService extends IService<GardsXeResults> {
List<ConcDtoXe> getConc(Map<String,Object> params, Set<String> nuclides);
List<String> nuclideNames(Set<String> nuclideNames);
List<String> nuclideExist(String sampleId, Set<String> nuclideNames);
List<String> nuclideFirst(String stationId, String detectorId,
String sampleId, Set<String> nuclideNames);
}

View File

@ -18,5 +18,5 @@ public interface ISysEmailLogService extends IService<SysEmailLog> {
Result<?> analysis(String emailId, String startDate, String endDate);
Boolean hoursAgo(String emailId, String hoursAgo);
Integer getMinus(String emailId);
}

View File

@ -2,6 +2,7 @@ package org.jeecg.modules.service.impl;
import cn.hutool.core.collection.ListUtil;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.modules.feignclient.SystemClient;
import org.jeecg.modules.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -26,25 +27,51 @@ public class AnalysisResultServiceImpl implements AnalysisResultService {
@Override
public List<String> nuclideNames(String betaOrGamma, String dataSourceType, Set<String> nuclideNames) {
public List<String> nuclideExist(String betaOrGamma, String dataSourceType,
String sampleId, Set<String> nuclideNames) {
if (CommonConstant.ARMDARR.equals(dataSourceType)){
if (CommonConstant.BETA.equals(betaOrGamma)){
return xeResultsAutoService.nuclideNames(nuclideNames);
return xeResultsAutoService.nuclideExist(sampleId, nuclideNames);
}else if (CommonConstant.GAMMA.equals(betaOrGamma)){
return nuclIdedAutoService.nuclideNames(nuclideNames);
return nuclIdedAutoService.nuclideExist(sampleId, nuclideNames);
}else {
return ListUtil.toList(nuclideNames);
return ListUtil.empty();
}
} else if (CommonConstant.ARMDRRR.equals(dataSourceType)) {
if (CommonConstant.BETA.equals(betaOrGamma)){
return xeResultsManService.nuclideNames(nuclideNames);
return xeResultsManService.nuclideExist(sampleId, nuclideNames);
}else if (CommonConstant.GAMMA.equals(betaOrGamma)){
return nuclIdedManService.nuclideNames(nuclideNames);
return nuclIdedManService.nuclideExist(sampleId, nuclideNames);
}else {
return ListUtil.toList(nuclideNames);
return ListUtil.empty();
}
}else {
return ListUtil.toList(nuclideNames);
return ListUtil.empty();
}
}
@Override
public List<String> nuclideFirst(String betaOrGamma, String dataSourceType,
String stationId, String detectorId,
String sampleId, Set<String> nuclideNames) {
if (CommonConstant.ARMDARR.equals(dataSourceType)){
if (CommonConstant.BETA.equals(betaOrGamma)){
return xeResultsAutoService.nuclideFirst(stationId, detectorId, sampleId, nuclideNames);
}else if (CommonConstant.GAMMA.equals(betaOrGamma)){
return nuclIdedAutoService.nuclideFirst(stationId, detectorId, sampleId, nuclideNames);
}else {
return ListUtil.empty();
}
} else if (CommonConstant.ARMDRRR.equals(dataSourceType)) {
if (CommonConstant.BETA.equals(betaOrGamma)){
return xeResultsManService.nuclideFirst(stationId, detectorId, sampleId, nuclideNames);
}else if (CommonConstant.GAMMA.equals(betaOrGamma)){
return nuclIdedManService.nuclideFirst(stationId, detectorId, sampleId, nuclideNames);
}else {
return ListUtil.empty();
}
}else {
return ListUtil.empty();
}
}
}

View File

@ -1,10 +1,15 @@
package org.jeecg.modules.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.NumberUtil;
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;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.ConcDtoXe;
import org.jeecg.modules.base.dto.SampNucl;
import org.jeecg.modules.base.entity.rnauto.GardsNuclIded;
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
import org.jeecg.modules.mapper.GardsNuclIdedAutoMapper;
@ -13,6 +18,7 @@ import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
@ -30,7 +36,34 @@ public class GardsNuclIdedAutoServiceImpl extends ServiceImpl<GardsNuclIdedAutoM
}
@Override
public List<String> nuclideNames(Set<String> nuclideNames) {
return baseMapper.nuclideNames(nuclideNames);
public List<String> nuclideExist(String sampleId, Set<String> nuclideNames) {
LambdaQueryWrapper<GardsNuclIded> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(GardsNuclIded::getSampleId, sampleId);
wrapper.in(GardsNuclIded::getNuclideName, nuclideNames);
List<GardsNuclIded> nuclIdeds = this.list(wrapper);
// 判断核素是否存在的条件: 该核素Conc值是否大于MDC值
Set<String> existNuclides = nuclIdeds.stream()
.filter(item -> NumberUtil.isNumber(item.getConcentration()))
.filter(item -> NumberUtil.isNumber(item.getMdc()))
.filter(item -> NumberUtil.isGreater(new BigDecimal(item.getConcentration()), new BigDecimal(item.getMdc())))
.map(GardsNuclIded::getNuclideName)
.collect(Collectors.toSet());
return ListUtil.toList(existNuclides);
}
@Override
public List<String> nuclideFirst(String stationId, String detectorId,
String sampleId, Set<String> nuclideNames) {
List<SampNucl> sampNucls = this.baseMapper.sampNucl(stationId, detectorId, nuclideNames);
// 获取除了当前谱的所有存在的核素
Set<String> notCurrent = sampNucls.stream()
.filter(item -> !StrUtil.equals(item.getSampleId(), sampleId))
.map(SampNucl::getNuclideName).collect(Collectors.toSet());
// 获取当前谱的所有存在的核素
Set<String> current = sampNucls.stream()
.filter(item -> StrUtil.equals(item.getSampleId(), sampleId))
.map(SampNucl::getNuclideName).collect(Collectors.toSet());
// 两集合相减即为当前谱中的首次在当前台站当前探测器中出现的核素
return CollUtil.subtractToList(current, notCurrent);
}
}

View File

@ -1,16 +1,21 @@
package org.jeecg.modules.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.NumberUtil;
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;
import org.jeecg.common.constant.DateConstant;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
import org.jeecg.modules.base.dto.SampNucl;
import org.jeecg.modules.base.entity.rnman.GardsNuclIded;
import org.jeecg.modules.mapper.GardsNuclIdedManMapper;
import org.jeecg.modules.service.IGardsNuclIdedManService;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.List;
@ -28,7 +33,34 @@ public class GardsNuclIdedManServiceImpl extends ServiceImpl<GardsNuclIdedManMap
}
@Override
public List<String> nuclideNames(Set<String> nuclideNames) {
return baseMapper.nuclideNames(nuclideNames);
public List<String> nuclideExist(String sampleId, Set<String> nuclideNames) {
LambdaQueryWrapper<GardsNuclIded> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(GardsNuclIded::getSampleId, sampleId);
wrapper.in(GardsNuclIded::getNuclideName, nuclideNames);
List<GardsNuclIded> nuclIdeds = this.list(wrapper);
// 判断核素是否存在的条件: 该核素Conc值是否大于MDC值
Set<String> existNuclides = nuclIdeds.stream()
.filter(item -> NumberUtil.isNumber(item.getConcentration()))
.filter(item -> NumberUtil.isNumber(item.getMdc()))
.filter(item -> NumberUtil.isGreater(new BigDecimal(item.getConcentration()), new BigDecimal(item.getMdc())))
.map(GardsNuclIded::getNuclideName)
.collect(Collectors.toSet());
return ListUtil.toList(existNuclides);
}
@Override
public List<String> nuclideFirst(String stationId, String detectorId,
String sampleId, Set<String> nuclideNames) {
List<SampNucl> sampNucls = this.baseMapper.sampNucl(stationId, detectorId, nuclideNames);
// 获取除了当前谱的所有存在的核素
Set<String> notCurrent = sampNucls.stream()
.filter(item -> !StrUtil.equals(item.getSampleId(), sampleId))
.map(SampNucl::getNuclideName).collect(Collectors.toSet());
// 获取当前谱的所有存在的核素
Set<String> current = sampNucls.stream()
.filter(item -> StrUtil.equals(item.getSampleId(), sampleId))
.map(SampNucl::getNuclideName).collect(Collectors.toSet());
// 两集合相减即为当前谱中的首次在当前台站当前探测器中出现的核素
return CollUtil.subtractToList(current, notCurrent);
}
}

View File

@ -2,12 +2,14 @@ package org.jeecg.modules.service.impl;
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.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.jeecg.common.constant.DateConstant;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.ConcDtoXe;
import org.jeecg.modules.base.dto.SampNucl;
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
import org.jeecg.modules.mapper.GardsXeResultsAutoMapper;
import org.jeecg.modules.service.IGardsXeResultsAutoService;
@ -51,7 +53,33 @@ public class GardsXeResultsAutoServiceImpl extends ServiceImpl<GardsXeResultsAut
}
@Override
public List<String> nuclideNames(Set<String> nuclideNames) {
return baseMapper.nuclideNames(nuclideNames);
public List<String> nuclideExist(String sampleId, Set<String> nuclideNames) {
LambdaQueryWrapper<GardsXeResults> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(GardsXeResults::getSampleId, sampleId);
wrapper.in(GardsXeResults::getNuclideName, nuclideNames);
List<GardsXeResults> xeResults = this.list(wrapper);
// 判断核素是否存在的条件: 该核素NidFlag值是否为1
Set<String> existNuclides = xeResults.stream()
.filter(item -> ObjectUtil.isNotNull(item.getNidFlag()))
.filter(item -> item.getNidFlag() == 1)
.map(GardsXeResults::getNuclideName)
.collect(Collectors.toSet());
return ListUtil.toList(existNuclides);
}
@Override
public List<String> nuclideFirst(String stationId, String detectorId,
String sampleId, Set<String> nuclideNames) {
List<SampNucl> sampNucls = this.baseMapper.sampNucl(stationId, detectorId, nuclideNames);
// 获取除了当前谱的所有存在的核素
Set<String> notCurrent = sampNucls.stream()
.filter(item -> !StrUtil.equals(item.getSampleId(), sampleId))
.map(SampNucl::getNuclideName).collect(Collectors.toSet());
// 获取当前谱的所有存在的核素
Set<String> current = sampNucls.stream()
.filter(item -> StrUtil.equals(item.getSampleId(), sampleId))
.map(SampNucl::getNuclideName).collect(Collectors.toSet());
// 两集合相减即为当前谱中的首次在当前台站当前探测器中出现的核素
return CollUtil.subtractToList(current, notCurrent);
}
}

View File

@ -2,6 +2,7 @@ package org.jeecg.modules.service.impl;
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.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.constant.DateConstant;
import org.jeecg.modules.base.dto.ConcDto;
import org.jeecg.modules.base.dto.ConcDtoXe;
import org.jeecg.modules.base.dto.SampNucl;
import org.jeecg.modules.base.entity.rnman.GardsXeResults;
import org.jeecg.modules.mapper.GardsXeResultsManMapper;
import org.jeecg.modules.service.IGardsXeResultsManService;
@ -51,7 +53,33 @@ public class GardsXeResultsManServiceImpl extends ServiceImpl<GardsXeResultsManM
}
@Override
public List<String> nuclideNames(Set<String> nuclideNames) {
return baseMapper.nuclideNames(nuclideNames);
public List<String> nuclideExist(String sampleId, Set<String> nuclideNames) {
LambdaQueryWrapper<GardsXeResults> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(GardsXeResults::getSampleId, sampleId);
wrapper.in(GardsXeResults::getNuclideName, nuclideNames);
List<GardsXeResults> xeResults = this.list(wrapper);
// 判断核素是否存在的条件: 该核素NidFlag值是否为1
Set<String> existNuclides = xeResults.stream()
.filter(item -> ObjectUtil.isNotNull(item.getNidFlag()))
.filter(item -> item.getNidFlag() == 1)
.map(GardsXeResults::getNuclideName)
.collect(Collectors.toSet());
return ListUtil.toList(existNuclides);
}
@Override
public List<String> nuclideFirst(String stationId, String detectorId,
String sampleId, Set<String> nuclideNames) {
List<SampNucl> sampNucls = this.baseMapper.sampNucl(stationId, detectorId, nuclideNames);
// 获取除了当前谱的所有存在的核素
Set<String> notCurrent = sampNucls.stream()
.filter(item -> !StrUtil.equals(item.getSampleId(), sampleId))
.map(SampNucl::getNuclideName).collect(Collectors.toSet());
// 获取当前谱的所有存在的核素
Set<String> current = sampNucls.stream()
.filter(item -> StrUtil.equals(item.getSampleId(), sampleId))
.map(SampNucl::getNuclideName).collect(Collectors.toSet());
// 两集合相减即为当前谱中的首次在当前台站当前探测器中出现的核素
return CollUtil.subtractToList(current, notCurrent);
}
}

View File

@ -1,6 +1,9 @@
package org.jeecg.modules.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
@ -229,10 +232,18 @@ public class SysEmailLogServiceImpl extends ServiceImpl<SysEmailLogMapper, SysEm
}
@Override
public Boolean hoursAgo(String emailId, String hoursAgo) {
public Integer getMinus(String emailId) {
LambdaQueryWrapper<SysEmailLog> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysEmailLog::getEmailId, emailId);
wrapper.gt(SysEmailLog::getCreateTime, hoursAgo);
return CollUtil.isEmpty(this.list(wrapper));
wrapper.orderByDesc(SysEmailLog::getCreateTime);
wrapper.last("limit 1");
SysEmailLog emailLog = getOne(wrapper, false);
if (ObjectUtil.isNull(emailLog))
return -1;
Date createTime = emailLog.getCreateTime();
if (ObjectUtil.isNull(createTime))
return -1;
// 获取最新一条数据和当前时间所间隔的分钟数
return Math.toIntExact(DateUtil.between(createTime, new Date(), DateUnit.MINUTE));
}
}

View File

@ -233,9 +233,15 @@ public class AutoProcessManager{
if(databaseEmail.getEnabled().equals(SysMailEnableType.ENABLE.getMailEnableType())){
final boolean testFlag = testConnectEmailServer(databaseEmail);
if(testFlag){
databaseEmail.setNewEmailFlag(true);
if (emailExecThreadMap.containsKey(databaseEmail.getId())) {
EmailParsingActuator actuator = emailExecThreadMap.get(databaseEmail.getId());
actuator.setStop(false);
log.info("{}邮箱重新加入监测队列",databaseEmail.getUsername());
} else {
databaseEmail.setNewEmailFlag(true);
log.info("{}邮箱加入监测队列,设置新增标记",databaseEmail.getUsername());
}
emailMap.put(databaseEmail.getId(),databaseEmail);
log.info("{}邮箱加入监测队列,设置新增标记",databaseEmail.getUsername());
}
}
}
@ -279,6 +285,7 @@ public class AutoProcessManager{
if(next.getValue().getState() == State.TERMINATED){
log.info("{}邮箱执行线程已停止emailExecThreadMap删除此邮箱数据",next.getValue().getEmailProperties().getUsername());
checkStopThreads.remove();
emailMap.remove(next.getKey());
}
}

View File

@ -17,10 +17,7 @@ import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.concurrent.*;
/**
@ -79,11 +76,17 @@ public class EmailParsingActuator extends Thread{
try {
Message[] messages = emailServiceManager.receiveMail();
if(ArrayUtils.isNotEmpty(messages)){
log.info("EmailParsingActuator本次获取邮件数量为:{}",messages.length);
log.info("EmailParsingActuator本次{}获取邮件数量为:{}", Thread.currentThread().getName(), messages.length);
//检验获取的邮件是否在之前删除失败列表中若在直接调用邮件API删除并且此次数组里元素也删除
for(int i=messages.length-1;i>=0;i--){
if (null == messages[i].getHeader("Message-ID")) {
System.out.println("Message ID是空值信息");
messages = ArrayUtils.remove(messages, i);
continue;
}
if (!messages[i].isExpunged()){
String messageId = ((MimeMessage) messages[i]).getMessageID();
System.out.println("正常获取到的Message ID是"+messageId);
final boolean exist = emailServiceManager.check(messages[i],messageId);
messageIds.add(messageId);
if(exist){
@ -105,10 +108,13 @@ public class EmailParsingActuator extends Thread{
taskLatch.await();
}
}
}catch (InterruptedException e) {
e.printStackTrace();
} catch (MessagingException e) {
System.out.println("捕获MessagingException");
closeResource();
throw new RuntimeException(e);
} catch (Exception e) {
closeResource();
log.error(""+e);
} finally {
//清除本批次邮件日志缓存
EmailLogManager.getInstance().clear();

View File

@ -97,9 +97,6 @@ public class SpectrumParsingActuator implements Runnable{
String emlName = subject+ StringConstant.UNDER_LINE+ receiveDate;
String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId;
// spectrumServiceQuotes.getRedisUtil().set(key,emlName,expiryTime);
//判断当前key的下载次数是否超过限制次数
spectrumServiceQuotes.getRedisUtil().incr(key, 1L);
spectrumServiceQuotes.getRedisUtil().expire(key, expiryTime);
//线程开始初始化时初始本线程负责的能谱日志事件
SpectrumLogManager.mailSpectrumLogManager.offer(Thread.currentThread().getId(),null);
@ -144,7 +141,10 @@ public class SpectrumParsingActuator implements Runnable{
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 {
} else {
//判断当前key的下载次数是否超过限制次数
spectrumServiceQuotes.getRedisUtil().incr(key, 1L);
spectrumServiceQuotes.getRedisUtil().expire(key, expiryTime);
// 如果邮件内容校验失败(邮件内容不完整) 将错误邮件从eml移动到emlError
if (Objects.nonNull(emlFile) && emlFile.exists()){
moveEmail(emlFile, key);

View File

@ -45,7 +45,6 @@ public interface AbnormalAlarmClient {
String getServerName(@RequestParam String id);
/* SysEmailLogController下相关接口 */
@GetMapping("/sysEmailLog/hoursAgo")
Boolean hoursAgo(@RequestParam String emailId,
@RequestParam String hoursAgo);
@GetMapping("/sysEmailLog/getMinus")
Integer getMinus(@RequestParam String emailId);
}

View File

@ -1,70 +0,0 @@
package org.jeecg.modules.quartz.controller;
import cn.hutool.core.map.MapUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.Prompt;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.ImportExcelUtil;
import org.jeecg.common.util.RedisStreamUtil;
import org.jeecg.modules.base.dto.Info;
import org.jeecg.modules.quartz.entity.QuartzJob;
import org.jeecg.modules.quartz.service.IQuartzJobService;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("sys/testana")
@Slf4j
@Api(tags = "定时任务接口")
public class TestController {
@Autowired
private RedisStreamUtil redisStreamUtil;
@GetMapping("test")
public void test(){
Info info = new Info();
info.setStationId("205");
info.setSampleId("425496");
info.setBetaOrGamma("Gamma");
info.setFullOrPrel("FULL");
info.setDatasource("1");
info.setSampleName("CAX05_001-20230624_0220_Q_FULL_299.3.PHD");
info.setCollectionDate(LocalDateTime.now());
Map<String, String> nuclides = MapUtil.newHashMap();
nuclides.put("Be7","1000000");
nuclides.put("sss","1000000");
nuclides.put("Tl208","10");
info.setNuclides(nuclides);
redisStreamUtil.pushAnalysis(info);
}
}

View File

@ -1,16 +1,12 @@
package org.jeecg.modules.quartz.jobs;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
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.Data;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.common.constant.DateConstant;
import org.jeecg.common.constant.FillRuleConstant;
import org.jeecg.common.constant.RedisConstant;
import org.jeecg.common.util.DataTool;
import org.jeecg.common.util.NumUtil;
@ -21,16 +17,11 @@ 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.quartz.entity.Monitor;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import static org.jeecg.modules.base.enums.SourceType.EMAIL;
import static org.jeecg.modules.base.enums.Template.MONITOR_EMAIL;
@ -39,9 +30,6 @@ import static org.jeecg.modules.base.enums.Template.MONITOR_EMAIL;
@Component
public class EmailJob extends Monitor{
@Value("${task.undealHours:2}")
private Integer undealHours; // 邮箱邮件未处理时长 单位: h 默认: 2h
/**
* 解析Email预警规则
**/
@ -82,8 +70,8 @@ public class EmailJob extends Monitor{
case EMAIL_CONN: // 监控项id 1: 测试邮箱服务是否可以连接成功
current = connectionStatus(sourceId);
break;
case EMAIL_PROCESS: // 监控项id 3: 邮箱邮件是否被自动处理程序处理
current = process(sourceId);
case EMAIL_UNPROCESSED: // 监控项id 3: 邮箱邮件是否被自动处理程序处理
current = unProcess(sourceId);
break;
// 追加的监控项...
default:
@ -141,16 +129,9 @@ public class EmailJob extends Monitor{
}
/*
* 监控项id: 3 邮箱邮件在一定时间内是否被处理 (预警值: 0 非0值则不需要报警)
* 监控项id: 3 邮箱邮件在一定时间内是否被自动处理程序处理
* */
private Integer process(String emailId){
int res = 1;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DateConstant.DATE_TIME);
LocalDateTime minusHours = LocalDateTime.now().minusHours(undealHours);
String hoursAgo = minusHours.format(formatter);
Boolean result = getAlarmClient().hoursAgo(emailId, hoursAgo);
if (ObjectUtil.isNotNull(result) && result)
res = 0;
return res;
private Integer unProcess(String emailId){
return getAlarmClient().getMinus(emailId);
}
}

View File

@ -19,7 +19,7 @@ import java.util.Map;
public class GardsSampleDataController {
@Autowired
private IGardsSampleDataService gardsSampleDataService;
private IGardsSampleDataService sampleDataService;
@Autowired
private RedisUtil redisUtil;
@ -28,7 +28,7 @@ public class GardsSampleDataController {
public Result<IPage<GardsSampleDataSystem>> findPage(QueryRequest queryRequest,
GardsSampleDataSystem gardsSampleData,
boolean collectStopCheck, boolean acqDotStartCheck){
return gardsSampleDataService.findPage(queryRequest, gardsSampleData, collectStopCheck, acqDotStartCheck);
return sampleDataService.findPage(queryRequest, gardsSampleData, collectStopCheck, acqDotStartCheck);
}
@GetMapping("findStations")
@ -49,7 +49,11 @@ public class GardsSampleDataController {
@ApiOperation(value = "删除DATA_BASE数据", notes = "删除DATA_BASE数据")
public Result<?> deleteById(@RequestParam Integer sampleId, boolean sampleData,
boolean rnAuto, boolean rnMan){
return gardsSampleDataService.deleteById(sampleId, sampleData, rnAuto, rnMan);
return sampleDataService.deleteById(sampleId, sampleData, rnAuto, rnMan);
}
@GetMapping("getDetectorId")
public String getDetectorId(@RequestParam String sampleId){
return sampleDataService.getDetectorId(sampleId);
}
}

View File

@ -31,4 +31,6 @@ public interface IGardsSampleDataService extends IService<GardsSampleDataSystem>
GardsSampleDataSystem getOne(Integer sampleId);
void delTables(List<String> tableNames, Integer sampleId);
String getDetectorId(String sampleId);
}

View File

@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
@ -22,6 +23,7 @@ import org.jeecg.common.util.FTPUtil;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.modules.base.dto.AnalysesDto;
import org.jeecg.modules.base.dto.OwnerDto;
import org.jeecg.modules.base.entity.original.GardsSampleData;
import org.jeecg.modules.base.entity.rnauto.GardsAnalyses;
import org.jeecg.modules.system.entity.GardsSampleDataSystem;
import org.jeecg.modules.system.mapper.GardsSampleDataMapper;
@ -203,6 +205,15 @@ public class GardsSampleDataServiceImpl extends ServiceImpl<GardsSampleDataMappe
}
}
@Override
public String getDetectorId(String sampleId) {
LambdaQueryWrapper<GardsSampleDataSystem> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(GardsSampleDataSystem::getSampleId, sampleId);
Integer detectorId = Optional.of(this.getOne(wrapper, false))
.orElse(new GardsSampleDataSystem()).getDetectorId();
return ObjectUtil.isNull(detectorId) ? null : detectorId.toString();
}
private String samplePath(String savePath, Integer sampleId){
GardsSampleDataSystem sampleData = getOne(sampleId);
String inputFileName = sampleData.getInputFileName();