diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/GardsSohData.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/GardsSohData.java index 202054e8..df78c1a2 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/GardsSohData.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/GardsSohData.java @@ -77,12 +77,6 @@ public class GardsSohData implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date moddate; - /** - * 台站名称 - */ - @TableField(exist = false) - private String stationName; - /** * 探测器名称 */ diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/PHDFileUtil.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/PHDFileUtil.java new file mode 100644 index 00000000..20feb26b --- /dev/null +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/common/util/PHDFileUtil.java @@ -0,0 +1,151 @@ +package org.jeecg.common.util; + +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import org.jeecg.common.api.vo.Result; +import org.jeecg.modules.entity.vo.HistogramData; +import org.jeecg.modules.entity.vo.SeriseData; +import org.jeecg.modules.entity.vo.SpectrumData; +import org.jeecg.modules.native_jni.EnergySpectrumHandler; +import org.jeecg.modules.native_jni.struct.EnergySpectrumStruct; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +@Component +public class PHDFileUtil { + + public static Map getSourceData(String filePath){ + //加载dll工具库 + System.loadLibrary("ReadPHDFile"); + EnergySpectrumStruct struct = EnergySpectrumHandler.getSourceData(filePath); + Map map = new HashMap<>(); + try { + SpectrumData spectrumData = new SpectrumData(); + //封装散点图下的基础数据信息 + //Station Code + String stationCode = struct.site_code; + //Detector Code + String detectorCode = struct.detector_code; + //Data Type + String dataType = struct.data_type; + //Collection Start + Date CollectionStart = DateUtils.parseDate(struct.collection_start_date.replace(StringPool.SLASH,StringPool.DASH) + StringPool.SPACE + struct.collection_start_time.substring(0, struct.collection_start_time.indexOf(StringPool.DOT)), "yyyy-MM-dd HH:mm:ss"); + //Collection Stop + Date CollectionStop = DateUtils.parseDate(struct.collection_stop_date.replace(StringPool.SLASH,StringPool.DASH) + StringPool.SPACE + struct.collection_stop_time.substring(0, struct.collection_stop_time.indexOf(StringPool.DOT)), "yyyy-MM-dd HH:mm:ss"); + //Collection Time + String CollectionTime = String.format ("%.2f",Double.valueOf(CollectionStop.getTime() - CollectionStart.getTime()/ 1000)); + //Acquisition Start + Date AcquisitionStart = DateUtils.parseDate(struct.acquisition_start_date.replace(StringPool.SLASH,StringPool.DASH) + StringPool.SPACE + struct.acquisition_start_time.substring(0, struct.acquisition_start_time.indexOf(StringPool.DOT)), "yyyy-MM-dd HH:mm:ss"); + //Acq Real Time + double AcquisitionRealTime = struct.acquisition_real_time; + //Acq live Time + double AcquisitionLiveTime = struct.acquisition_live_time; + //Air Volume[m3] + double airVolume = struct.air_volume; + //Xe Volume[m3] + double xeVolume = struct.sample_volume_of_Xe; + spectrumData.setStationCode(stationCode); + spectrumData.setDetectorCode(detectorCode); + spectrumData.setDataType(dataType); + spectrumData.setCollectionStart(CollectionStart); + spectrumData.setCollectionStop(CollectionStop); + spectrumData.setCollectionTime(CollectionTime); + spectrumData.setAcquisitionStart(AcquisitionStart); + spectrumData.setAcquisitionRealTime(AcquisitionRealTime); + spectrumData.setAcquisitionLiveTime(AcquisitionLiveTime); + spectrumData.setAirVolume(airVolume); + spectrumData.setXeVolume(xeVolume); + map.put("spectrumData", spectrumData); + + //统计散点图 + //横坐标 beta-gamma + long bChannels = struct.b_channels; + //纵坐标 gamma + long gChannels = struct.g_channels; + //值 + List hCounts = struct.h_counts; + List histogramDataList = new LinkedList<>(); + for (int i=0; i list = null; + if (i != bChannels-1){ + list = hCounts.subList((int) (i * bChannels), (int) ((i + 1) * bChannels)); + }else { + list = hCounts.subList((int) (i * bChannels), hCounts.size()); + } + if (CollectionUtils.isNotEmpty(list)){ + for (int j=0; j< list.size(); j++){ + HistogramData his = new HistogramData(); + his.setB(i); + his.setG(j); + Long count = list.get(j); + his.setC(count); + histogramDataList.add(his); + } + } + } + map.put("histogramDataList", histogramDataList); + + //Gamma Spectrum Original + List gammaOriginalData = new LinkedList<>(); + for (int i=0; i gammaSeriseData = new LinkedList<>(); + for (int i=0; i gCentroidChannel = struct.g_centroid_channel; + List gEnergy = struct.g_energy; + List gammaProjectedData = EnergySpectrumHandler.GetFileFittingPara(gCentroidChannel, gEnergy); + map.put("gammaProjectedData", gammaProjectedData); + + //Beta Spectrum Original + List betaOriginalData = new LinkedList<>(); + for (int j=0; j betaSeriseData = new LinkedList<>(); + for (int i=0; i bChannel = struct.b_channel; + List bElectronEnergy = struct.b_electron_energy; + List betaProjectedData = EnergySpectrumHandler.GetFileFittingPara(bChannel, bElectronEnergy); + map.put("betaProjectedData", betaProjectedData); + + } catch (ParseException e) { + throw new RuntimeException(e); + } + return map; + } + +} diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java index 1c7ec92d..808f9294 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/controller/SpectrumAnalysesController.java @@ -23,7 +23,7 @@ public class SpectrumAnalysesController { private ISpectrumAnalysisService spectrumAnalysisService; @GetMapping("getDBSearchList") - @ApiOperation(value = "查询台站,探测器数据接口", notes = "查询台站,探测器数据接口") + @ApiOperation(value = "查询查询条件数据接口", notes = "查询查询条件数据接口") public Result getDBSearchList(String[] menuTypes){ return spectrumAnalysisService.getDBSearchList(menuTypes); } @@ -35,5 +35,10 @@ public class SpectrumAnalysesController { return spectrumAnalysisService.getDBSpectrumList(queryRequest, gardsSampleData, dbName, menuTypes, CollectStop, AcqStart, startDate, endDate); } + @GetMapping("getDBSpectrumChart") + @ApiOperation(value = "查询折线图相关信息接口", notes = "查询折线图相关信息接口") + public Result getDBSpectrumPie(String dbName, Integer[] sampleId){ + return spectrumAnalysisService.getDBSpectrumPie(dbName, sampleId); + } } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/HistogramData.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/HistogramData.java new file mode 100644 index 00000000..f3a725b1 --- /dev/null +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/HistogramData.java @@ -0,0 +1,16 @@ +package org.jeecg.modules.entity.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class HistogramData implements Serializable { + + private Integer b; + + private Integer g; + + private Long c; + +} diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SeriseData.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SeriseData.java new file mode 100644 index 00000000..427ee8c4 --- /dev/null +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SeriseData.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.entity.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SeriseData implements Serializable { + + private int x; + + private long y; + +} diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpectrumData.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpectrumData.java new file mode 100644 index 00000000..a1bddb50 --- /dev/null +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpectrumData.java @@ -0,0 +1,41 @@ +package org.jeecg.modules.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class SpectrumData implements Serializable { + + private String stationCode; + + private String detectorCode; + + private String dataType; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date CollectionStart; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date CollectionStop; + + private String CollectionTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date AcquisitionStart; + + private double AcquisitionRealTime; + + private double AcquisitionLiveTime; + + private double AirVolume; + + private double XeVolume; + +} diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpectrumFileRecord.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpectrumFileRecord.java new file mode 100644 index 00000000..9a291088 --- /dev/null +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/entity/vo/SpectrumFileRecord.java @@ -0,0 +1,29 @@ +package org.jeecg.modules.entity.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class SpectrumFileRecord implements Serializable { + + private Integer sampleId; + + private String sampleFilePath; + + private String gasBgFilePath; + + private String detBgFilePath; + + private String qcFilePath; + + private String logFilePath; + + private String reportFilePath; + + private String siteDetCode; + + private Date collectStart; + +} diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java index 8619195c..2ff06281 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/SpectrumAnalysisMapper.java @@ -3,6 +3,7 @@ package org.jeecg.modules.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.jeecg.modules.base.entity.GardsSampleData; +import org.jeecg.modules.entity.vo.SpectrumFileRecord; import java.util.List; @@ -10,4 +11,6 @@ public interface SpectrumAnalysisMapper { Page getDBSpectrumList(IPage page, GardsSampleData gardsSampleData, String dbName, List stationTypes, boolean CollectStop, boolean AcqStart, String startTime, String endTime); + SpectrumFileRecord getDBSpectrumFilePath(String dbName, List sampleIds); + } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml index 0dc66d45..ae78d1d5 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/mapper/xml/SpectrumAnalysisMapper.xml @@ -65,4 +65,26 @@ ORDER BY c.collect_stop DESC + + \ No newline at end of file diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java index 101eeed8..a4e0b441 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/ISpectrumAnalysisService.java @@ -12,4 +12,6 @@ public interface ISpectrumAnalysisService { Result getDBSpectrumList(QueryRequest queryRequest, GardsSampleData gardsSampleData, String dbName, String[] menuTypes, boolean CollectStop, boolean AcqStart, Date startDate, Date endDate); + Result getDBSpectrumPie(String dbName, Integer[] sampleId); + } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java index 436e5154..668b22e4 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/SpectrumAnalysisServiceImpl.java @@ -3,13 +3,20 @@ package org.jeecg.modules.service.impl; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.commons.io.FileUtils; +import org.apache.commons.net.ftp.FTPClient; +import org.apache.commons.net.ftp.FTPFile; import org.jeecg.common.api.QueryRequest; import org.jeecg.common.api.vo.Result; import org.jeecg.common.util.DateUtils; +import org.jeecg.common.util.FTPUtil; +import org.jeecg.common.util.PHDFileUtil; import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.base.entity.GardsSampleData; +import org.jeecg.modules.entity.vo.SpectrumFileRecord; import org.jeecg.modules.mapper.GardsDetectorsMapper; import org.jeecg.modules.mapper.SpectrumAnalysisMapper; import org.jeecg.modules.service.ISpectrumAnalysisService; @@ -19,6 +26,10 @@ import org.jeecg.modules.system.entity.GardsStations; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; @@ -34,6 +45,8 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService { private ISysDictService sysDictService; @Autowired private GardsDetectorsMapper gardsDetectorsMapper; + @Autowired + private FTPUtil ftpUtil; @Override public Result getDBSearchList(String[] menuTypes) { @@ -115,4 +128,95 @@ public class SpectrumAnalysisServiceImpl implements ISpectrumAnalysisService { result.setResult(sampleDataPage); return result; } + + @Override + public Result getDBSpectrumPie(String dbName, Integer[] sampleId) { + Result result = new Result(); + Map> resultMap = new HashMap<>(); + List sampleIds = Arrays.asList(sampleId); + if (CollectionUtils.isEmpty(sampleIds)){ + result.error500("至少需要选择一个数据"); + return result; + } + if (dbName.equalsIgnoreCase("auto")){ + dbName = "RNAUTO.GARDS_ANALYSES"; + }else if (dbName.equalsIgnoreCase("man")){ + dbName = "RNMAN.GARDS_ANALYSES"; + }else { + result.error500("数据库类型不存在"); + return result; + } + //查询数据库文件信息 + SpectrumFileRecord dbSpectrumFilePath = spectrumAnalysisMapper.getDBSpectrumFilePath(dbName, sampleIds); + if(StringUtils.isNotBlank(dbSpectrumFilePath.getSampleFilePath())){ + String sampleFilePath = dbSpectrumFilePath.getSampleFilePath(); + String pathName = sampleFilePath.substring(0, sampleFilePath.lastIndexOf(StringPool.SLASH)); + String fileName = sampleFilePath.substring(sampleFilePath.lastIndexOf(StringPool.SLASH)+1); + Map map = this.fenxi(pathName, fileName); + resultMap.put("sample",map); + } + if(StringUtils.isNotBlank(dbSpectrumFilePath.getGasBgFilePath())){ + String gasBgFilePath = dbSpectrumFilePath.getGasBgFilePath(); + String pathName = gasBgFilePath.substring(0, gasBgFilePath.lastIndexOf(StringPool.SLASH)); + String fileName = gasBgFilePath.substring(gasBgFilePath.lastIndexOf(StringPool.SLASH)+1); + Map map = this.fenxi(pathName, fileName); + } + if(StringUtils.isNotBlank(dbSpectrumFilePath.getDetBgFilePath())){ + String detBgFilePath = dbSpectrumFilePath.getDetBgFilePath(); + String pathName = detBgFilePath.substring(0, detBgFilePath.lastIndexOf(StringPool.SLASH)); + String fileName = detBgFilePath.substring(detBgFilePath.lastIndexOf(StringPool.SLASH)+1); + Map map = this.fenxi(pathName, fileName); + } + if(StringUtils.isNotBlank(dbSpectrumFilePath.getQcFilePath())){ + String qcFilePath = dbSpectrumFilePath.getQcFilePath(); + String pathName = qcFilePath.substring(0, qcFilePath.lastIndexOf(StringPool.SLASH)); + String fileName = qcFilePath.substring(qcFilePath.lastIndexOf(StringPool.SLASH)+1); + Map map = this.fenxi(pathName, fileName); + } + result.setSuccess(true); + result.setResult(resultMap); + return result; + } + + private Map fenxi(String pathName, String fileName) { + Map map = new HashMap<>(); + FTPClient ftpClient = ftpUtil.LoginFTP(); + if (Objects.isNull(ftpClient)){ + throw new RuntimeException("ftp连接失败"); + } + try { + //切换被动模式 + ftpClient.enterLocalPassiveMode(); + ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); + // 设置编码,当文件中存在中文且上传后文件乱码时可使用此配置项 + ftpClient.setControlEncoding("UTF-8"); + ftpClient.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE); + List paths = Arrays.asList(pathName.split(StringPool.SLASH)); + for (String path:paths) { + ftpClient.changeWorkingDirectory(path); + } + List ftpFiles = Arrays.asList(ftpClient.listFiles()); + ftpFiles = ftpFiles.stream().filter(item -> item.getName().equals(fileName)).collect(Collectors.toList()); + FTPFile ftpFile = ftpFiles.get(0); + if (Objects.nonNull(ftpFile)){ + InputStream inputStream = ftpClient.retrieveFileStream(ftpFile.getName()); + //声明一个临时文件 + File file = File.createTempFile("tmp", null); + //将ftp文件的输入流复制给临时文件 + FileUtils.copyInputStreamToFile(inputStream, file); + map = PHDFileUtil.getSourceData(file.getAbsolutePath()); + } + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + try { + if (Objects.nonNull(ftpClient)){ + ftpClient.disconnect(); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return map; + } }