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 a77d5e8e..c323d808 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 @@ -260,4 +260,9 @@ public class SpectrumAnalysesController { spectrumAnalysisService.saveToTxt(rrrLogInfo, request, response); } + @GetMapping("xeComparison") + public Result xeComparison(String sampleFileName, HttpServletRequest request) { + return spectrumAnalysisService.xeComparison(sampleFileName, request); + } + } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IDataService.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IDataService.java index 85ff90c9..a6c3abcc 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IDataService.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/IDataService.java @@ -1,7 +1,8 @@ package org.jeecg.modules.service; -import org.jeecg.modules.entity.vo.PeakInfo; +import org.jeecg.modules.entity.GardsXeResultsView; import org.jeecg.modules.entity.vo.TableNuclideActivity; +import org.jeecg.modules.entity.vo.TablePeak; import java.sql.Connection; import java.util.List; @@ -12,10 +13,12 @@ public interface IDataService { Connection connectOverSea(); - List viewPeaks(String siteDetCode, String spectralQualifier, Integer stationId, String collectStart, String acquisitionStop, Connection conn); + List viewPeaks(String siteDetCode, String spectralQualifier, Integer stationId, String collectStart, String acquisitionStop, Connection conn); List viewNucl(String siteDetCode, String spectralQualifier, Integer stationId, String collectStart, String acquisitionStop, Connection conn); + List viewBetaXeResult(String siteDetCode, String spectralQualifier, Integer stationId, String collectStart, String acquisitionStop, Connection conn); + void viewStations(); } 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 a6fcbfcb..39dac872 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 @@ -91,4 +91,7 @@ public interface ISpectrumAnalysisService { void saveToExcel(RRRLogInfo rrrLogInfo, HttpServletRequest request, HttpServletResponse response); void saveToTxt(RRRLogInfo rrrLogInfo, HttpServletRequest request, HttpServletResponse response); + + Result xeComparison(String sampleFileName, HttpServletRequest request); + } diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/DataServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/DataServiceImpl.java index ae2a7a9e..765002e3 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/DataServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/DataServiceImpl.java @@ -2,10 +2,13 @@ package org.jeecg.modules.service.impl; 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.util.NumberFormatUtil; import org.jeecg.common.util.RedisUtil; +import org.jeecg.modules.entity.GardsXeResultsView; import org.jeecg.modules.entity.vo.PeakInfo; import org.jeecg.modules.entity.vo.TableNuclideActivity; +import org.jeecg.modules.entity.vo.TablePeak; import org.jeecg.modules.service.IDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -62,10 +65,10 @@ public class DataServiceImpl implements IDataService { } @Override - public List viewPeaks(String siteDetCode, String spectralQualifier, Integer stationId, String collectStart, String acquisitionStop, Connection conn) { + public List viewPeaks(String siteDetCode, String spectralQualifier, Integer stationId, String collectStart, String acquisitionStop, Connection conn) { Statement statement = null; Integer sampleId = null; - List peakInfoList = new LinkedList<>(); + List peakInfoList = new LinkedList<>(); try { statement = conn.createStatement(); //拼接sql根据探测器编码,台站id,采样开始时间,采集结束时间 查询 sampleId @@ -99,21 +102,22 @@ public class DataServiceImpl implements IDataService { double significance = executeQuery.getDouble("DETECTABILITY"); int peakId = executeQuery.getInt("PEAK_ID"); //声明一个PeakInfo实体类存储查询出的数据 - PeakInfo peak = new PeakInfo(); - peak.index = peakId; - peak.area = area; - peak.areaErr = areaErr; - peak.peakCentroid = centroChannel; - peak.energy = energy; - peak.fwhm = fwhm; - peak.multiIndex = multiplet; - peak.significance = significance; + TablePeak peak = new TablePeak(); + peak.setNo(peakId); + peak.setNetArea(String.format("%.3f", area)); + peak.setAreaErr(String.format("%.3f", areaErr)); + peak.setCentroid(String.format("%.3f", centroChannel)); + peak.setEnergy(String.format("%.3f", energy)); + peak.setFwhm(String.format("%.3f", fwhm)); + peak.setMultiplet(String.valueOf(multiplet)); + peak.setSignificant(String.format("%.3f", significance)); + peak.setIndentify(""); peakInfoList.add(peak); } //判断峰信息是否为空 if (CollectionUtils.isNotEmpty(peakInfoList)) { //根据峰下标进行排序 - peakInfoList = peakInfoList.stream().sorted(Comparator.comparing(item-> item.index)).collect(Collectors.toList()); + peakInfoList = peakInfoList.stream().sorted(Comparator.comparing(item-> item.getNo())).collect(Collectors.toList()); //峰信息不为空 查询峰核素信息表 读取峰关联核素名称 String nuclIdedSql = "SELECT NAME,PEAK FROM RMSMAN.GARDS_NUCL_LINES_IDED " + "WHERE SAMPLE_ID = "+sampleId; @@ -121,11 +125,13 @@ public class DataServiceImpl implements IDataService { while (resultSet.next()) { String name = resultSet.getString("NAME"); int peak = resultSet.getInt("PEAK"); - peakInfoList.stream().forEach(item->{ - if (item.index == peak) { - item.nuclides.add(name+ StringPool.SEMICOLON); + for (TablePeak item : peakInfoList) { + if (item.getNo() == peak) { + String indentify = item.getIndentify(); + indentify+=name + StringPool.SEMICOLON; + item.setIndentify(indentify); } - }); + } } } } @@ -168,7 +174,7 @@ public class DataServiceImpl implements IDataService { if(Objects.nonNull(sampleId)) { //拼接sql查询核素信息表 String nuclSql = "SELECT NAME,HALFLIFE,MDA,ACTIV_DECAY,ACTIV_KEY,ACTIV_KEY_ERR FROM RMSMAN.GARDS_NUCL_IDED " + - "WHERE SAMPLE_ID = "+sampleId; + "WHERE SAMPLE_ID = "+sampleId + " AND NID_FLAG = 1"; //执行sql查询结果 ResultSet executeQuery = statement.executeQuery(nuclSql); while (executeQuery.next()) { @@ -223,6 +229,75 @@ public class DataServiceImpl implements IDataService { return nuclideActivityList; } + @Override + public List viewBetaXeResult(String siteDetCode, String spectralQualifier, Integer stationId, String collectStart, String acquisitionStop, Connection conn) { + Statement statement = null; + Integer sampleId = null; + List xeResultsViewList = new LinkedList<>(); + try { + statement = conn.createStatement(); + //拼接sql根据探测器编码,台站id,采样开始时间,采集结束时间 查询 sampleId + String sql = ""; + sql+="SELECT SAMPLE_ID FROM RMSMAN.GARDS_SAMPLE_DATA "; + sql+="WHERE TRIM(SITE_DET_CODE) = '"+siteDetCode+"' "; + if (Objects.nonNull(stationId)) { + sql+="AND STATION_ID = "+stationId+" "; + } + sql+="AND SPECTRAL_QUALIFIER = '" + spectralQualifier +"' "; + sql+="AND COLLECT_START = TO_DATE( '"+collectStart+"', 'YYYY-MM-DD HH24:MI:SS' ) "; + sql+="AND ACQUISITION_STOP = TO_DATE( '"+acquisitionStop+"', 'YYYY-MM-DD HH24:MI:SS' )"; + ResultSet query = statement.executeQuery(sql); + while (query.next()) { + sampleId = query.getInt("SAMPLE_ID"); + } + //判断条件查询到的sampleId是否为空 如果不为空 则继续查询 + if(Objects.nonNull(sampleId)) { + //拼接sql根据sampleId查询beta分析结果表内容数据 + String xeResultSql = "SELECT NUCLIDE_ID,CONC,CONC_ERR,MDC,NID_FLAG FROM RMSMAN.GARDS_BG_ISOTOPE_CONCS " + + "WHERE SAMPLE_ID = "+sampleId; + //执行sql得到查询结果 + ResultSet executeQuery = statement.executeQuery(xeResultSql); + while (executeQuery.next()) { + int nuclideId = executeQuery.getInt("NUCLIDE_ID"); + double conc = executeQuery.getDouble("CONC"); + double concErr = executeQuery.getDouble("CONC_ERR"); + double mdc = executeQuery.getDouble("MDC"); + int nidFlag = executeQuery.getInt("NID_FLAG"); + //声明一个XeResult实体类存储查询出的数据 + GardsXeResultsView xeResultsView = new GardsXeResultsView(); + if (8 == nuclideId) { + xeResultsView.setNuclideName("XE131M"); + } else if (9 == nuclideId) { + xeResultsView.setNuclideName("XE133M"); + } else if (10 == nuclideId) { + xeResultsView.setNuclideName("XE133"); + } else if (11 == nuclideId) { + xeResultsView.setNuclideName("XE135"); + } + xeResultsView.setConc(NumberFormatUtil.numberFormat(String.valueOf(conc))); + xeResultsView.setConcErr(NumberFormatUtil.numberFormat(String.valueOf(concErr))); + xeResultsView.setMdc(NumberFormatUtil.numberFormat(String.valueOf(mdc))); + xeResultsView.setNidFlag(nidFlag); + xeResultsViewList.add(xeResultsView); + } + if (CollectionUtils.isNotEmpty(xeResultsViewList)) { + xeResultsViewList = xeResultsViewList.stream().sorted(Comparator.comparing(GardsXeResultsView::getNuclideName)).collect(Collectors.toList()); + } + } + } catch (SQLException e) { + throw new RuntimeException(e); + } finally { + try { + if (Objects.nonNull(statement)) { + statement.close(); + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + return xeResultsViewList; + } + @Override public void viewStations() { Map stationMap = new HashMap<>(); diff --git a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java index 46fe3691..c8b16606 100644 --- a/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java +++ b/jeecg-module-spectrum-analysis/src/main/java/org/jeecg/modules/service/impl/GammaServiceImpl.java @@ -553,8 +553,23 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi } //读取redis缓存的计算mdc信息 Map mdcInfoMap = (Map) redisUtil.get("mdcInfoMap-"+phd.getHeader().getSystem_type()); - if (CollectionUtils.isNotEmpty(mdcInfoMap)) { - phd.setMdcInfoMap(mdcInfoMap); + //如果是数据库加载 判断如果mdc计算结果是空的 就加入新的 否则使用数据库加载的mdc数据 + if (CollectionUtils.isEmpty(phd.getMdcInfoMap())) { + if (CollectionUtils.isNotEmpty(mdcInfoMap)) { + phd.setMdcInfoMap(mdcInfoMap); + } + } else { + if (CollectionUtils.isNotEmpty(mdcInfoMap)) { + Map infoMap = phd.getMdcInfoMap(); + for (Map.Entry entry:infoMap.entrySet()) { + String nuclName = entry.getKey(); + CalMDCInfo info = mdcInfoMap.get(nuclName); + if (Objects.nonNull(info)) { + CalMDCInfo mdcInfo = entry.getValue(); + mdcInfo.setHalflife(info.getHalflife()); + } + } + } } } // 获取当前角色配置的颜色信息 @@ -4368,20 +4383,26 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi } @Override - public void exportRadionuclideActivity(Integer sampleId, String fileName, HttpServletRequest request, HttpServletResponse response) { + public void exportRadionuclideActivity(Integer sampleId, String fileName, String arTime, String crTime, HttpServletRequest request, HttpServletResponse response) { Result> result = radionuclideActivity(sampleId, fileName, request); Map dataMap = result.getResult(); if (MapUtil.isEmpty(dataMap)) return; + String formater = DateConstant.DATE_TIME; Date actRef = (Date) dataMap.get("dateTime_act_ref"); Date conRef = (Date) dataMap.get("dateTime_con_ref"); - if (ObjectUtil.isNotNull(actRef)) { - String actTime = DateUtil.format(actRef, DateConstant.DATE_TIME); - dataMap.put("dateTime_act_ref", actTime); + if (StrUtil.isNotBlank(arTime)) { + dataMap.put("dateTime_act_ref", arTime); + } else { + if (ObjectUtil.isNotNull(actRef)) + dataMap.put("dateTime_act_ref", DateUtil.format(actRef, formater)); } - if (ObjectUtil.isNotNull(conRef)) { - String conTime = DateUtil.format(conRef, DateConstant.DATE_TIME); - dataMap.put("dateTime_con_ref", conTime); + if (StrUtil.isNotBlank(crTime)) { + dataMap.put("dateTime_con_ref", crTime); + } else { + if (ObjectUtil.isNotNull(conRef)) + dataMap.put("dateTime_con_ref", DateUtil.format(conRef, formater)); } + String export = "RadionuclideActivity-Gamma.xls"; String template = ExportTemplate.RadionuclideActivity_G.getName(); ExportUtil.exportXls(response, template, dataMap, export); @@ -5927,7 +5948,7 @@ public class GammaServiceImpl extends AbstractLogOrReport implements IGammaServi public Result peakComparison(String fileName, HttpServletRequest request) { Result result = new Result(); Connection conn = null; - List peakInfoList = new LinkedList<>(); + List peakInfoList = new LinkedList<>(); //获取用户名 String userName = JwtUtil.getUserNameByToken(request); //读取缓存内容 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 2fb02572..c06f2680 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 @@ -57,6 +57,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; +import java.sql.Connection; +import java.sql.SQLException; import java.text.ParseException; import java.time.Instant; import java.time.LocalDateTime; @@ -118,6 +120,8 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements private RedisStreamUtil redisStreamUtil; @Autowired private NameStandUtil nameStandUtil; + @Autowired + private IDataService dataService; @Override @@ -6036,4 +6040,67 @@ public class SpectrumAnalysisServiceImpl extends AbstractLogOrReport implements return spectrumData; } + @Override + public Result xeComparison(String sampleFileName, HttpServletRequest request) { + Result result = new Result(); + Connection conn = null; + List xeResultsViewList = new LinkedList<>(); + //获取用户名称 + String userName = JwtUtil.getUserNameByToken(request); + //获取本地缓存 + Cache cache = betaCache.getBetaCache(); + BetaDataFile betaDataFile = cache.getIfPresent(sampleFileName + "-" + userName); + if (Objects.isNull(betaDataFile)) { + result.error500("Load basic file information first!"); + return result; + } + Map idcStationMap = (Map) redisUtil.get("idcStationMap"); + try { + EnergySpectrumStruct struct = betaDataFile.getSampleStruct(); + String collectStart = ""; + if (struct.collection_start_time.indexOf(StringPool.DOT) > 0) { + collectStart = struct.collection_start_date + " " + struct.collection_start_time.substring(0, struct.collection_start_time.indexOf(StringPool.DOT)); + } else { + collectStart = struct.collection_start_date + " " + struct.collection_start_time; + } + //获取采集开始时间 + Date acqStart = DateUtils.parseDate(struct.acquisition_start_date + " " + struct.acquisition_start_time); + //计算得到采集结束时间对应的毫秒数 + long stopTime = (long) (acqStart.getTime() + (struct.acquisition_real_time * 1000)); + //根据毫秒数得到采集结束时间 + Date acquisitionStopDate = new Date(stopTime); + //格式化得到采集结束时间的字符串 + String acquisitionStop = DateUtils.formatDate(acquisitionStopDate, "yyyy-MM-dd HH:mm:ss"); + //从缓存的idc台站信息中获取当前台站对应的台站id + Integer stationId = null; + if (CollectionUtils.isNotEmpty(idcStationMap)) { + stationId = idcStationMap.get(struct.site_code); + } + //连接本地同步的idc数据库 + conn = dataService.connectInland(); + //连接对象为空 则连接idc国际库 + if (Objects.isNull(conn)) { + conn = dataService.connectOverSea(); + } + //判断是否连接成功 + if (Objects.nonNull(conn)) { + //查询获取beta分析后的xe结果表的对比数据内容 + xeResultsViewList = dataService.viewBetaXeResult(struct.detector_code, struct.spectrum_quantity, stationId, collectStart, acquisitionStop, conn); + } + result.setSuccess(true); + result.setResult(xeResultsViewList); + } catch (ParseException e) { + throw new RuntimeException(e); + } finally { + try { + if (Objects.nonNull(conn)) { + conn.close(); + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + return result; + } + }