Compare commits
10 Commits
fc978d459e
...
ff2f73eb41
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ff2f73eb41 | ||
![]() |
4bb2518d36 | ||
![]() |
c5ffa77954 | ||
![]() |
7b5e167eb2 | ||
![]() |
cbe8ef9bb0 | ||
![]() |
f309792c0d | ||
![]() |
09a23b371b | ||
![]() |
95a150122c | ||
![]() |
035e842240 | ||
![]() |
ebf8958f60 |
|
@ -9,6 +9,8 @@ import com.sun.mail.imap.IMAPStore;
|
||||||
import com.sun.mail.smtp.SMTPAddressFailedException;
|
import com.sun.mail.smtp.SMTPAddressFailedException;
|
||||||
import io.swagger.models.auth.In;
|
import io.swagger.models.auth.In;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
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.apache.commons.lang3.StringUtils;
|
||||||
import org.jeecg.common.api.dto.message.MessageDTO;
|
import org.jeecg.common.api.dto.message.MessageDTO;
|
||||||
import org.jeecg.common.constant.RedisConstant;
|
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;
|
String status = EmailLogManager.STATUS_SUCCESS;
|
||||||
try{
|
try{
|
||||||
//配置邮件服务属性
|
//配置邮件服务属性
|
||||||
|
@ -183,12 +185,11 @@ public class EmailServiceManager {
|
||||||
return Arrays.copyOfRange(messages,0,this.receiveNum-1);
|
return Arrays.copyOfRange(messages,0,this.receiveNum-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}catch (MessagingException e){
|
} catch (MessagingException e){
|
||||||
status = EmailLogManager.STATUS_ERROR;
|
status = EmailLogManager.STATUS_ERROR;
|
||||||
log.error("Email connection is abnormal, account is {}, service is {},the reason is {}.",email.getName(),email.getEmailServerAddress(),e.getMessage());
|
log.error("Email connection is abnormal, account is {}, service is {},the reason is {}.",email.getName(),email.getEmailServerAddress(),e.getMessage());
|
||||||
e.printStackTrace();
|
throw e;
|
||||||
return null;
|
} finally {
|
||||||
}finally {
|
|
||||||
EmailLogEvent connectEvent = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,email,status,EmailLogManager.CONNECT);
|
EmailLogEvent connectEvent = new EmailLogEvent(EmailLogManager.GS_TYPE_GET,email,status,EmailLogManager.CONNECT);
|
||||||
EmailLogManager.getInstance().setConnectLogEvent(connectEvent);
|
EmailLogManager.getInstance().setConnectLogEvent(connectEvent);
|
||||||
//GetAllId C++原业务是把远程邮箱邮件同步到C++,本次java编写没有这一步,所以和Connect绑定,若Connect成功则GetAllId成功
|
//GetAllId C++原业务是把远程邮箱邮件同步到C++,本次java编写没有这一步,所以和Connect绑定,若Connect成功则GetAllId成功
|
||||||
|
@ -532,7 +533,8 @@ public class EmailServiceManager {
|
||||||
File emlFile = null;
|
File emlFile = null;
|
||||||
String status = EmailLogManager.STATUS_SUCCESS;
|
String status = EmailLogManager.STATUS_SUCCESS;
|
||||||
Date receivedDate = null;
|
Date receivedDate = null;
|
||||||
FileOutputStream outputStream = null;
|
InputStream inputStream = null;
|
||||||
|
BufferedOutputStream outputStream = null;
|
||||||
try {
|
try {
|
||||||
//获取发件人
|
//获取发件人
|
||||||
final String address = ((InternetAddress) message.getFrom()[0]).getAddress();
|
final String address = ((InternetAddress) message.getFrom()[0]).getAddress();
|
||||||
|
@ -566,25 +568,19 @@ public class EmailServiceManager {
|
||||||
final String rootPath = spectrumPathProperties.getRootPath();
|
final String rootPath = spectrumPathProperties.getRootPath();
|
||||||
final String emlPath = spectrumPathProperties.getEmlPath();
|
final String emlPath = spectrumPathProperties.getEmlPath();
|
||||||
emlFile = new File(rootPath+emlPath+File.separator+fileName);
|
emlFile = new File(rootPath+emlPath+File.separator+fileName);
|
||||||
outputStream = new FileOutputStream(emlFile);
|
// outputStream = new FileOutputStream(emlFile);
|
||||||
message.writeTo(outputStream);
|
// 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) {
|
} catch (MessagingException | IOException e) {
|
||||||
// 下载邮件失败 抛出自定义邮件下载异常
|
// 下载邮件失败 抛出自定义邮件下载异常
|
||||||
status = EmailLogManager.STATUS_ERROR;
|
status = EmailLogManager.STATUS_ERROR;
|
||||||
|
@ -598,7 +594,11 @@ public class EmailServiceManager {
|
||||||
(Objects.isNull(emlFile)?" ":emlFile.getAbsolutePath()));
|
(Objects.isNull(emlFile)?" ":emlFile.getAbsolutePath()));
|
||||||
EmailLogManager.getInstance().offer(Thread.currentThread().getId(),event);
|
EmailLogManager.getInstance().offer(Thread.currentThread().getId(),event);
|
||||||
try {
|
try {
|
||||||
|
if (Objects.nonNull(inputStream)) {
|
||||||
|
inputStream.close();
|
||||||
|
}
|
||||||
if (Objects.nonNull(outputStream)) {
|
if (Objects.nonNull(outputStream)) {
|
||||||
|
outputStream.flush();
|
||||||
outputStream.close();
|
outputStream.close();
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
package org.jeecg.common.util;
|
package org.jeecg.common.util;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class DataTool {
|
public class DataTool {
|
||||||
|
|
||||||
private int counter = 1;
|
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) {
|
public DataTool put(Object value) {
|
||||||
data.put(String.format("p%d", counter), value);
|
data.put(String.format("p%d", counter), value);
|
||||||
|
|
|
@ -61,7 +61,8 @@ public class TemplateUtil {
|
||||||
for (String key : keys) {
|
for (String key : keys) {
|
||||||
contents.add(ReUtil.getGroup1(StrUtil.format(pattern, key), templateContent));
|
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
|
String content = FreemarkerParseFactory
|
||||||
.parseTemplateContent(templateContent, data, true);
|
.parseTemplateContent(templateContent, data, true);
|
||||||
messageDTO.setContent(content);
|
messageDTO.setContent(content);
|
||||||
|
@ -102,7 +103,8 @@ public class TemplateUtil {
|
||||||
for (String key : keys) {
|
for (String key : keys) {
|
||||||
contents.add(ReUtil.getGroup1(StrUtil.format(pattern, key), templateContent));
|
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
|
String content = FreemarkerParseFactory
|
||||||
.parseTemplateContent(templateContent, data, true);
|
.parseTemplateContent(templateContent, data, true);
|
||||||
messageDTO.setContent(content);
|
messageDTO.setContent(content);
|
||||||
|
|
|
@ -164,8 +164,8 @@ public class TokenUtils {
|
||||||
String secret = CommonConstant.TEMP_TOKEN_SECRET;
|
String secret = CommonConstant.TEMP_TOKEN_SECRET;
|
||||||
// 模拟登录生成Token
|
// 模拟登录生成Token
|
||||||
String token = JwtUtil.sign(username, secret);
|
String token = JwtUtil.sign(username, secret);
|
||||||
// 设置Token缓存有效时间为 3 分钟
|
// 设置Token缓存有效时间为 60 秒
|
||||||
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token, 3 * 60);
|
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token, 60);
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
package org.jeecg.modules.base.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class SampNucl {
|
||||||
|
|
||||||
|
private String sampleId;
|
||||||
|
|
||||||
|
private String nuclideName;
|
||||||
|
}
|
|
@ -9,7 +9,7 @@ import lombok.Getter;
|
||||||
public enum Item {
|
public enum Item {
|
||||||
EMAIL_CONN("1", "Email Connection Status"),
|
EMAIL_CONN("1", "Email Connection Status"),
|
||||||
TABLESPACE_USAGE("2", "TableSpace Usage"),
|
TABLESPACE_USAGE("2", "TableSpace Usage"),
|
||||||
EMAIL_PROCESS("3", "Email Process");
|
EMAIL_UNPROCESSED("3", "Email Unprocessed");
|
||||||
|
|
||||||
private final String value;
|
private final String value;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.jeecg.modules.base.enums;
|
||||||
|
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 资源类型
|
* 资源类型
|
||||||
|
@ -9,22 +10,19 @@ import cn.hutool.core.util.StrUtil;
|
||||||
* @author nieziyan
|
* @author nieziyan
|
||||||
* @date 2023-06-30
|
* @date 2023-06-30
|
||||||
*/
|
*/
|
||||||
|
@Getter
|
||||||
public enum SourceType {
|
public enum SourceType {
|
||||||
|
|
||||||
EMAIL("Email"),
|
EMAIL("Email"),
|
||||||
DATABASE("Database"),
|
DATABASE("Database"),
|
||||||
SERVER("Server");
|
SERVER("Server");
|
||||||
|
|
||||||
private String type;
|
private final String type;
|
||||||
|
|
||||||
SourceType(String type) {
|
SourceType(String type) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SourceType typeOf(String type){
|
public static SourceType typeOf(String type){
|
||||||
for (SourceType sourceType : SourceType.values()) {
|
for (SourceType sourceType : SourceType.values()) {
|
||||||
if (StrUtil.equals(sourceType.getType(),type))
|
if (StrUtil.equals(sourceType.getType(),type))
|
||||||
|
|
|
@ -69,9 +69,8 @@ public class SysEmailLogController {
|
||||||
return sysEmailLogService.analysis(emailId, startDate, endDate);
|
return sysEmailLogService.analysis(emailId, startDate, endDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("hoursAgo")
|
@GetMapping("getMinus")
|
||||||
public Boolean hoursAgo(@RequestParam("emailId") String emailId,
|
public Integer getMinus(@RequestParam("emailId") String emailId){
|
||||||
@RequestParam("hoursAgo") String hoursAgo){
|
return sysEmailLogService.getMinus(emailId);
|
||||||
return sysEmailLogService.hoursAgo(emailId, hoursAgo);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,5 +43,7 @@ public interface SystemClient {
|
||||||
@PostMapping("/sys/appMessage/pushMessageToSingle")
|
@PostMapping("/sys/appMessage/pushMessageToSingle")
|
||||||
void pushMessageToSingle(@RequestBody MessageDTO messageDTO, @RequestParam String groupId);
|
void pushMessageToSingle(@RequestBody MessageDTO messageDTO, @RequestParam String groupId);
|
||||||
|
|
||||||
|
/* GardsSampleDataController下相关接口 */
|
||||||
|
@GetMapping("/gardsSampleData/getDetectorId")
|
||||||
|
String getDetectorId(@RequestParam String sampleId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.jeecg.modules.base.dto.ConcDto;
|
import org.jeecg.modules.base.dto.ConcDto;
|
||||||
import org.jeecg.modules.base.dto.ConcDtoXe;
|
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.GardsNuclIded;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -15,5 +16,5 @@ public interface GardsNuclIdedAutoMapper 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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package org.jeecg.modules.mapper;
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.jeecg.modules.base.dto.ConcDto;
|
import org.jeecg.modules.base.dto.ConcDto;
|
||||||
|
import org.jeecg.modules.base.dto.SampNucl;
|
||||||
import org.jeecg.modules.base.entity.rnman.GardsNuclIded;
|
import org.jeecg.modules.base.entity.rnman.GardsNuclIded;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -12,7 +13,7 @@ import java.util.Set;
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface GardsNuclIdedManMapper extends BaseMapper<GardsNuclIded> {
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.jeecg.modules.base.dto.ConcDto;
|
import org.jeecg.modules.base.dto.ConcDto;
|
||||||
import org.jeecg.modules.base.dto.ConcDtoXe;
|
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.base.entity.rnauto.GardsXeResults;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -15,5 +16,5 @@ public interface GardsXeResultsAutoMapper extends BaseMapper<GardsXeResults> {
|
||||||
|
|
||||||
List<ConcDtoXe> getConc(Map<String,Object> params);
|
List<ConcDtoXe> getConc(Map<String,Object> params);
|
||||||
|
|
||||||
List<String> nuclideNames(Set<String> nuclideNames);
|
List<SampNucl> sampNucl(String stationId, String detectorId, Set<String> nuclideNames);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.jeecg.modules.base.dto.ConcDto;
|
import org.jeecg.modules.base.dto.ConcDto;
|
||||||
import org.jeecg.modules.base.dto.ConcDtoXe;
|
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.base.entity.rnman.GardsXeResults;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -15,5 +16,5 @@ public interface GardsXeResultsManMapper extends BaseMapper<GardsXeResults> {
|
||||||
|
|
||||||
List<ConcDtoXe> getConc(Map<String,Object> params);
|
List<ConcDtoXe> getConc(Map<String,Object> params);
|
||||||
|
|
||||||
List<String> nuclideNames(Set<String> nuclideNames);
|
List<SampNucl> sampNucl(String stationId, String detectorId, Set<String> nuclideNames);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,18 +23,20 @@
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="sampNucl" resultType="org.jeecg.modules.base.dto.SampNucl">
|
||||||
<select id="nuclideNames" resultType="java.lang.String">
|
|
||||||
SELECT
|
SELECT
|
||||||
NUCLIDENAME
|
n.SAMPLE_ID,
|
||||||
|
n.NUCLIDENAME AS nuclideName
|
||||||
FROM
|
FROM
|
||||||
RNAUTO.GARDS_NUCL_IDED
|
ORIGINAL.GARDS_SAMPLE_DATA s
|
||||||
WHERE
|
INNER JOIN RNAUTO.GARDS_NUCL_IDED n ON s.SAMPLE_ID = n.SAMPLE_ID
|
||||||
NUCLIDENAME IN
|
WHERE s.STATION_ID = #{stationId} AND s.DETECTOR_ID = #{detectorId}
|
||||||
<foreach collection="nuclideNames" separator="," item="nuclideName" index="index" open="(" close=")">
|
<if test="nuclideNames != null and nuclideNames.size() > 0">
|
||||||
#{nuclideName}
|
AND n.NUCLIDENAME IN
|
||||||
|
<foreach collection="nuclideNames" open="(" close=")" index="index" item="item" separator=",">
|
||||||
|
#{item}
|
||||||
</foreach>
|
</foreach>
|
||||||
GROUP BY
|
</if>
|
||||||
NUCLIDENAME
|
AND TO_NUMBER(n.CONCENTRATION) > TO_NUMBER(n.MDC)
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
|
@ -23,18 +23,20 @@
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="sampNucl" resultType="org.jeecg.modules.base.dto.SampNucl">
|
||||||
<select id="nuclideNames" resultType="java.lang.String">
|
|
||||||
SELECT
|
SELECT
|
||||||
NUCLIDENAME
|
n.SAMPLE_ID,
|
||||||
|
n.NUCLIDENAME AS nuclideName
|
||||||
FROM
|
FROM
|
||||||
RNMAN.GARDS_NUCL_IDED
|
ORIGINAL.GARDS_SAMPLE_DATA s
|
||||||
WHERE
|
INNER JOIN RNMAN.GARDS_NUCL_IDED n ON s.SAMPLE_ID = n.SAMPLE_ID
|
||||||
NUCLIDENAME IN
|
WHERE s.STATION_ID = #{stationId} AND s.DETECTOR_ID = #{detectorId}
|
||||||
<foreach collection="nuclideNames" separator="," item="nuclideName" index="index" open="(" close=")">
|
<if test="nuclideNames != null and nuclideNames.size() > 0">
|
||||||
#{nuclideName}
|
AND n.NUCLIDENAME IN
|
||||||
|
<foreach collection="nuclideNames" open="(" close=")" index="index" item="item" separator=",">
|
||||||
|
#{item}
|
||||||
</foreach>
|
</foreach>
|
||||||
GROUP BY
|
</if>
|
||||||
NUCLIDENAME
|
AND TO_NUMBER(n.CONCENTRATION) > TO_NUMBER(n.MDC)
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
|
@ -23,18 +23,20 @@
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="sampNucl" resultType="org.jeecg.modules.base.dto.SampNucl">
|
||||||
<select id="nuclideNames" resultType="java.lang.String">
|
|
||||||
SELECT
|
SELECT
|
||||||
NUCLIDE_NAME
|
n.SAMPLE_ID,
|
||||||
|
n.NUCLIDE_NAME
|
||||||
FROM
|
FROM
|
||||||
RNAUTO.GARDS_XE_RESULTS
|
ORIGINAL.GARDS_SAMPLE_DATA s
|
||||||
WHERE
|
INNER JOIN RNAUTO.GARDS_XE_RESULTS n ON s.SAMPLE_ID = n.SAMPLE_ID
|
||||||
NUCLIDE_NAME IN
|
WHERE s.STATION_ID = #{stationId} AND s.DETECTOR_ID = #{detectorId}
|
||||||
<foreach collection="nuclideNames" separator="," item="nuclideName" index="index" open="(" close=")">
|
<if test="nuclideNames != null and nuclideNames.size() > 0">
|
||||||
#{nuclideName}
|
AND n.NUCLIDE_NAME IN
|
||||||
</foreach>
|
<foreach collection="nuclideNames" open="(" close=")" index="index" item="item" separator=",">
|
||||||
GROUP BY
|
#{item}
|
||||||
NUCLIDE_NAME
|
</foreach>
|
||||||
|
</if>
|
||||||
|
AND n.NID_FLAG = 1
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
|
@ -23,18 +23,20 @@
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="sampNucl" resultType="org.jeecg.modules.base.dto.SampNucl">
|
||||||
<select id="nuclideNames" resultType="java.lang.String">
|
|
||||||
SELECT
|
SELECT
|
||||||
NUCLIDE_NAME
|
n.SAMPLE_ID,
|
||||||
|
n.NUCLIDE_NAME
|
||||||
FROM
|
FROM
|
||||||
RNMAN.GARDS_XE_RESULTS
|
ORIGINAL.GARDS_SAMPLE_DATA s
|
||||||
WHERE
|
INNER JOIN RNMAN.GARDS_XE_RESULTS n ON s.SAMPLE_ID = n.SAMPLE_ID
|
||||||
NUCLIDE_NAME IN
|
WHERE s.STATION_ID = #{stationId} AND s.DETECTOR_ID = #{detectorId}
|
||||||
<foreach collection="nuclideNames" separator="," item="nuclideName" index="index" open="(" close=")">
|
<if test="nuclideNames != null and nuclideNames.size() > 0">
|
||||||
#{nuclideName}
|
AND n.NUCLIDE_NAME IN
|
||||||
|
<foreach collection="nuclideNames" open="(" close=")" index="index" item="item" separator=",">
|
||||||
|
#{item}
|
||||||
</foreach>
|
</foreach>
|
||||||
GROUP BY
|
</if>
|
||||||
NUCLIDE_NAME
|
AND n.NID_FLAG = 1
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
|
@ -5,21 +5,18 @@ import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.collection.ListUtil;
|
import cn.hutool.core.collection.ListUtil;
|
||||||
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.map.MapUtil;
|
||||||
import cn.hutool.core.text.StrBuilder;
|
|
||||||
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.ReUtil;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.poi.hwpf.sprm.SprmIterator;
|
||||||
import org.jeecg.common.api.dto.message.MessageDTO;
|
import org.jeecg.common.api.dto.message.MessageDTO;
|
||||||
import org.jeecg.common.config.mqtoken.UserTokenContext;
|
import org.jeecg.common.config.mqtoken.UserTokenContext;
|
||||||
import org.jeecg.common.constant.CommonConstant;
|
|
||||||
import org.jeecg.common.constant.SymbolConstant;
|
import org.jeecg.common.constant.SymbolConstant;
|
||||||
import org.jeecg.common.constant.enums.SampleType;
|
import org.jeecg.common.constant.enums.SampleType;
|
||||||
import org.jeecg.common.util.*;
|
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.NuclideInfo;
|
||||||
import org.jeecg.modules.base.dto.Info;
|
import org.jeecg.modules.base.dto.Info;
|
||||||
import org.jeecg.modules.base.entity.postgre.AlarmAnalysisLog;
|
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.constant.enums.MessageTypeEnum.*;
|
||||||
import static org.jeecg.common.util.TokenUtils.getTempToken;
|
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.ANALYSIS_NUCLIDE;
|
||||||
import static org.jeecg.modules.base.enums.Template.MONITOR_EMAIL;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@ -156,6 +150,8 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
|
||||||
String betaOrGamma = info.getBetaOrGamma();
|
String betaOrGamma = info.getBetaOrGamma();
|
||||||
String datasource = info.getDatasource();
|
String datasource = info.getDatasource();
|
||||||
String stationId = info.getStationId();
|
String stationId = info.getStationId();
|
||||||
|
String sampleId = info.getSampleId();
|
||||||
|
String sampleName = info.getSampleName();
|
||||||
// 获取谱文件采样日期 如果为null 则默认为LocalDate.now()
|
// 获取谱文件采样日期 如果为null 则默认为LocalDate.now()
|
||||||
LocalDate collDate = ObjectUtil.isNull(info.getCollectionDate()) ? LocalDate.now() :
|
LocalDate collDate = ObjectUtil.isNull(info.getCollectionDate()) ? LocalDate.now() :
|
||||||
info.getCollectionDate().toLocalDate();
|
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> conditions = ListUtil.toList(conditionStr.split(COMMA));
|
||||||
List<String> firstDetected = new ArrayList<>(); // 首次发现
|
List<String> firstDetected = new ArrayList<>(); // 首次发现
|
||||||
List<NuclideInfo> moreThanAvg = new ArrayList<>(); // 超浓度均值
|
List<NuclideInfo> moreThanAvg = new ArrayList<>(); // 超浓度均值
|
||||||
List<String> meanwhile = new ArrayList<>(); // 同时出现两种及以上核素
|
List<String> meanWhile = new ArrayList<>(); // 同时出现两种及以上核素
|
||||||
for (String con : conditions) {
|
for (String con : conditions) {
|
||||||
Condition condition = Condition.valueOf1(con);
|
Condition condition = Condition.valueOf1(con);
|
||||||
if (ObjectUtil.isNull(condition)) continue;
|
if (ObjectUtil.isNull(condition)) continue;
|
||||||
switch (condition){
|
switch (condition){
|
||||||
case FIRST_FOUND: // 首次发现该元素
|
case FIRST_FOUND: // 首次发现该元素
|
||||||
firstDetected = firstDetected(betaOrGamma, datasource, nuclideNames);
|
firstDetected = firstDetected(betaOrGamma, datasource, stationId, sampleId, nuclideNames);
|
||||||
break;
|
break;
|
||||||
case ABOVE_AVERAGE: // 元素浓度高于均值
|
case ABOVE_AVERAGE: // 元素浓度高于均值
|
||||||
moreThanAvg = moreThanAvg(datasource, stationId, collDate, nuclidesCross);
|
moreThanAvg = moreThanAvg(datasource, stationId, collDate, nuclidesCross);
|
||||||
break;
|
break;
|
||||||
case MEANWHILE: // 同时出现两种及以上核素
|
case MEANWHILE: // 同时出现两种及以上核素
|
||||||
if (CollUtil.isNotEmpty(nuclideNames) && nuclideNames.size() >= 2)
|
meanWhile = meanWhile(betaOrGamma, datasource, sampleId, nuclideNames);
|
||||||
meanwhile.addAll(nuclideNames);
|
if (meanWhile.size() < 2) meanWhile = ListUtil.empty();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -192,10 +188,13 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
|
||||||
.collect(Collectors.joining(StrUtil.COMMA + StrUtil.SPACE));
|
.collect(Collectors.joining(StrUtil.COMMA + StrUtil.SPACE));
|
||||||
dataTool.put("moreThanAvg", above);
|
dataTool.put("moreThanAvg", above);
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(meanwhile))
|
if (CollUtil.isNotEmpty(meanWhile))
|
||||||
dataTool.put("meanwhile", CollUtil.join(meanwhile, StrUtil.COMMA + StrUtil.SPACE));
|
dataTool.put("meanwhile", CollUtil.join(meanWhile, StrUtil.COMMA + StrUtil.SPACE));
|
||||||
// 如果报警数据为空 则不需要发送报警信息和生成报警日志
|
// 如果报警数据为空 则不需要发送报警信息和生成报警日志
|
||||||
if (MapUtil.isEmpty(dataTool.get())) return;
|
if (MapUtil.isEmpty(dataTool.get())) return;
|
||||||
|
// 产生报警信息的Sample信息
|
||||||
|
dataTool.put("sampleId", sampleId).put("sampleName", sampleName);
|
||||||
|
// 构建预警信息实例 准备发送预警信息
|
||||||
MessageDTO messageDTO = TemplateUtil.parse1(ANALYSIS_NUCLIDE.getCode(), dataTool.get());
|
MessageDTO messageDTO = TemplateUtil.parse1(ANALYSIS_NUCLIDE.getCode(), dataTool.get());
|
||||||
// 保存报警日志
|
// 保存报警日志
|
||||||
AlarmAnalysisLog logInfo = new AlarmAnalysisLog();
|
AlarmAnalysisLog logInfo = new AlarmAnalysisLog();
|
||||||
|
@ -216,13 +215,14 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
|
||||||
/**
|
/**
|
||||||
* 首次发现该核素
|
* 首次发现该核素
|
||||||
*/
|
*/
|
||||||
private List<String> firstDetected(String betaOrGamma,
|
private List<String> firstDetected(String betaOrGamma, String dataSourceType,
|
||||||
String dataSourceType,
|
String stationId, String sampleId, Set<String> nuclideNames){
|
||||||
Set<String> nuclideNames){
|
/* 查询用户关注的核素是否存在 如果不存在则为首次发现该核素
|
||||||
List<String> existNames = analysisResultService
|
判断核素是否存在的条件: 该核素的Conc值是否大于MDC值
|
||||||
.nuclideNames(betaOrGamma, dataSourceType, nuclideNames);
|
*/
|
||||||
// 两个集合元素相减
|
String detectorId = systemClient.getDetectorId(sampleId);
|
||||||
return CollUtil.subtractToList(nuclideNames, existNames);
|
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 nuclideName = nuclide.getKey();
|
||||||
String concValue = nuclide.getValue();// 浓度值
|
String concValue = nuclide.getValue();// 浓度值
|
||||||
String avgValue = nuclideAvgs.get(nuclideName);// 浓度均值
|
String avgValue = nuclideAvgs.get(nuclideName);// 浓度均值
|
||||||
if (StrUtil.isBlank(concValue) || StrUtil.isBlank(avgValue))
|
|
||||||
continue;
|
|
||||||
if (!NumberUtil.isNumber(concValue) || !NumberUtil.isNumber(avgValue))
|
if (!NumberUtil.isNumber(concValue) || !NumberUtil.isNumber(avgValue))
|
||||||
continue;
|
continue;
|
||||||
BigDecimal conc = new BigDecimal(concValue);
|
BigDecimal conc = new BigDecimal(concValue);
|
||||||
|
@ -260,6 +258,17 @@ public class AnalysisConsumer implements StreamListener<String, ObjectRecord<Str
|
||||||
return nuclideInfos;
|
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() {
|
private void init() {
|
||||||
// start 生成临时Token到线程中
|
// start 生成临时Token到线程中
|
||||||
UserTokenContext.setToken(getTempToken());
|
UserTokenContext.setToken(getTempToken());
|
||||||
|
|
|
@ -5,7 +5,10 @@ import java.util.Set;
|
||||||
|
|
||||||
public interface AnalysisResultService {
|
public interface AnalysisResultService {
|
||||||
|
|
||||||
List<String> nuclideNames(String betaOrGamma,
|
List<String> nuclideExist(String betaOrGamma, String dataSourceType,
|
||||||
String dataSourceType,
|
String sampleId, Set<String> nuclideNames);
|
||||||
Set<String> nuclideNames);
|
|
||||||
|
List<String> nuclideFirst(String betaOrGamma, String dataSourceType,
|
||||||
|
String stationId, String detectorId,
|
||||||
|
String sampleId, Set<String> nuclideNames);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ package org.jeecg.modules.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import org.jeecg.modules.base.dto.ConcDto;
|
import org.jeecg.modules.base.dto.ConcDto;
|
||||||
import org.jeecg.modules.base.dto.ConcDtoXe;
|
|
||||||
import org.jeecg.modules.base.entity.rnauto.GardsNuclIded;
|
import org.jeecg.modules.base.entity.rnauto.GardsNuclIded;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -13,5 +12,8 @@ public interface IGardsNuclIdedAutoService 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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,10 @@ import java.util.Set;
|
||||||
|
|
||||||
public interface IGardsNuclIdedManService extends IService<GardsNuclIded> {
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package org.jeecg.modules.service;
|
package org.jeecg.modules.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
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.dto.ConcDtoXe;
|
||||||
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
|
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<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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package org.jeecg.modules.service;
|
package org.jeecg.modules.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
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.dto.ConcDtoXe;
|
||||||
import org.jeecg.modules.base.entity.rnman.GardsXeResults;
|
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<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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,5 +18,5 @@ public interface ISysEmailLogService extends IService<SysEmailLog> {
|
||||||
|
|
||||||
Result<?> analysis(String emailId, String startDate, String endDate);
|
Result<?> analysis(String emailId, String startDate, String endDate);
|
||||||
|
|
||||||
Boolean hoursAgo(String emailId, String hoursAgo);
|
Integer getMinus(String emailId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.jeecg.modules.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.ListUtil;
|
import cn.hutool.core.collection.ListUtil;
|
||||||
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.constant.CommonConstant;
|
||||||
|
import org.jeecg.modules.feignclient.SystemClient;
|
||||||
import org.jeecg.modules.service.*;
|
import org.jeecg.modules.service.*;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
@ -26,25 +27,51 @@ public class AnalysisResultServiceImpl implements AnalysisResultService {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@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.ARMDARR.equals(dataSourceType)){
|
||||||
if (CommonConstant.BETA.equals(betaOrGamma)){
|
if (CommonConstant.BETA.equals(betaOrGamma)){
|
||||||
return xeResultsAutoService.nuclideNames(nuclideNames);
|
return xeResultsAutoService.nuclideExist(sampleId, nuclideNames);
|
||||||
}else if (CommonConstant.GAMMA.equals(betaOrGamma)){
|
}else if (CommonConstant.GAMMA.equals(betaOrGamma)){
|
||||||
return nuclIdedAutoService.nuclideNames(nuclideNames);
|
return nuclIdedAutoService.nuclideExist(sampleId, nuclideNames);
|
||||||
}else {
|
}else {
|
||||||
return ListUtil.toList(nuclideNames);
|
return ListUtil.empty();
|
||||||
}
|
}
|
||||||
} else if (CommonConstant.ARMDRRR.equals(dataSourceType)) {
|
} else if (CommonConstant.ARMDRRR.equals(dataSourceType)) {
|
||||||
if (CommonConstant.BETA.equals(betaOrGamma)){
|
if (CommonConstant.BETA.equals(betaOrGamma)){
|
||||||
return xeResultsManService.nuclideNames(nuclideNames);
|
return xeResultsManService.nuclideExist(sampleId, nuclideNames);
|
||||||
}else if (CommonConstant.GAMMA.equals(betaOrGamma)){
|
}else if (CommonConstant.GAMMA.equals(betaOrGamma)){
|
||||||
return nuclIdedManService.nuclideNames(nuclideNames);
|
return nuclIdedManService.nuclideExist(sampleId, nuclideNames);
|
||||||
}else {
|
}else {
|
||||||
return ListUtil.toList(nuclideNames);
|
return ListUtil.empty();
|
||||||
}
|
}
|
||||||
}else {
|
}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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
package org.jeecg.modules.service.impl;
|
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.dynamic.datasource.annotation.DS;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import org.jeecg.common.constant.DateConstant;
|
import org.jeecg.common.constant.DateConstant;
|
||||||
import org.jeecg.modules.base.dto.ConcDto;
|
import org.jeecg.modules.base.dto.ConcDto;
|
||||||
import org.jeecg.modules.base.dto.ConcDtoXe;
|
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.GardsNuclIded;
|
||||||
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
|
import org.jeecg.modules.base.entity.rnauto.GardsXeResults;
|
||||||
import org.jeecg.modules.mapper.GardsNuclIdedAutoMapper;
|
import org.jeecg.modules.mapper.GardsNuclIdedAutoMapper;
|
||||||
|
@ -13,6 +18,7 @@ import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -30,7 +36,34 @@ public class GardsNuclIdedAutoServiceImpl extends ServiceImpl<GardsNuclIdedAutoM
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> nuclideNames(Set<String> nuclideNames) {
|
public List<String> nuclideExist(String sampleId, Set<String> nuclideNames) {
|
||||||
return baseMapper.nuclideNames(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,21 @@
|
||||||
package org.jeecg.modules.service.impl;
|
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.dynamic.datasource.annotation.DS;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.jeecg.common.constant.DateConstant;
|
import org.jeecg.common.constant.DateConstant;
|
||||||
import org.jeecg.modules.base.dto.ConcDto;
|
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.base.entity.rnman.GardsNuclIded;
|
||||||
import org.jeecg.modules.mapper.GardsNuclIdedManMapper;
|
import org.jeecg.modules.mapper.GardsNuclIdedManMapper;
|
||||||
import org.jeecg.modules.service.IGardsNuclIdedManService;
|
import org.jeecg.modules.service.IGardsNuclIdedManService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -28,7 +33,34 @@ public class GardsNuclIdedManServiceImpl extends ServiceImpl<GardsNuclIdedManMap
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> nuclideNames(Set<String> nuclideNames) {
|
public List<String> nuclideExist(String sampleId, Set<String> nuclideNames) {
|
||||||
return baseMapper.nuclideNames(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,12 +2,14 @@ package org.jeecg.modules.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.ListUtil;
|
import cn.hutool.core.collection.ListUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.dynamic.datasource.annotation.DS;
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import org.jeecg.common.constant.DateConstant;
|
import org.jeecg.common.constant.DateConstant;
|
||||||
import org.jeecg.modules.base.dto.ConcDto;
|
import org.jeecg.modules.base.dto.ConcDto;
|
||||||
import org.jeecg.modules.base.dto.ConcDtoXe;
|
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.base.entity.rnauto.GardsXeResults;
|
||||||
import org.jeecg.modules.mapper.GardsXeResultsAutoMapper;
|
import org.jeecg.modules.mapper.GardsXeResultsAutoMapper;
|
||||||
import org.jeecg.modules.service.IGardsXeResultsAutoService;
|
import org.jeecg.modules.service.IGardsXeResultsAutoService;
|
||||||
|
@ -51,7 +53,33 @@ public class GardsXeResultsAutoServiceImpl extends ServiceImpl<GardsXeResultsAut
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> nuclideNames(Set<String> nuclideNames) {
|
public List<String> nuclideExist(String sampleId, Set<String> nuclideNames) {
|
||||||
return baseMapper.nuclideNames(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.jeecg.modules.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.collection.ListUtil;
|
import cn.hutool.core.collection.ListUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.dynamic.datasource.annotation.DS;
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.common.constant.DateConstant;
|
||||||
import org.jeecg.modules.base.dto.ConcDto;
|
import org.jeecg.modules.base.dto.ConcDto;
|
||||||
import org.jeecg.modules.base.dto.ConcDtoXe;
|
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.base.entity.rnman.GardsXeResults;
|
||||||
import org.jeecg.modules.mapper.GardsXeResultsManMapper;
|
import org.jeecg.modules.mapper.GardsXeResultsManMapper;
|
||||||
import org.jeecg.modules.service.IGardsXeResultsManService;
|
import org.jeecg.modules.service.IGardsXeResultsManService;
|
||||||
|
@ -51,7 +53,33 @@ public class GardsXeResultsManServiceImpl extends ServiceImpl<GardsXeResultsManM
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> nuclideNames(Set<String> nuclideNames) {
|
public List<String> nuclideExist(String sampleId, Set<String> nuclideNames) {
|
||||||
return baseMapper.nuclideNames(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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
package org.jeecg.modules.service.impl;
|
package org.jeecg.modules.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
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.map.MapUtil;
|
||||||
import cn.hutool.core.util.ArrayUtil;
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
@ -229,10 +232,18 @@ public class SysEmailLogServiceImpl extends ServiceImpl<SysEmailLogMapper, SysEm
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean hoursAgo(String emailId, String hoursAgo) {
|
public Integer getMinus(String emailId) {
|
||||||
LambdaQueryWrapper<SysEmailLog> wrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysEmailLog> wrapper = new LambdaQueryWrapper<>();
|
||||||
wrapper.eq(SysEmailLog::getEmailId, emailId);
|
wrapper.eq(SysEmailLog::getEmailId, emailId);
|
||||||
wrapper.gt(SysEmailLog::getCreateTime, hoursAgo);
|
wrapper.orderByDesc(SysEmailLog::getCreateTime);
|
||||||
return CollUtil.isEmpty(this.list(wrapper));
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -233,9 +233,15 @@ public class AutoProcessManager{
|
||||||
if(databaseEmail.getEnabled().equals(SysMailEnableType.ENABLE.getMailEnableType())){
|
if(databaseEmail.getEnabled().equals(SysMailEnableType.ENABLE.getMailEnableType())){
|
||||||
final boolean testFlag = testConnectEmailServer(databaseEmail);
|
final boolean testFlag = testConnectEmailServer(databaseEmail);
|
||||||
if(testFlag){
|
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);
|
emailMap.put(databaseEmail.getId(),databaseEmail);
|
||||||
log.info("{}邮箱加入监测队列,设置新增标记",databaseEmail.getUsername());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -279,6 +285,7 @@ public class AutoProcessManager{
|
||||||
if(next.getValue().getState() == State.TERMINATED){
|
if(next.getValue().getState() == State.TERMINATED){
|
||||||
log.info("{}邮箱执行线程已停止,emailExecThreadMap删除此邮箱数据",next.getValue().getEmailProperties().getUsername());
|
log.info("{}邮箱执行线程已停止,emailExecThreadMap删除此邮箱数据",next.getValue().getEmailProperties().getUsername());
|
||||||
checkStopThreads.remove();
|
checkStopThreads.remove();
|
||||||
|
emailMap.remove(next.getKey());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,10 +17,7 @@ import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
|
||||||
import javax.mail.Message;
|
import javax.mail.Message;
|
||||||
import javax.mail.MessagingException;
|
import javax.mail.MessagingException;
|
||||||
import javax.mail.internet.MimeMessage;
|
import javax.mail.internet.MimeMessage;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -79,11 +76,17 @@ public class EmailParsingActuator extends Thread{
|
||||||
try {
|
try {
|
||||||
Message[] messages = emailServiceManager.receiveMail();
|
Message[] messages = emailServiceManager.receiveMail();
|
||||||
if(ArrayUtils.isNotEmpty(messages)){
|
if(ArrayUtils.isNotEmpty(messages)){
|
||||||
log.info("EmailParsingActuator本次获取邮件数量为:{}",messages.length);
|
log.info("EmailParsingActuator本次{}获取邮件数量为:{}", Thread.currentThread().getName(), messages.length);
|
||||||
//检验获取的邮件是否在之前删除失败列表中,若在直接调用邮件API删除,并且此次数组里元素也删除
|
//检验获取的邮件是否在之前删除失败列表中,若在直接调用邮件API删除,并且此次数组里元素也删除
|
||||||
for(int i=messages.length-1;i>=0;i--){
|
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()){
|
if (!messages[i].isExpunged()){
|
||||||
String messageId = ((MimeMessage) messages[i]).getMessageID();
|
String messageId = ((MimeMessage) messages[i]).getMessageID();
|
||||||
|
System.out.println("正常获取到的Message ID是:"+messageId);
|
||||||
final boolean exist = emailServiceManager.check(messages[i],messageId);
|
final boolean exist = emailServiceManager.check(messages[i],messageId);
|
||||||
messageIds.add(messageId);
|
messageIds.add(messageId);
|
||||||
if(exist){
|
if(exist){
|
||||||
|
@ -105,10 +108,13 @@ public class EmailParsingActuator extends Thread{
|
||||||
taskLatch.await();
|
taskLatch.await();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}catch (InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (MessagingException e) {
|
} catch (MessagingException e) {
|
||||||
|
System.out.println("捕获MessagingException!!!!!!!!");
|
||||||
|
closeResource();
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
|
} catch (Exception e) {
|
||||||
|
closeResource();
|
||||||
|
log.error(""+e);
|
||||||
} finally {
|
} finally {
|
||||||
//清除本批次邮件日志缓存
|
//清除本批次邮件日志缓存
|
||||||
EmailLogManager.getInstance().clear();
|
EmailLogManager.getInstance().clear();
|
||||||
|
|
|
@ -97,9 +97,6 @@ public class SpectrumParsingActuator implements Runnable{
|
||||||
String emlName = subject+ StringConstant.UNDER_LINE+ receiveDate;
|
String emlName = subject+ StringConstant.UNDER_LINE+ receiveDate;
|
||||||
String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId;
|
String key = RedisConstant.EMAIL_MSG_ID+StringConstant.COLON+messageId;
|
||||||
// spectrumServiceQuotes.getRedisUtil().set(key,emlName,expiryTime);
|
// spectrumServiceQuotes.getRedisUtil().set(key,emlName,expiryTime);
|
||||||
//判断当前key的下载次数是否超过限制次数
|
|
||||||
spectrumServiceQuotes.getRedisUtil().incr(key, 1L);
|
|
||||||
spectrumServiceQuotes.getRedisUtil().expire(key, expiryTime);
|
|
||||||
//线程开始初始化时,初始本线程负责的能谱日志事件
|
//线程开始初始化时,初始本线程负责的能谱日志事件
|
||||||
SpectrumLogManager.mailSpectrumLogManager.offer(Thread.currentThread().getId(),null);
|
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);
|
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);
|
emailServiceManager.removeMail(message,batchesCounter);
|
||||||
}else {
|
} else {
|
||||||
|
//判断当前key的下载次数是否超过限制次数
|
||||||
|
spectrumServiceQuotes.getRedisUtil().incr(key, 1L);
|
||||||
|
spectrumServiceQuotes.getRedisUtil().expire(key, expiryTime);
|
||||||
// 如果邮件内容校验失败(邮件内容不完整) 将错误邮件从eml移动到emlError
|
// 如果邮件内容校验失败(邮件内容不完整) 将错误邮件从eml移动到emlError
|
||||||
if (Objects.nonNull(emlFile) && emlFile.exists()){
|
if (Objects.nonNull(emlFile) && emlFile.exists()){
|
||||||
moveEmail(emlFile, key);
|
moveEmail(emlFile, key);
|
||||||
|
|
|
@ -45,7 +45,6 @@ public interface AbnormalAlarmClient {
|
||||||
String getServerName(@RequestParam String id);
|
String getServerName(@RequestParam String id);
|
||||||
|
|
||||||
/* SysEmailLogController下相关接口 */
|
/* SysEmailLogController下相关接口 */
|
||||||
@GetMapping("/sysEmailLog/hoursAgo")
|
@GetMapping("/sysEmailLog/getMinus")
|
||||||
Boolean hoursAgo(@RequestParam String emailId,
|
Integer getMinus(@RequestParam String emailId);
|
||||||
@RequestParam String hoursAgo);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,16 +1,12 @@
|
||||||
package org.jeecg.modules.quartz.jobs;
|
package org.jeecg.modules.quartz.jobs;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.date.DateUtil;
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import lombok.Data;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jeecg.common.api.dto.message.MessageDTO;
|
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.constant.RedisConstant;
|
||||||
import org.jeecg.common.util.DataTool;
|
import org.jeecg.common.util.DataTool;
|
||||||
import org.jeecg.common.util.NumUtil;
|
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.entity.postgre.AlarmRule;
|
||||||
import org.jeecg.modules.base.enums.Item;
|
import org.jeecg.modules.base.enums.Item;
|
||||||
import org.jeecg.modules.quartz.entity.Monitor;
|
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.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
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.SourceType.EMAIL;
|
||||||
import static org.jeecg.modules.base.enums.Template.MONITOR_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
|
@Component
|
||||||
public class EmailJob extends Monitor{
|
public class EmailJob extends Monitor{
|
||||||
|
|
||||||
@Value("${task.undealHours:2}")
|
|
||||||
private Integer undealHours; // 邮箱邮件未处理时长 单位: h 默认: 2h
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析Email预警规则
|
* 解析Email预警规则
|
||||||
**/
|
**/
|
||||||
|
@ -82,8 +70,8 @@ public class EmailJob extends Monitor{
|
||||||
case EMAIL_CONN: // 监控项id 1: 测试邮箱服务是否可以连接成功
|
case EMAIL_CONN: // 监控项id 1: 测试邮箱服务是否可以连接成功
|
||||||
current = connectionStatus(sourceId);
|
current = connectionStatus(sourceId);
|
||||||
break;
|
break;
|
||||||
case EMAIL_PROCESS: // 监控项id 3: 邮箱邮件是否被自动处理程序处理
|
case EMAIL_UNPROCESSED: // 监控项id 3: 邮箱邮件是否被自动处理程序处理
|
||||||
current = process(sourceId);
|
current = unProcess(sourceId);
|
||||||
break;
|
break;
|
||||||
// 追加的监控项...
|
// 追加的监控项...
|
||||||
default:
|
default:
|
||||||
|
@ -141,16 +129,9 @@ public class EmailJob extends Monitor{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 监控项id: 3 邮箱邮件在一定时间内是否被处理 (预警值: 0 非0值则不需要报警)
|
* 监控项id: 3 邮箱邮件在一定时间内是否被自动处理程序处理
|
||||||
* */
|
* */
|
||||||
private Integer process(String emailId){
|
private Integer unProcess(String emailId){
|
||||||
int res = 1;
|
return getAlarmClient().getMinus(emailId);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ import java.util.Map;
|
||||||
public class GardsSampleDataController {
|
public class GardsSampleDataController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private IGardsSampleDataService gardsSampleDataService;
|
private IGardsSampleDataService sampleDataService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ public class GardsSampleDataController {
|
||||||
public Result<IPage<GardsSampleDataSystem>> findPage(QueryRequest queryRequest,
|
public Result<IPage<GardsSampleDataSystem>> findPage(QueryRequest queryRequest,
|
||||||
GardsSampleDataSystem gardsSampleData,
|
GardsSampleDataSystem gardsSampleData,
|
||||||
boolean collectStopCheck, boolean acqDotStartCheck){
|
boolean collectStopCheck, boolean acqDotStartCheck){
|
||||||
return gardsSampleDataService.findPage(queryRequest, gardsSampleData, collectStopCheck, acqDotStartCheck);
|
return sampleDataService.findPage(queryRequest, gardsSampleData, collectStopCheck, acqDotStartCheck);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("findStations")
|
@GetMapping("findStations")
|
||||||
|
@ -49,7 +49,11 @@ public class GardsSampleDataController {
|
||||||
@ApiOperation(value = "删除DATA_BASE数据", notes = "删除DATA_BASE数据")
|
@ApiOperation(value = "删除DATA_BASE数据", notes = "删除DATA_BASE数据")
|
||||||
public Result<?> deleteById(@RequestParam Integer sampleId, boolean sampleData,
|
public Result<?> deleteById(@RequestParam Integer sampleId, boolean sampleData,
|
||||||
boolean rnAuto, boolean rnMan){
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,4 +31,6 @@ public interface IGardsSampleDataService extends IService<GardsSampleDataSystem>
|
||||||
GardsSampleDataSystem getOne(Integer sampleId);
|
GardsSampleDataSystem getOne(Integer sampleId);
|
||||||
|
|
||||||
void delTables(List<String> tableNames, Integer sampleId);
|
void delTables(List<String> tableNames, Integer sampleId);
|
||||||
|
|
||||||
|
String getDetectorId(String sampleId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
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.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
|
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.common.util.RedisUtil;
|
||||||
import org.jeecg.modules.base.dto.AnalysesDto;
|
import org.jeecg.modules.base.dto.AnalysesDto;
|
||||||
import org.jeecg.modules.base.dto.OwnerDto;
|
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.base.entity.rnauto.GardsAnalyses;
|
||||||
import org.jeecg.modules.system.entity.GardsSampleDataSystem;
|
import org.jeecg.modules.system.entity.GardsSampleDataSystem;
|
||||||
import org.jeecg.modules.system.mapper.GardsSampleDataMapper;
|
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){
|
private String samplePath(String savePath, Integer sampleId){
|
||||||
GardsSampleDataSystem sampleData = getOne(sampleId);
|
GardsSampleDataSystem sampleData = getOne(sampleId);
|
||||||
String inputFileName = sampleData.getInputFileName();
|
String inputFileName = sampleData.getInputFileName();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user