Merge remote-tracking branch 'origin/station' into station

This commit is contained in:
nieziyan 2023-08-28 16:09:36 +08:00
commit ebf03f6949
29 changed files with 804 additions and 105 deletions

View File

@ -1,12 +1,13 @@
package org.jeecg.modules.base.entity.original;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
@ -21,7 +22,7 @@ public class GardsAlertData implements Serializable {
@TableField(value = "STATION_CODE")
private String stationCode;
@TableField(value = "ALERT_ID")
@TableId(value = "ALERT_ID",type = IdType.AUTO)
private Integer alertId;
@TableField(value = "TIME")

View File

@ -1,6 +1,8 @@
package org.jeecg.modules.base.entity.original;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@ -29,7 +31,7 @@ public class GardsMetData implements Serializable {
/**
* 气象数据id
*/
@TableField(value = "MET_ID")
@TableId(value = "MET_ID",type = IdType.AUTO)
private Integer metId;
/**

View File

@ -1,12 +1,13 @@
package org.jeecg.modules.base.entity.original;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
@ -30,7 +31,7 @@ public class GardsSohData implements Serializable {
/**
* 报警ID号
*/
@TableField(value = "SOH_ID")
@TableId(value = "SOH_ID",type = IdType.AUTO)
@Excel(name = "SID",orderNum = "5")
private Integer sohId;

View File

@ -2,8 +2,6 @@ package org.jeecg.modules;
import org.apache.commons.lang3.ArrayUtils;
import org.jeecg.common.email.EmailServiceManager;
import org.jeecg.common.properties.SpectrumPathProperties;
import org.jeecg.common.util.FTPUtil;
import org.jeecg.common.properties.TaskProperties;
import org.jeecg.modules.email.EmailProperties;
import org.jeecg.modules.spectrum.EmailCounter;
@ -30,6 +28,7 @@ public class EmailParsingActuator extends Thread{
this.spectrumServiceQuotes = spectrumServiceQuotes;
this.taskProperties = spectrumServiceQuotes.getTaskProperties();
this.emailCounter = emailCounter;
//获取机器可用核心数
int systemCores = Runtime.getRuntime().availableProcessors();
int maximumPoolSize = taskProperties.getReceiveNum() > systemCores?taskProperties.getReceiveNum():systemCores;

View File

@ -0,0 +1,15 @@
package org.jeecg.modules.datasource;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.ora")
public class OraDataSourceProperties {
private String url;
private String username;
}

View File

@ -0,0 +1,25 @@
package org.jeecg.modules.ftp;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "ftp")
public class FTPProperties {
private String host;
private Integer port;
private String userName;
private String password;
private String encoding;
private String ftpRootPath;
}

View File

@ -0,0 +1,246 @@
package org.jeecg.modules.ftp;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
@Slf4j
public class FTPUtils {
private String encoding;
private String ftpRootPath;
private FTPClient client;
public FTPUtils(String host, Integer port, String userName, String password, String encoding,String ftpRootPath){
this.encoding = encoding;
this.ftpRootPath = ftpRootPath;
try{
//声明FTP客户端
client = new FTPClient();
//连接
client.connect(host, port);
//登录
client.login(userName, password);
// 切换为本地被动模式可以解决FTP上传后文件为空的问题但需要服务器将FTP服务添加至防火墙白名单
client.enterLocalPassiveMode();
//判断是否连接成功
int reply = client.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
client.disconnect();
}
}catch (IOException e){
log.error("FTP服务连接失败原因{}",e.getMessage());
e.printStackTrace();
}
}
/**
* 下载ftp服务文件
* @param localPath
* @param fileName
* @param response
*/
public void downloadFTPFile(String localPath, String fileName, HttpServletResponse response) {
InputStream in = null;
ServletOutputStream out = null;
//传输模式
try {
List<String> paths = Arrays.asList(localPath.split("/"));
if (CollectionUtils.isNotEmpty(paths)){
for (String workPath:paths) {
//切换工作文件路径
client.changeWorkingDirectory(workPath);
}
}
client.enterLocalPassiveMode();
client.setFileType(FTPClient.BINARY_FILE_TYPE);
// 设置编码当文件中存在中文且上传后文件乱码时可使用此配置项
client.setControlEncoding(encoding);
client.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE);
List<FTPFile> ftpFiles = Arrays.asList(client.listFiles());
if (CollectionUtils.isNotEmpty(ftpFiles)){
for (FTPFile ftpFile:ftpFiles) {
if (ftpFile.getName().equals(fileName)){
in = client.retrieveFileStream(new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
}
}
}
//重置响应信息
response.reset();
//设置响应类型
response.setContentType("application/download");
//解决中文不能生成文件
response.setHeader("Content-Disposition", "attachment; fileName=" + URLEncoder.encode(fileName,"UTF-8"));
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
//获取输出流
out = response.getOutputStream();
//声明一个长度参数
int len;
//声明字节数组
byte[] bytes = new byte[1024];
//判断如果输入流的字节长度不等于-1进行字节数组内容的读取
while ((len = in.read(bytes)) != -1) {
out.write(bytes, 0, len);
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
out.flush();
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
/**
* 检查目录是否存在不存在则创建支持递归创建
* @param path 目录路径
* @return 返回值true/false
* @throws IOException
*/
private boolean checkDirectory(String path){
try{
final boolean changeFlag = client.changeWorkingDirectory(ftpRootPath);
if(!changeFlag){
log.error("{},根目录切换失败",ftpRootPath);
return false;
}
String[] directories = path.split("/");
for(String directory : directories){
if(StringUtils.isEmpty(directory)){
continue;
}
if(!client.changeWorkingDirectory(directory)){
if(!client.makeDirectory(directory)){
log.error("{},目录创建失败",directory);
return false;
}
if(!client.changeWorkingDirectory(directory)){
log.error("{},目录切换失败",directory);
return false;
}
}
}
return true;
}catch (IOException e){
log.error("检查目录失败,原因:{}",e.getMessage());
e.printStackTrace();
}
return true;
}
/**
* 写入文件若文件或文件目录不存在则自行创建
* @param filePath 文件路径
* @param fileName 文件名称
* @param inputStream 文件输入流
* @return 返回值true/false
*/
public boolean saveFile(String filePath,String fileName,InputStream inputStream){
try{
final boolean flag = this.checkDirectory(filePath);
if(flag){
client.setFileType(FTP.BINARY_FILE_TYPE);
String encodedName = new String(fileName.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1);
return client.storeFile(encodedName, inputStream);
}
}catch (IOException e){
log.error("{}文件创建失败,原因为:{}",filePath+"/"+fileName,e.getMessage());
e.printStackTrace();
return false;
}finally {
if(null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return false;
}
/**
* 删除文件
* @param filePath 文件路径
* @param fileName 文件名称
* @return 返回值true/false
*/
public boolean removeFile(String filePath,String fileName){
try {
final String rootPath = client.printWorkingDirectory();
final boolean changeFlag = client.changeWorkingDirectory(rootPath);
if(!changeFlag){
log.error("{},根目录切换失败",rootPath);
return false;
}
String[] directories = filePath.split("/");
for(String directory : directories){
if(StringUtils.isEmpty(directory)){
continue;
}
if(!client.changeWorkingDirectory(directory)){
log.error("此文件目录不存在:{}",filePath);
return false;
}
}
boolean result = client.deleteFile(new String(fileName.getBytes(StandardCharsets.UTF_8),StandardCharsets.ISO_8859_1));
if(!result){
log.error("此文件不存在:{}",filePath+"/"+fileName);
}
return result;
} catch (IOException e) {
log.error("{}文件删除失败,原因为:{}",filePath,e.getMessage());
e.printStackTrace();
return false;
}
}
/**
* 获取FTP服务根目录绝对路径
* @return
*/
public String getRootPath(){
try {
final String rootPath = client.printWorkingDirectory();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 关闭ftp客户端连接
* @throws IOException
*/
public void close(){
try{
if (client != null){
client.disconnect();
}
}catch (IOException e){
e.printStackTrace();
}
}
}

View File

@ -1,6 +1,7 @@
package org.jeecg.modules.native_jni.struct;
import java.util.List;
import java.util.Objects;
/**
* 能谱结构体字段信息
@ -550,10 +551,4 @@ public class EnergySpectrumStruct {
", t_record_count=" + t_record_count +
'}';
}
public static void main(String[] args) {
EnergySpectrumStruct s = new EnergySpectrumStruct();
System.out.println(s);
System.out.println(s.gas_bk_measurement_id);
}
}

View File

@ -14,5 +14,5 @@ public interface IAlertSpectrumService extends IService<GardsAlertData> {
* @param struct
* @param fileName
*/
public void create(AlertSpectrumStruct struct,String fileName) throws Exception;
public GardsAlertData create(AlertSpectrumStruct struct,String fileName) throws Exception;
}

View File

@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.base.entity.original.GardsMetData;
import org.jeecg.modules.native_jni.struct.MetSpectrumStruct;
import java.util.List;
/**
* 处理气象谱
*/
@ -13,7 +15,8 @@ public interface IMetSpectrumService extends IService<GardsMetData> {
* 保存气象谱数据
* @param struct
* @param fileName
* @return
* @throws Exception
*/
public void create(MetSpectrumStruct struct,String fileName) throws Exception;
public List<GardsMetData> create(MetSpectrumStruct struct, String fileName) throws Exception;
}

View File

@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.base.entity.original.GardsSohData;
import org.jeecg.modules.native_jni.struct.SOHSpectrumStruct;
import java.util.List;
/**
* 健康谱数据处理
*/
@ -13,7 +15,8 @@ public interface ISOHSpectrumService extends IService<GardsSohData> {
* 保存健康谱数据
* @param struct
* @param fileName
* @return
* @throws Exception
*/
public void create(SOHSpectrumStruct struct,String fileName) throws Exception;
public List<GardsSohData> create(SOHSpectrumStruct struct, String fileName) throws Exception;
}

View File

@ -33,7 +33,7 @@ public class AlertSpectrumServiceImpl extends ServiceImpl<GardsAlertDataMapper,
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void create(AlertSpectrumStruct struct, String fileName) throws Exception{
public GardsAlertData create(AlertSpectrumStruct struct, String fileName) throws Exception{
Assert.notNull(struct.station_code,"此次解析结构体中的台站“台站代码”为空");
LambdaQueryWrapper<GardsStations> gardsStationsQuery = new LambdaQueryWrapper<>();
@ -50,5 +50,6 @@ public class AlertSpectrumServiceImpl extends ServiceImpl<GardsAlertDataMapper,
alertData.setAlertText(struct.desc);
alertData.setInputFileName(fileName);
this.save(alertData);
return alertData;
}
}

View File

@ -34,11 +34,12 @@ public class MetSpectrumServiceImpl extends ServiceImpl<GardsMetDataMapper, Gard
* 保存气象谱数据
* @param struct
* @param fileName
* @return
* @throws Exception
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void create(MetSpectrumStruct struct,String fileName) throws Exception{
public List<GardsMetData> create(MetSpectrumStruct struct,String fileName) throws Exception{
Assert.notNull(struct.station_code,"此次解析结构体中的台站“台站代码”为空");
LambdaQueryWrapper<GardsStations> gardsStationsQuery = new LambdaQueryWrapper<>();
@ -46,9 +47,8 @@ public class MetSpectrumServiceImpl extends ServiceImpl<GardsMetDataMapper, Gard
gardsStationsQuery.eq(GardsStations::getStationCode,struct.station_code);
final GardsStations stations = gardsStationsMapper.selectOne(gardsStationsQuery);
Assert.notNull(stations,"此台站代码:"+struct.station_code+"所属台站不存在");
List<GardsMetData> list = Lists.newArrayList();
if(struct.record_count > 0){
List<GardsMetData> list = Lists.newArrayList();
for(int i=0;i<struct.record_count;i++){
GardsMetData metData = new GardsMetData();
metData.setStationId(stations.getStationId());
@ -66,8 +66,11 @@ public class MetSpectrumServiceImpl extends ServiceImpl<GardsMetDataMapper, Gard
list.add(metData);
}
if(!CollectionUtils.isEmpty(list)){
this.saveBatch(list);
list.forEach(metData->{
this.save(metData);
});
}
}
return list;
}
}

View File

@ -37,11 +37,12 @@ public class SOHSpectrumServiceImpl extends ServiceImpl<GardsSohDataMapper, Gard
* 保存健康谱数据
* @param struct
* @param fileName
* @return
* @throws Exception
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void create(SOHSpectrumStruct struct,String fileName) throws Exception{
public List<GardsSohData> create(SOHSpectrumStruct struct,String fileName) throws Exception{
Assert.notNull(struct.station_code,"此次解析结构体中的台站“台站代码”为空");
Assert.notNull(struct.detector_code,"此次解析结构体中的台站“探测器代码”为空");
@ -72,8 +73,11 @@ public class SOHSpectrumServiceImpl extends ServiceImpl<GardsSohDataMapper, Gard
list.add(sohData);
}
if(!CollectionUtils.isEmpty(list)){
this.saveBatch(list);
list.forEach(sohData->{
this.save(sohData);
});
}
}
return list;
}
}

View File

@ -1,19 +1,24 @@
package org.jeecg.modules.spectrum;
import cn.hutool.core.io.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.properties.SpectrumPathProperties;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.base.entity.original.GardsAlertData;
import org.jeecg.modules.emuns.DataType;
import org.jeecg.modules.native_jni.EnergySpectrumHandler;
import org.jeecg.modules.native_jni.struct.AlertSpectrumStruct;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.util.Date;
import java.util.Objects;
/**
* 警告谱处理
*/
@Slf4j
public class AlertSpectrum extends SpectrumHandler{
/**
@ -21,6 +26,16 @@ public class AlertSpectrum extends SpectrumHandler{
*/
private AlertSpectrumStruct sourceData = null;
private GardsAlertData alertData;
/**
* 开始存库时间
*/
private Date startIntoDatabaseTime = null;
/**
* 结束存库时间
*/
private Date endIntoDatabaseTime = null;
/**
* 设置过滤链路
*/
@ -28,7 +43,7 @@ public class AlertSpectrum extends SpectrumHandler{
protected void setChina() {
SpectrumHandler spectrumHandler = new HealthStatusSpectrum();
spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile,
super.currDataType,super.message,super.emailProperties);
super.currDataType,super.message,super.emailProperties,super.ftpUtil);
spectrumHandler.setPrevious(this);
super.setNext(spectrumHandler);
}
@ -42,9 +57,8 @@ public class AlertSpectrum extends SpectrumHandler{
DataType.ALERT_TEMP.getType().equals(super.currDataType.getType()) ||
DataType.ALERT_SYSTEM.getType().equals(super.currDataType.getType()) ||
DataType.ALERT_UPS.getType().equals(super.currDataType.getType())){
log.info("----------------------------------");
log.info(super.currDataType.getType());
log.info("----------------------------------");
//打印当前处理的能谱类型
super.printCurrDataType();
//解析邮件内容
this.parseingEmail();
//保存PHD文件到ftp
@ -55,6 +69,8 @@ public class AlertSpectrum extends SpectrumHandler{
super.saveEmailLog();
//删除本地临时文件
super.deleteLocalTemporaryFile();
//把流程日志写入ftp日志文件
this.saveLogToFtp();
}else{
super.next.handler();
}
@ -74,6 +90,9 @@ public class AlertSpectrum extends SpectrumHandler{
@Override
protected void parseingEmail() {
final AlertSpectrumStruct sourceData = EnergySpectrumHandler.getAlertSourceData(mailFile.getAbsolutePath());
if(Objects.isNull(sourceData)){
throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath());
}
this.sourceData = sourceData;
}
@ -83,6 +102,20 @@ public class AlertSpectrum extends SpectrumHandler{
@Override
protected void saveFileToFtp() throws Exception {
this.updateSpectrumFileName();
//获取文件保存路径
String fileSavePath = this.getFileSavePath();
final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties();
fileSavePath = properties.getRootPath()+"/"+fileSavePath;
super.ftpUtil.saveFile(fileSavePath,this.mailFile.getName(),new FileInputStream(this.mailFile));
//设置FTP文件保存路径
super.ftpSavePath = fileSavePath+"/"+this.mailFile.getName();
}
/**
* 获取文件保存路径
* @return
*/
private String getFileSavePath(){
//处理此文件需要保存到ftp服务的路径
final int year = LocalDate.now().getYear();
final int month = LocalDate.now().getMonth().getValue();
@ -93,10 +126,7 @@ public class AlertSpectrum extends SpectrumHandler{
ftpPath.append(year);
ftpPath.append("/");
ftpPath.append(month>=10?month:"0"+month);
super.spectrumServiceQuotes.getFtpUtil().saveFile(properties.getRootPath()+"/"+ftpPath.toString(),this.mailFile.getName(),new FileInputStream(this.mailFile));
//设置FTP文件保存路径
super.ftpSavePath = ftpPath+"/"+this.mailFile.getName();
// FileUtil.appendString(super.ftpSavePath+System.lineSeparator(),"C:\\Users\\86187\\Desktop\\engine\\sampleId.txt", "UTF-8");
return ftpPath.toString();
}
/**
@ -121,6 +151,27 @@ public class AlertSpectrum extends SpectrumHandler{
*/
@Override
protected void handlerOriginalData() throws Exception {
spectrumServiceQuotes.getAlertSpectrumService().create(this.sourceData,super.ftpSavePath);
this.startIntoDatabaseTime = new Date();
this.alertData = spectrumServiceQuotes.getAlertSpectrumService().create(this.sourceData, super.ftpSavePath);
this.endIntoDatabaseTime = new Date();
}
/**
* 把流程日志写入ftp日志文件
*/
@Override
protected void saveLogToFtp() {
//组装日志文件内容
StringBuilder logContent = new StringBuilder();
logContent.append("-------------------------- Write Data into Database at ").append(DateUtils.formatDate(this.startIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" ---------------------------");
logContent.append("\n\n");
logContent.append("ALERT ID: ").append(this.alertData.getAlertId()).append(" StandardFile:").append(spectrumServiceQuotes.getFtpProperties().getFtpRootPath()).append("/").append(super.ftpSavePath);
logContent.append("\n\n");
logContent.append("------------------- ").append("Write Data into Database Successfully at ").append(DateUtils.formatDate(this.endIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" --------------------");
//保存日志文件到ftp
final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties();
final String ftpPath = properties.getLogPath()+"/"+this.getFileSavePath();
final String fileName = super.mailFile.getName().replace(this.currDataType.getSuffix(),".log");
super.ftpUtil.saveFile(ftpPath,fileName,new ByteArrayInputStream(logContent.toString().getBytes(StandardCharsets.UTF_8)));
}
}

View File

@ -1,12 +1,10 @@
package org.jeecg.modules.spectrum;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.emuns.DataType;
/**
* 探测器本地谱处理
*/
@Slf4j
public class DetbkphdSpectrum extends S_D_Q_G_SpectrumHandler{
/**
@ -16,7 +14,7 @@ public class DetbkphdSpectrum extends S_D_Q_G_SpectrumHandler{
protected void setChina() {
SpectrumHandler spectrumHandler = new QcphdSpectrum();
spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile,
super.currDataType,super.message,super.emailProperties);
super.currDataType,super.message,super.emailProperties,super.ftpUtil);
spectrumHandler.setPrevious(this);
super.setNext(spectrumHandler);
}
@ -27,9 +25,8 @@ public class DetbkphdSpectrum extends S_D_Q_G_SpectrumHandler{
@Override
protected void handler() throws Exception {
if(DataType.DETBKPHD.getType().equals(super.currDataType.getType())){
log.info("----------------------------------");
log.info(super.currDataType.getType());
log.info("----------------------------------");
//打印当前处理的能谱类型
super.printCurrDataType();
//解析邮件内容
super.parseingEmail();
//读取邮件内容标签
@ -42,6 +39,8 @@ public class DetbkphdSpectrum extends S_D_Q_G_SpectrumHandler{
super.saveEmailLog();
//删除本地临时文件
super.deleteLocalTemporaryFile();
//把流程日志写入ftp日志文件
super.saveLogToFtp();
}else{
super.next.handler();
}

View File

@ -17,7 +17,7 @@ public class EmailCounter {
public int getCurrValue(){
synchronized (lock){
final int currValue = emlCounter.getAndIncrement();
if(currValue >= 10){
if(currValue >= 10000){
emlCounter.set(0);
}
return currValue;

View File

@ -16,7 +16,7 @@ public class GasbkphdSpectrum extends S_D_Q_G_SpectrumHandler{
protected void setChina() {
SpectrumHandler spectrumHandler = new MetSpectrum();
spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile,
super.currDataType,super.message,super.emailProperties);
super.currDataType,super.message,super.emailProperties,super.ftpUtil);
spectrumHandler.setPrevious(this);
super.setNext(spectrumHandler);
}
@ -27,9 +27,8 @@ public class GasbkphdSpectrum extends S_D_Q_G_SpectrumHandler{
@Override
protected void handler() throws Exception {
if(DataType.GASBKPHD.getType().equals(super.currDataType.getType())){
log.info("----------------------------------");
log.info(super.currDataType.getType());
log.info("----------------------------------");
//打印当前处理的能谱类型
super.printCurrDataType();
//解析邮件内容
super.parseingEmail();
//读取邮件内容标签
@ -42,6 +41,8 @@ public class GasbkphdSpectrum extends S_D_Q_G_SpectrumHandler{
super.saveEmailLog();
//删除本地临时文件
super.deleteLocalTemporaryFile();
//把流程日志写入ftp日志文件
super.saveLogToFtp();
}else{
super.next.handler();
}

View File

@ -1,25 +1,42 @@
package org.jeecg.modules.spectrum;
import cn.hutool.core.io.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.properties.SpectrumPathProperties;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.base.entity.original.GardsSohData;
import org.jeecg.modules.emuns.DataType;
import org.jeecg.modules.native_jni.EnergySpectrumHandler;
import org.jeecg.modules.native_jni.struct.SOHSpectrumStruct;
import org.springframework.util.CollectionUtils;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* 健康状态谱处理
*/
@Slf4j
public class HealthStatusSpectrum extends SpectrumHandler{
/**
* 解析后的数据
*/
private SOHSpectrumStruct sourceData = null;
/**
* 开始存库时间
*/
private Date startIntoDatabaseTime = null;
/**
* 结束存库时间
*/
private Date endIntoDatabaseTime = null;
private List<GardsSohData> sohDatas;
/**
* 设置过滤链路
@ -35,9 +52,8 @@ public class HealthStatusSpectrum extends SpectrumHandler{
@Override
protected void handler() throws Exception {
if(DataType.SOH.getType().equals(super.currDataType.getType())){
log.info("----------------------------------");
log.info(super.currDataType.getType());
log.info("----------------------------------");
//打印当前处理的能谱类型
super.printCurrDataType();
//解析邮件内容
this.parseingEmail();
//保存PHD文件到ftp
@ -48,6 +64,8 @@ public class HealthStatusSpectrum extends SpectrumHandler{
super.saveEmailLog();
//删除本地临时文件
super.deleteLocalTemporaryFile();
//把流程日志写入ftp日志文件
this.saveLogToFtp();
}
}
@ -65,6 +83,9 @@ public class HealthStatusSpectrum extends SpectrumHandler{
@Override
protected void parseingEmail() {
final SOHSpectrumStruct sourceData = EnergySpectrumHandler.getSOHSourceData(mailFile.getAbsolutePath());
if(Objects.isNull(sourceData)){
throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath());
}
this.sourceData = sourceData;
}
@ -74,6 +95,20 @@ public class HealthStatusSpectrum extends SpectrumHandler{
@Override
protected void saveFileToFtp() throws Exception {
this.updateSpectrumFileName();
//获取文件保存路径
String fileSavePath = this.getFileSavePath();
final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties();
fileSavePath = properties.getRootPath()+"/"+fileSavePath;
super.ftpUtil.saveFile(fileSavePath,this.mailFile.getName(),new FileInputStream(this.mailFile));
//设置FTP文件保存路径
super.ftpSavePath = fileSavePath+"/"+this.mailFile.getName();
}
/**
* 获取文件保存路径
* @return
*/
private String getFileSavePath(){
//处理此文件需要保存到ftp服务的路径
final int year = LocalDate.now().getYear();
final int month = LocalDate.now().getMonth().getValue();
@ -84,10 +119,7 @@ public class HealthStatusSpectrum extends SpectrumHandler{
ftpPath.append(year);
ftpPath.append("/");
ftpPath.append(month>=10?month:"0"+month);
super.spectrumServiceQuotes.getFtpUtil().saveFile(properties.getRootPath()+"/"+ftpPath.toString(),this.mailFile.getName(),new FileInputStream(this.mailFile));
//设置FTP文件保存路径
super.ftpSavePath = ftpPath+"/"+this.mailFile.getName();
// FileUtil.appendString(super.ftpSavePath+System.lineSeparator(),"C:\\Users\\86187\\Desktop\\engine\\sampleId.txt", "UTF-8");
return ftpPath.toString();
}
/**
@ -112,6 +144,32 @@ public class HealthStatusSpectrum extends SpectrumHandler{
*/
@Override
protected void handlerOriginalData() throws Exception {
spectrumServiceQuotes.getSohSpectrumService().create(this.sourceData,super.ftpSavePath);
this.startIntoDatabaseTime = new Date();
this.sohDatas = spectrumServiceQuotes.getSohSpectrumService().create(this.sourceData, super.ftpSavePath);
this.endIntoDatabaseTime = new Date();
}
/**
* 把流程日志写入ftp日志文件
*/
@Override
protected void saveLogToFtp() {
//获取健康谱记录ID范围
String sohIdRange = "";
if(!CollectionUtils.isEmpty(this.sohDatas)){
sohIdRange = this.sohDatas.get(0).getSohId()+"-"+this.sohDatas.get(this.sohDatas.size()-1).getSohId();
}
//组装日志文件内容
StringBuilder logContent = new StringBuilder();
logContent.append("-------------------------- Write Data into Database at ").append(DateUtils.formatDate(this.startIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" ---------------------------");
logContent.append("\n\n");
logContent.append("SOH ID: ").append(sohIdRange).append(" StandardFile:").append(spectrumServiceQuotes.getFtpProperties().getFtpRootPath()).append("/").append(super.ftpSavePath);
logContent.append("\n\n");
logContent.append("------------------- ").append("Write Data into Database Successfully at ").append(DateUtils.formatDate(this.endIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" --------------------");
//保存日志文件到ftp
final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties();
final String ftpPath = properties.getLogPath()+"/"+this.getFileSavePath();
final String fileName = super.mailFile.getName().replace(this.currDataType.getSuffix(),".log");
super.ftpUtil.saveFile(ftpPath,fileName,new ByteArrayInputStream(logContent.toString().getBytes(StandardCharsets.UTF_8)));
}
}

View File

@ -1,25 +1,42 @@
package org.jeecg.modules.spectrum;
import cn.hutool.core.io.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.properties.SpectrumPathProperties;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.base.entity.original.GardsMetData;
import org.jeecg.modules.emuns.DataType;
import org.jeecg.modules.native_jni.EnergySpectrumHandler;
import org.jeecg.modules.native_jni.struct.MetSpectrumStruct;
import org.springframework.util.CollectionUtils;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* 气象谱处理
*/
@Slf4j
public class MetSpectrum extends SpectrumHandler{
/**
* 解析后的数据
*/
private MetSpectrumStruct sourceData = null;
/**
* 开始存库时间
*/
private Date startIntoDatabaseTime = null;
/**
* 结束存库时间
*/
private Date endIntoDatabaseTime = null;
private List<GardsMetData> metDatas;
/**
* 设置过滤链路
@ -28,7 +45,7 @@ public class MetSpectrum extends SpectrumHandler{
protected void setChina() {
SpectrumHandler spectrumHandler = new AlertSpectrum();
spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile,
super.currDataType,super.message,super.emailProperties);
super.currDataType,super.message,super.emailProperties,super.ftpUtil);
spectrumHandler.setPrevious(this);
super.setNext(spectrumHandler);
}
@ -39,9 +56,8 @@ public class MetSpectrum extends SpectrumHandler{
@Override
protected void handler() throws Exception {
if(DataType.MET.getType().equals(super.currDataType.getType())){
log.info("----------------------------------");
log.info(super.currDataType.getType());
log.info("----------------------------------");
//打印当前处理的能谱类型
super.printCurrDataType();
//解析邮件内容
this.parseingEmail();
//保存PHD文件到ftp
@ -52,6 +68,8 @@ public class MetSpectrum extends SpectrumHandler{
super.saveEmailLog();
//删除本地临时文件
super.deleteLocalTemporaryFile();
//把流程日志写入ftp日志文件
this.saveLogToFtp();
}else{
super.next.handler();
}
@ -71,6 +89,9 @@ public class MetSpectrum extends SpectrumHandler{
@Override
protected void parseingEmail() {
final MetSpectrumStruct sourceData = EnergySpectrumHandler.getMetSourceData(mailFile.getAbsolutePath());
if(Objects.isNull(sourceData)){
throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath());
}
this.sourceData = sourceData;
}
@ -80,6 +101,20 @@ public class MetSpectrum extends SpectrumHandler{
@Override
protected void saveFileToFtp() throws Exception {
this.updateSpectrumFileName();
//获取文件保存路径
String fileSavePath = this.getFileSavePath();
final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties();
fileSavePath = properties.getRootPath()+"/"+fileSavePath;
super.ftpUtil.saveFile(fileSavePath,this.mailFile.getName(),new FileInputStream(this.mailFile));
//设置FTP文件保存路径
super.ftpSavePath = fileSavePath+"/"+this.mailFile.getName();
}
/**
* 获取文件保存路径
* @return
*/
private String getFileSavePath(){
//处理此文件需要保存到ftp服务的路径
final int year = LocalDate.now().getYear();
final int month = LocalDate.now().getMonth().getValue();
@ -90,10 +125,7 @@ public class MetSpectrum extends SpectrumHandler{
ftpPath.append(year);
ftpPath.append("/");
ftpPath.append(month>=10?month:"0"+month);
super.spectrumServiceQuotes.getFtpUtil().saveFile(properties.getRootPath()+"/"+ftpPath.toString(),this.mailFile.getName(),new FileInputStream(this.mailFile));
//设置FTP文件保存路径
super.ftpSavePath = ftpPath+"/"+this.mailFile.getName();
FileUtil.appendString(super.ftpSavePath+System.lineSeparator(),"C:\\Users\\86187\\Desktop\\engine\\sampleId.txt", "UTF-8");
return ftpPath.toString();
}
/**
@ -118,6 +150,32 @@ public class MetSpectrum extends SpectrumHandler{
*/
@Override
protected void handlerOriginalData() throws Exception {
this.startIntoDatabaseTime = new Date();
spectrumServiceQuotes.getMetSpectrumService().create(this.sourceData,super.ftpSavePath);
this.endIntoDatabaseTime = new Date();
}
/**
* 把流程日志写入ftp日志文件
*/
@Override
protected void saveLogToFtp() {
//获取气象记录ID范围
String metIdRange = "";
if(!CollectionUtils.isEmpty(this.metDatas)){
metIdRange = this.metDatas.get(0).getMetId()+"-"+this.metDatas.get(this.metDatas.size()-1).getMetId();
}
//组装日志文件内容
StringBuilder logContent = new StringBuilder();
logContent.append("-------------------------- Write Data into Database at ").append(DateUtils.formatDate(this.startIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" ---------------------------");
logContent.append("\n\n");
logContent.append("Met ID: ").append(metIdRange).append(" StandardFile:").append(spectrumServiceQuotes.getFtpProperties().getFtpRootPath()).append("/").append(super.ftpSavePath);
logContent.append("\n\n");
logContent.append("------------------- ").append("Write Data into Database Successfully at ").append(DateUtils.formatDate(this.endIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" --------------------");
//保存日志文件到ftp
final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties();
final String ftpPath = properties.getLogPath()+"/"+this.getFileSavePath();
final String fileName = super.mailFile.getName().replace(this.currDataType.getSuffix(),".log");
super.ftpUtil.saveFile(ftpPath,fileName,new ByteArrayInputStream(logContent.toString().getBytes(StandardCharsets.UTF_8)));
}
}

View File

@ -6,7 +6,6 @@ import org.jeecg.modules.emuns.DataType;
/**
* QC谱处理
*/
@Slf4j
public class QcphdSpectrum extends S_D_Q_G_SpectrumHandler{
/**
@ -16,7 +15,7 @@ public class QcphdSpectrum extends S_D_Q_G_SpectrumHandler{
protected void setChina() {
SpectrumHandler spectrumHandler = new GasbkphdSpectrum();
spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile,
super.currDataType,super.message,super.emailProperties);
super.currDataType,super.message,super.emailProperties,super.ftpUtil);
spectrumHandler.setPrevious(this);
super.setNext(spectrumHandler);
}
@ -28,9 +27,8 @@ public class QcphdSpectrum extends S_D_Q_G_SpectrumHandler{
protected void handler() throws Exception {
//判断当前邮件内容是否是QC谱
if(DataType.QCPHD.getType().equals(super.currDataType.getType())){
log.info("----------------------------------");
log.info(super.currDataType.getType());
log.info("----------------------------------");
//打印当前处理的能谱类型
super.printCurrDataType();
//解析邮件内容
super.parseingEmail();
//读取邮件内容标签
@ -43,6 +41,8 @@ public class QcphdSpectrum extends S_D_Q_G_SpectrumHandler{
super.saveEmailLog();
//删除本地临时文件
super.deleteLocalTemporaryFile();
//把流程日志写入ftp日志文件
super.saveLogToFtp();
}else{
super.next.handler();
}

View File

@ -1,19 +1,26 @@
package org.jeecg.modules.spectrum;
import cn.hutool.core.io.FileUtil;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings;
import org.jeecg.common.properties.SpectrumPathProperties;
import org.jeecg.common.util.DateUtils;
import org.jeecg.modules.base.entity.original.GardsSampleData;
import org.jeecg.modules.config.datasource.DataSourceSwitcher;
import org.jeecg.modules.native_jni.EnergySpectrumHandler;
import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct;
import org.jeecg.modules.service.ISpectrumBlockService;
import org.springframework.boot.system.ApplicationHome;
import org.springframework.transaction.TransactionStatus;
import java.io.FileInputStream;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@ -26,6 +33,18 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{
* 解析后的数据
*/
protected EnergySpectrumStruct sourceData = null;
/**
* 开始存库时间
*/
private Date startIntoDatabaseTime = null;
/**
* 结束存库时间
*/
private Date endIntoDatabaseTime = null;
/**
* 基础数据
*/
private GardsSampleData sampleData;
/**
* 调用dll解析邮件
@ -33,6 +52,9 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{
@Override
protected void parseingEmail() {
final EnergySpectrumStruct sourceData = EnergySpectrumHandler.getSourceData(mailFile.getAbsolutePath());
if(Objects.isNull(sourceData)){
throw new RuntimeException("THE PHDFile has some blocks can't be read:"+this.mailFile.getAbsolutePath());
}
this.sourceData = sourceData;
}
@ -43,6 +65,20 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{
protected void saveFileToFtp() throws Exception {
//修改能谱文件名称
this.updateSpectrumFileName();
//获取文件保存路径
String fileSavePath = this.getFileSavePath();
final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties();
fileSavePath = properties.getRootPath()+"/"+fileSavePath;
super.ftpUtil.saveFile(fileSavePath,this.mailFile.getName(),new FileInputStream(this.mailFile));
//设置FTP文件保存路径
super.ftpSavePath = fileSavePath+"/"+this.mailFile.getName();
}
/**
* 获取文件保存路径
* @return
*/
private String getFileSavePath(){
//处理此文件需要保存到ftp服务的路径
final int year = LocalDate.now().getYear();
final int month = LocalDate.now().getMonth().getValue();
@ -55,10 +91,7 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{
ftpPath.append(year);
ftpPath.append("/");
ftpPath.append(month>=10?month:"0"+month);
this.spectrumServiceQuotes.getFtpUtil().saveFile(properties.getRootPath()+"/"+ftpPath.toString(),this.mailFile.getName(),new FileInputStream(this.mailFile));
//设置FTP文件保存路径
super.ftpSavePath = ftpPath+"/"+this.mailFile.getName();
// FileUtil.appendString(super.ftpSavePath+System.lineSeparator(),"C:\\Users\\86187\\Desktop\\engine\\sampleId.txt", "UTF-8");
return ftpPath.toString();
}
/**
@ -102,20 +135,22 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{
*/
@Override
protected void handlerOriginalData() throws Exception {
this.startIntoDatabaseTime = new Date();
DataSourceSwitcher.switchToOracle();
final TransactionStatus transactionStatus = spectrumServiceQuotes.getTransactionManager().getTransaction(spectrumServiceQuotes.getTransactionDefinition());
try{
//存储基础数据
final GardsSampleData sampleData = spectrumServiceQuotes.getSpectrumBaseBlockService().create(this.sourceData,super.ftpSavePath);
this.sampleData = spectrumServiceQuotes.getSpectrumBaseBlockService().create(this.sourceData,super.ftpSavePath);
//存储其他块数据
for(String labels : spectrumFileLabels){
final ISpectrumBlockService spectrumBlockService = spectrumServiceQuotes.getSpectrumBlockService().get(labels);
if(Objects.nonNull(spectrumBlockService)){
spectrumBlockService.create(sourceData,sampleData);
spectrumBlockService.create(sourceData,this.sampleData);
}
}
//提交事务
spectrumServiceQuotes.getTransactionManager().commit(transactionStatus);
this.endIntoDatabaseTime = new Date();
}catch (Exception e){
//回滚事务
spectrumServiceQuotes.getTransactionManager().rollback(transactionStatus);
@ -124,4 +159,73 @@ public abstract class S_D_Q_G_SpectrumHandler extends SpectrumHandler{
DataSourceSwitcher.clearDataSource();
}
}
/**
* 把流程日志写入ftp日志文件
* @throws Exception
*/
@Override
protected void saveLogToFtp() throws FileNotFoundException {
//获取数据源属性
final String oraUsername = spectrumServiceQuotes.getOraDataSourceProperties().getUsername();
final String oraUrl = spectrumServiceQuotes.getOraDataSourceProperties().getUrl();
//组装日志文件内容
StringBuilder logContent = new StringBuilder();
logContent.append("-------------------------- Write Data into Database at ").append(DateUtils.formatDate(this.startIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" ---------------------------");
logContent.append("\n\n");
logContent.append("ApplicationPath:").append(this.getProjectAbsolutePath()).append(",").append("ApplicationName:").append(this.getProjectName()).append(",started by RNAUTO at ").append(this.startIntoDatabaseTime);
logContent.append("\n\n");
logContent.append("Successfully connected to database,source:").append(oraUrl.substring(oraUrl.lastIndexOf(":")+1)).append(",user=").append(oraUsername);
logContent.append("\n\n");
logContent.append("SourceFile:").append(super.mailFile.getAbsolutePath());
logContent.append("\n");
logContent.append("StandardFile:").append(spectrumServiceQuotes.getFtpProperties().getFtpRootPath()).append("/").append(super.ftpSavePath);
logContent.append("\n\n");
logContent.append("Detector ID:").append(this.sampleData.getDetectorId());
logContent.append("\n");
logContent.append("Station ID:").append(this.sampleData.getStationId());
logContent.append("\n");
logContent.append("Sample ID:").append(this.sampleData.getSampleId());
logContent.append("\n\n");
logContent.append("Instance status successfully set to:").append(this.sampleData.getStatus()).append(".....");
logContent.append("\n\n");
logContent.append("------------------- ").append("Write Data into Database Successfully at ").append(DateUtils.formatDate(this.endIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" --------------------");
//保存日志文件到ftp
final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties();
final String ftpPath = properties.getLogPath()+"/"+this.getFileSavePath();
final String fileName = super.mailFile.getName().replace(this.currDataType.getSuffix(),".log");
super.ftpUtil.saveFile(ftpPath,fileName,new ByteArrayInputStream(logContent.toString().getBytes(StandardCharsets.UTF_8)));
}
/**
* 获取项目绝对路径
* @return
*/
private String getProjectAbsolutePath(){
ApplicationHome applicationHome = new ApplicationHome();
return applicationHome.getDir().getAbsolutePath();
}
/**
* 获取项目名称
* @return
*/
private String getProjectName(){
ApplicationHome applicationHome = new ApplicationHome();
File[] files = applicationHome.getDir().listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
if(file.getName().endsWith(".jar")) {
return true;
}
return false;
}
});
if(ArrayUtils.isNotEmpty(files)){
String fileName = files[0].getName();
fileName = fileName.substring(0,fileName.lastIndexOf("."));
return fileName;
}
return Strings.EMPTY;
}
}

View File

@ -1,12 +1,10 @@
package org.jeecg.modules.spectrum;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.emuns.DataType;
/**
* 样品谱处理
*/
@Slf4j
public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{
/**
@ -16,7 +14,7 @@ public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{
protected void setChina() {
SpectrumHandler spectrumHandler = new DetbkphdSpectrum();
spectrumHandler.initNext(super.spectrumServiceQuotes,super.mailFile,
super.currDataType,super.message,super.emailProperties);
super.currDataType,super.message,super.emailProperties,super.ftpUtil);
spectrumHandler.setPrevious(this);
super.setNext(spectrumHandler);
}
@ -27,9 +25,8 @@ public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{
@Override
protected void handler() throws Exception {
if(DataType.SAMPLEPHD.getType().equals(super.currDataType.getType())){
log.info("----------------------------------");
log.info(super.currDataType.getType());
log.info("----------------------------------");
//打印当前处理的能谱类型
super.printCurrDataType();
//解析邮件内容
super.parseingEmail();
//读取邮件内容标签
@ -42,6 +39,8 @@ public class SamplephdSpectrum extends S_D_Q_G_SpectrumHandler{
super.saveEmailLog();
//删除本地临时文件
super.deleteLocalTemporaryFile();
//把流程日志写入ftp日志文件
super.saveLogToFtp();
}else{
super.next.handler();
}

View File

@ -2,16 +2,20 @@ package org.jeecg.modules.spectrum;
import cn.hutool.core.io.FileUtil;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.email.EmailProperties;
import org.jeecg.modules.emuns.DataType;
import org.jeecg.modules.ftp.FTPUtils;
import javax.mail.Message;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;
import java.util.Objects;
/**
* 能谱处理模版
*/
@Slf4j
public abstract class SpectrumHandler extends Chain{
private final static String DATA_TYPE_PREFIX = "DATA_TYPE ";
@ -27,6 +31,10 @@ public abstract class SpectrumHandler extends Chain{
* 处理能谱数据相关Service引用
*/
protected SpectrumServiceQuotes spectrumServiceQuotes;
/**
* ftp工具
*/
protected FTPUtils ftpUtil;
/**
* 当前解析的邮件内容文本
*/
@ -52,22 +60,26 @@ public abstract class SpectrumHandler extends Chain{
/**
* 初始化参数
*/
protected void init(String mailContent,SpectrumServiceQuotes spectrumServiceQuotes,Message message,EmailProperties emailProperties) throws Exception{
protected void init(String mailContent,SpectrumServiceQuotes spectrumServiceQuotes,Message message,
EmailProperties emailProperties,FTPUtils ftpUtil) throws Exception{
this.mailContent = mailContent;
this.spectrumServiceQuotes = spectrumServiceQuotes;
this.message = message;
this.emailProperties = emailProperties;
this.ftpUtil = ftpUtil;
}
/**
* 初始化参数
*/
protected void initNext(SpectrumServiceQuotes spectrumServiceQuotes,File mailFile,DataType currDataType,Message message,EmailProperties emailProperties){
protected void initNext(SpectrumServiceQuotes spectrumServiceQuotes,File mailFile,DataType currDataType,
Message message,EmailProperties emailProperties,FTPUtils ftpUtil){
this.spectrumServiceQuotes = spectrumServiceQuotes;
this.mailFile = mailFile;
this.currDataType = currDataType;
this.message = message;
this.emailProperties = emailProperties;
this.ftpUtil = ftpUtil;
this.setChina();
}
@ -101,6 +113,17 @@ public abstract class SpectrumHandler extends Chain{
*/
protected abstract void handlerOriginalData() throws Exception;
protected void printCurrDataType(){
log.info("----------------------------------");
log.info(this.currDataType.getType());
log.info("----------------------------------");
}
/**
* 把流程日志写入ftp日志文件
*/
protected abstract void saveLogToFtp() throws FileNotFoundException;
/**
* 把邮件内容存储到本地
*/

View File

@ -1,22 +1,18 @@
package org.jeecg.modules.spectrum;
import cn.hutool.core.io.FileUtil;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.email.EmailServiceManager;
import org.jeecg.common.properties.SpectrumPathProperties;
import org.jeecg.common.properties.TaskProperties;
import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.FTPUtil;
import org.jeecg.modules.email.EmailLogProperties;
import org.jeecg.modules.email.EmailProperties;
import org.jeecg.modules.ftp.FTPProperties;
import org.jeecg.modules.ftp.FTPUtils;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;
import java.io.File;
import java.util.Date;
import java.util.concurrent.CountDownLatch;
@ -67,12 +63,10 @@ public class SpectrumParsingActuator implements Runnable{
/**
* ftp工具
*/
private FTPUtil ftpUtil;
private FTPUtils ftpUtil;
public void init(Message message, EmailProperties emailProperties,
EmailServiceManager emailServiceManager,
CountDownLatch taskLatch,SpectrumServiceQuotes spectrumServiceQuotes,
EmailCounter emailCounter){
public void init(Message message, EmailProperties emailProperties,EmailServiceManager emailServiceManager,
CountDownLatch taskLatch, SpectrumServiceQuotes spectrumServiceQuotes,EmailCounter emailCounter){
this.message = message;
this.emailProperties = emailProperties;
this.emailServiceManager = emailServiceManager;
@ -80,25 +74,31 @@ public class SpectrumParsingActuator implements Runnable{
this.spectrumServiceQuotes = spectrumServiceQuotes;
this.spectrumPathProperties = spectrumServiceQuotes.getSpectrumPathProperties();
this.emailCounter = emailCounter;
this.ftpUtil = spectrumServiceQuotes.getFtpUtil();
//初始化FTP客户端对象
final FTPProperties ftpProperties = spectrumServiceQuotes.getFtpProperties();
ftpUtil = new FTPUtils(ftpProperties.getHost(),ftpProperties.getPort(),ftpProperties.getUserName(),
ftpProperties.getPassword(),ftpProperties.getEncoding(),ftpProperties.getFtpRootPath());
}
@Override
public void run() {
String subject = null;
StringBuilder mailContent = null;
String sendTime = null;
String receiveTime = null;
try {
subject = MimeUtility.decodeText(message.getSubject());
sendTime = DateUtils.formatDate(message.getSentDate(),"yyyy-MM-dd HH:mm:ss");
receiveTime = DateUtils.formatDate(message.getReceivedDate(),"yyyy-MM-dd HH:mm:ss");
System.out.println(subject);
mailContent = new StringBuilder();
emailServiceManager.getMailContent(message,mailContent);
// mailContent = new StringBuilder(FileUtil.readUtf8String("E:\\file\\AUX04_RMSSOH-20230601_021743.soh"));
//所有邮件都需以.eml格式存储到ftp eml文件夹中
downloadEmailToFtp();
//判断是否是IMS2.0协议文件
if(checkMailContent(mailContent,subject)){
SpectrumHandler spectrumHandler = new SamplephdSpectrum();
spectrumHandler.init(mailContent.toString(),spectrumServiceQuotes,message,emailProperties);
spectrumHandler.init(mailContent.toString(),spectrumServiceQuotes,message,emailProperties,ftpUtil);
final boolean matchResult = spectrumHandler.saveEmailToLocal();
if(matchResult){
spectrumHandler.handler();
@ -109,11 +109,12 @@ public class SpectrumParsingActuator implements Runnable{
//删除邮箱中已处理过的邮件
emailServiceManager.removeMail(message);
} catch (Exception e) {
System.out.println(mailContent.toString());
log.error("邮件解析失败,邮件主题为:{}失败原因为:{}",subject,e.getMessage());
log.error(mailContent.toString());
log.error("邮件解析失败,邮件主题为:{}发送时间为:{},接收时间为:{}失败原因为:{}",subject,sendTime,receiveTime,e.getMessage());
e.printStackTrace();
}finally {
this.taskLatch.countDown();
ftpUtil.close();
}
}
@ -176,8 +177,6 @@ public class SpectrumParsingActuator implements Runnable{
fileName.append("_");
fileName.append(emailCounter.getCurrValue());
fileName.append(SAVE_EML_SUFFIX);
// final File file = new File("E:\\file\\" + fileName.toString());
// FileUtil.writeFromStream(message.getInputStream(),file);
ftpUtil.saveFile(spectrumPathProperties.getEmlPath(),fileName.toString(),message.getInputStream());
}
}

View File

@ -4,7 +4,8 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.jeecg.common.properties.SpectrumPathProperties;
import org.jeecg.common.properties.TaskProperties;
import org.jeecg.common.util.FTPUtil;
import org.jeecg.modules.datasource.OraDataSourceProperties;
import org.jeecg.modules.ftp.FTPProperties;
import org.jeecg.modules.service.*;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
@ -29,7 +30,7 @@ public class SpectrumServiceQuotes {
private final TaskProperties taskProperties;
private final FTPUtil ftpUtil;
private final FTPProperties ftpProperties;
private final SpectrumPathProperties spectrumPathProperties;
@ -41,4 +42,6 @@ public class SpectrumServiceQuotes {
private final ISysMailLogService mailLogService;
private final OraDataSourceProperties oraDataSourceProperties;
}

View File

@ -0,0 +1,62 @@
package org.jeecg.modules.entity.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class StructInsertInput implements Serializable {
//-----------------input:------------------
List<Double> peakCentroid;
List<Double> fwhmc;
List<Double> tail;
List<Double> tailAlpha;
List<Double> upperTail;
List<Double> upperTailAlpha;
List<Double> area;
List<Double> stepRatio;
List<Double> usedEnerPara;
List<Double> usedResoPara;
List<Double> usedEffiPara;
long num_g_channel;
long begin_channel;
List<Double> XCtrl;
List<Double> YCtrl;
List<Double> YSlope;
int rg_low;
int rg_high;
List<Double> para_tail;
List<Double> para_tailAlpha;
List<Double> para_tailRight;
List<Double> para_tailRightAlpha;
List<Double> para_stepRatio;
int curChan;
List<Double> vCount;
}

View File

@ -0,0 +1,34 @@
package org.jeecg.modules.entity.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class StructInsertOutput implements Serializable {
//-----------------output:------------------
List<Double> energy;
List<Double> sensitivity;
List<Double> fwhm;
List<Double> efficiency;
List<Double> BWWidthChan;
List<Double> recoilBetaChan;
List<Double> recoilDeltaChan;
List<Double> vIdx;
List<Double> vLeft;
List<Double> vRight;
List<Double> vCentroid;
}

View File

@ -1,6 +1,8 @@
package org.jeecg.modules.native_jni;
import org.jeecg.modules.entity.vo.PeakInfo;
import org.jeecg.modules.entity.vo.StructInsertInput;
import org.jeecg.modules.entity.vo.StructInsertOutput;
import org.jeecg.modules.native_jni.struct.CalValuesOut;
import java.util.List;
@ -13,6 +15,14 @@ public class CalValuesHandler {
public static native CalValuesOut calDerivEval(List<Double> channel, List<Double> para);
public static native double calDerivaOut(double Chan, List<Double> p);
public static native List<Double> interp1(PeakInfo peak, List<Double> t_base, List<Double> regChan);
public static native StructInsertOutput insertPeaks(StructInsertInput structInsertInput);
public static native List<Double> calFitPara(String type, int funcId, List<Double> x, List<Double> y, List<Double> err);
public static native List<PeakInfo> ComputePeakRange(int m_nCount, List<Double> vCentroid, List<Double> vFwhmCh, List<Double> vTail, List<Double> vUpperTail);
}