diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/original/SampleWaterResult.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/original/SampleWaterResult.java new file mode 100644 index 00000000..20ca5db7 --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/original/SampleWaterResult.java @@ -0,0 +1,51 @@ +package org.jeecg.modules.base.entity.original; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +@Data +@TableName("ORIGINAL.SAMPLE_WATER_RESULT") +public class SampleWaterResult implements Serializable { + + @TableField(value = "SAMPLE_RESULT_ID") + private Integer sampleResultId; + + @TableField(value = "SAMPLE_ID") + private Integer sampleId; + + @TableField(value = "NUCLIDE_NAME") + private String nuclideName; + + @TableField(value = "ENERGY") + private Double energy; + + @TableField(value = "CSC_RATIO") + private Double cscRatio; + + @TableField(value = "HALF_LIFE") + private Double halfLife; + + @TableField(value = "MDA") + private Double mda; + + @TableField(value = "ACTIVITY") + private Double activity; + + @TableField(value = "SPEC_ACTIVITY") + private Double specActivity; + + @TableField(value = "NID_FLAG") + private Integer nidFlag; + + @TableField(value = "MODDATE") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date moddate; + +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DataType.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DataType.java index 7ea9beab..0335bb87 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DataType.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DataType.java @@ -52,7 +52,9 @@ public enum DataType { SPHDP("SPHDP", ".PHD"), SPHDF("SPHDF", ".PHD"), - GPS("RMSGPS", ".gps"); + GPS("RMSGPS", ".gps"), + + RESULT("HRULT", ".result"); private String type; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/ResultNuclide.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/ResultNuclide.java new file mode 100644 index 00000000..060ab8e5 --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/entity/vo/ResultNuclide.java @@ -0,0 +1,26 @@ +package org.jeecg.modules.entity.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ResultNuclide implements Serializable { + + private String nuclideName; + + private Double energy; + + private Double cscRatio; + + private String halfLife; + + private Double mda; + + private Double activity; + + private Double specActivity; + + private String nidFlag; + +} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java index 86b4ca66..0e062852 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/AbstractSpectrumHandler.java @@ -17,10 +17,7 @@ import org.jeecg.modules.eneity.event.SpectrumErrorEvent; import org.jeecg.modules.eneity.event.SpectrumLog; import org.jeecg.modules.enums.ErrorType; import org.jeecg.modules.enums.SpectrumSource; -import org.jeecg.modules.exception.AnalySpectrumException; -import org.jeecg.modules.exception.AnalyseException; -import org.jeecg.modules.exception.FileRepeatException; -import org.jeecg.modules.exception.HeaderBlockException; +import org.jeecg.modules.exception.*; import org.jeecg.modules.file.FileOperation; import java.io.File; import java.io.FileNotFoundException; diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GPSSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GPSSpectrum.java index a467627d..89360bd4 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GPSSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/GPSSpectrum.java @@ -12,6 +12,7 @@ import org.jeecg.modules.base.enums.SampleFileHeader; import org.jeecg.modules.eneity.event.FormatErrorEvent; import org.jeecg.modules.eneity.event.SpectrumErrorEvent; import org.jeecg.modules.enums.ErrorType; +import org.jeecg.modules.exception.PHD_ReadException; import org.jeecg.modules.file.FileOperation; import org.jeecg.modules.native_jni.struct.GPSSpectrumStruct; import org.springframework.util.CollectionUtils; @@ -45,6 +46,12 @@ public class GPSSpectrum extends AbstractSpectrumHandler{ */ @Override protected void setChina() { + AbstractSpectrumHandler spectrumHandler = new WaterResultSpectrum(); + spectrumHandler.initNext(super.spectrumServiceQuotes,super.spectrumFile,super.sourceFilePath, + super.currDataType,super.mailContent,super.emlFileName, + super.spectrumSource,super.returnFileName, super.batchesCounter); + spectrumHandler.setPrevious(this); + super.setNext(spectrumHandler); } /** @@ -52,14 +59,13 @@ public class GPSSpectrum extends AbstractSpectrumHandler{ */ @Override protected void preCheck() { + } @Override public void handler() throws Exception { if(DataType.GPS.getType().equals(super.currDataType.getType())){ try { - //前置检查 - this.preCheck(); //打印当前处理的能谱类型 super.printCurrDataType(); //解析邮件内容 @@ -91,11 +97,24 @@ public class GPSSpectrum extends AbstractSpectrumHandler{ @Override protected void parseingEmail() throws Exception { this.sourceData = new GPSSpectrumStruct(); + //获取文件内容 + File gpsFile = new File(super.spectrumFile.getAbsolutePath()); + //判断文件是否存在,如果不存在抛出phd文件读取异常 + if (!gpsFile.exists()) { + throw new PHD_ReadException("THE PHDFile has some blocks can't be read:"+super.spectrumFile.getAbsolutePath()); + } + //文件内容读取 + try { + lines = FileUtils.readLines(gpsFile, "UTF-8"); + } catch (IOException e) { + throw new RuntimeException(e); + } + //初始下标是0 0不进行读取 + int index = 0; //从第第五行开始遍历文件内容 for (int i=0; i< lines.size(); i++) { + //读取文件行内容 String lineContent = lines.get(i); - //初始下标是0 0不进行读取 - int index = 0; //判断当前行是否包含begin 如果包含 从当前行开始向后读取4行 if (lineContent.contains(SampleFileHeader.BEGIN.getMessage())) { index = i + 4; diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java index 2fea9251..75d6c858 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/HealthStatusSpectrum.java @@ -48,6 +48,12 @@ public class HealthStatusSpectrum extends AbstractSpectrumHandler{ */ @Override protected void setChina() { + AbstractSpectrumHandler spectrumHandler = new GPSSpectrum(); + spectrumHandler.initNext(super.spectrumServiceQuotes,super.spectrumFile,super.sourceFilePath, + super.currDataType,super.mailContent,super.emlFileName, + super.spectrumSource,super.returnFileName, super.batchesCounter); + spectrumHandler.setPrevious(this); + super.setNext(spectrumHandler); } /** @@ -102,6 +108,8 @@ public class HealthStatusSpectrum extends AbstractSpectrumHandler{ super.handleParseingFailFile(e); throw e; } + } else { + super.next.handler(); } } diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java index fd9b9a41..df200c2f 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/SpectrumServiceQuotes.java @@ -87,6 +87,7 @@ public class SpectrumServiceQuotes { private final MaximumPoolSizeProperties maximumPoolSizeProperties; private final IGardsGPSDataService gardsGPSDataService; + /** * 原始库插入数据锁 */ diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/WaterResultSpectrum.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/WaterResultSpectrum.java new file mode 100644 index 00000000..efb3f244 --- /dev/null +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/spectrum/WaterResultSpectrum.java @@ -0,0 +1,164 @@ +package org.jeecg.modules.spectrum; + +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import org.jeecg.common.properties.SpectrumPathProperties; +import org.jeecg.common.util.DateUtils; +import org.jeecg.modules.base.entity.original.SampleWaterResult; +import org.jeecg.modules.base.enums.DataType; +import org.jeecg.modules.eneity.event.FormatErrorEvent; +import org.jeecg.modules.file.FileOperation; +import org.jeecg.modules.native_jni.struct.WaterResultStruct; +import org.springframework.util.CollectionUtils; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + +public class WaterResultSpectrum extends AbstractSpectrumHandler{ + + private List lines = null; + + private WaterResultStruct sourceData = null; + + /** + * 开始存库时间 + */ + private Date startIntoDatabaseTime = null; + /** + * 结束存库时间 + */ + private Date endIntoDatabaseTime = null; + + private List waterResultList = null; + + @Override + protected void setChina() { + } + + @Override + protected void preCheck() { + } + + @Override + public void handler() throws Exception { + if(DataType.RESULT.getType().equals(super.currDataType.getType())){ + try { + //前置检查 + this.preCheck(); + //打印当前处理的能谱类型 + super.printCurrDataType(); + //解析邮件内容 + this.parseingEmail(); + //修改能谱文件名称 + this.updateSpectrumFileName(); + //保存PHD文件到savefile + super.saveFileToSavefile(); + //结构体数据入库 + this.handlerOriginalData(); + //把流程日志保存到日志目录 + this.saveLogToLogDir(); + //若本次文件来自于undel目录,解析成功则删除 + deleteIfFromUndelFile(); + }catch (Exception e){ + //异常返回文件名称用于报错日志 + super.returnFileName.append(super.spectrumFile.getName()); + //处理解析失败的文件 + super.handleParseingFailFile(e); + throw e; + } + } + } + + @Override + protected void parseingEmail() throws Exception { + this.sourceData = new WaterResultStruct(); + } + + @Override + protected String getFileSaveRelativePath() { + final int year = LocalDate.now().getYear(); + final int month = LocalDate.now().getMonth().getValue(); + final SpectrumPathProperties properties = super.spectrumServiceQuotes.getSpectrumPathProperties(); + StringBuilder relativePath = new StringBuilder(); + relativePath.append(properties.getFilePathMap().get(super.currDataType.getType())); + relativePath.append(File.separator); + relativePath.append(year); + relativePath.append(File.separator); + relativePath.append(month>=10?month:"0"+month); + return relativePath.toString(); + } + + @Override + protected void updateSpectrumFileName() throws FileNotFoundException { + StringBuilder newFileName = new StringBuilder(); + newFileName.append(this.sourceData.stationCode); + newFileName.append(StringPool.UNDERSCORE); + newFileName.append(super.currDataType.getType()); + newFileName.append(StringPool.DASH); + newFileName.append(this.sourceData.sampleRefId.substring(5, 17)); + newFileName.append(super.currDataType.getSuffix()); + if(!super.spectrumFile.exists()){ + //发送格式化错误事件,后续统计报告使用 + spectrumServiceQuotes.getApplicationContext().publishEvent(new FormatErrorEvent()); + throw new FileNotFoundException(super.spectrumFile.getAbsolutePath()+" does not exist"); + } + super.spectrumFile = FileOperation.rename(super.spectrumFile,newFileName.toString(),true); + //设置能谱文件保存相对路径(包含文件名称) + String fileSavePath = this.getFileSaveRelativePath(); + this.spectrumFileRelativePath = fileSavePath+File.separator+this.spectrumFile.getName(); + } + + @Override + protected void updateErrorSpectrumFileName() throws FileNotFoundException { + StringBuilder newFileName = new StringBuilder(); + newFileName.append(this.sourceData.stationCode); + newFileName.append(StringPool.UNDERSCORE); + newFileName.append(super.currDataType.getType()); + newFileName.append(StringPool.DASH); + newFileName.append(this.sourceData.sampleRefId.substring(5, 17)); + newFileName.append(super.currDataType.getSuffix()); + if(!super.spectrumFile.exists()){ + //发送格式化错误事件,后续统计报告使用 + spectrumServiceQuotes.getApplicationContext().publishEvent(new FormatErrorEvent()); + throw new FileNotFoundException(super.spectrumFile.getAbsolutePath()+" does not exist"); + } + super.spectrumFile = FileOperation.rename(super.spectrumFile,newFileName.toString(),true); + } + + @Override + protected void handlerOriginalData() throws Exception { + this.startIntoDatabaseTime = new Date(); +// this.gpsData = spectrumServiceQuotes.getGardsGPSDataService().create(this.sourceData, super.spectrumFileRelativePath); + this.endIntoDatabaseTime = new Date(); + } + + /** + * 把流程日志保存到日志目录 + */ + @Override + protected void saveLogToLogDir() throws IOException { + //获取海水结果谱记录核素ID范围 + String nuclideIdRange = ""; + if(!CollectionUtils.isEmpty(this.waterResultList)){ + nuclideIdRange = this.waterResultList.get(0).getSampleResultId()+"-"+this.waterResultList.get(this.waterResultList.size()-1).getSampleResultId(); + } + //组装日志文件内容 + 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(System.lineSeparator()).append(System.lineSeparator()); + logContent.append("WATER RESULT NUCLIDE ID: ").append(nuclideIdRange).append(" StandardFile:").append(super.spectrumFile.getAbsolutePath()); + logContent.append(System.lineSeparator()).append(System.lineSeparator()); + logContent.append("------------------- ").append("Write Data into Database Successfully at ").append(DateUtils.formatDate(this.endIntoDatabaseTime,"yyyy-MM-dd HH:mm:ss")).append(" --------------------"); + + final SpectrumPathProperties properties = this.spectrumServiceQuotes.getSpectrumPathProperties(); + final String dirPath = properties.getRootPath()+properties.getLogPath()+File.separator+this.getFileSaveRelativePath(); + final String fileName = super.spectrumFile.getName().replace(this.currDataType.getSuffix(),LOG_FILE_SUFFIX); + final String finalPath = dirPath+ File.separator+fileName; + + super.sendSpectrumLogToQueue(finalPath,logContent.toString()); + } + +} diff --git a/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/native_jni/struct/WaterResultStruct.java b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/native_jni/struct/WaterResultStruct.java new file mode 100644 index 00000000..024eb65f --- /dev/null +++ b/jeecg-module-beta-gamma-analyser/src/main/java/org/jeecg/modules/native_jni/struct/WaterResultStruct.java @@ -0,0 +1,26 @@ +package org.jeecg.modules.native_jni.struct; + +import org.jeecg.modules.entity.vo.ResultNuclide; + +import java.util.LinkedList; +import java.util.List; + + +public class WaterResultStruct { + + public String stationCode; + + public String sampleRefId; + + public Double lon; + + public Double lat; + + public List resultNuclideList; + + + public WaterResultStruct() { + resultNuclideList = new LinkedList<>(); + } + +}