From 9f2d0770cae0914cf1dd6e47f7cd006abdb92248 Mon Sep 17 00:00:00 2001 From: panbaolin <13071138970@163.com> Date: Mon, 12 Jan 2026 19:12:22 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=201.=E4=BF=AE=E6=94=B9=E6=B3=A2?= =?UTF-8?q?=E5=BD=A2=E4=BA=8B=E4=BB=B6=E5=85=B3=E8=81=94=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E8=BF=87=E6=BB=A4=E6=B5=93=E5=BA=A6?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/WaveformEventResultTypeEnum.java | 26 ++++ .../properties/DataFusionProperties.java | 4 + .../rnauto/GardsWaveformEventResult.java | 41 ++++++ .../GardsWaveformEventResultMapper.java | 8 ++ .../impl/AssociatedWaveformServiceImpl.java | 3 + .../AssociatedWaveformTaskExec.java | 126 +++++++++++++----- 6 files changed, 172 insertions(+), 36 deletions(-) create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/enums/WaveformEventResultTypeEnum.java create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsWaveformEventResult.java create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventResultMapper.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/enums/WaveformEventResultTypeEnum.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/enums/WaveformEventResultTypeEnum.java new file mode 100644 index 0000000..14fda1a --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/enums/WaveformEventResultTypeEnum.java @@ -0,0 +1,26 @@ +package org.jeecg.common.constant.enums; + +/** + * IDC和NDC关联波形事件结果类型 + */ +public enum WaveformEventResultTypeEnum { + + /** + * IDC 关联结果 + */ + IDC(1), + /** + * NDC 关联结果 + */ + NDC(2); + + private Integer key; + + WaveformEventResultTypeEnum(Integer key) { + this.key = key; + } + + public Integer getKey(){ + return this.key; + } +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/DataFusionProperties.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/DataFusionProperties.java index f5c6a36..af944b2 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/DataFusionProperties.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/DataFusionProperties.java @@ -21,6 +21,10 @@ public class DataFusionProperties { * srs文件的上级目录有可能是flexpart.x.ecmwf.l1或flexpart.x.ncep.l1 */ private String srmParentDir; + /** + * 浓度值过滤条件 + */ + private String filterConditions; /** * 溯源时间 */ diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsWaveformEventResult.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsWaveformEventResult.java new file mode 100644 index 0000000..ff8daaa --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/rnauto/GardsWaveformEventResult.java @@ -0,0 +1,41 @@ +package org.jeecg.modules.base.entity.rnauto; + +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 java.util.Date; + +/** + * 关联波形事件结果 + */ +@Data +@TableName("RNAUTO.GARDS_WAVEFORM_EVENT_RESULT") +public class GardsWaveformEventResult { + + /** + * 主键 + */ + @TableField(value = "SAMPLE_ID") + private Integer sampleId; + + /** + * idc事件 + */ + @TableField(value = "ORID") + private Integer orid; + + /** + * 1-IDC关联数量,2-NDC关联数量 + */ + @TableField(value = "TYPE") + private Integer type; + + /** + * 更新时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + private Date moddate; +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventResultMapper.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventResultMapper.java new file mode 100644 index 0000000..f66544c --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventResultMapper.java @@ -0,0 +1,8 @@ +package org.jeecg.modules.base.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.rnauto.GardsWaveformEventResult; + +public interface GardsWaveformEventResultMapper extends BaseMapper { + +} diff --git a/jeecg-module-transport/src/main/java/org/jeecg/service/impl/AssociatedWaveformServiceImpl.java b/jeecg-module-transport/src/main/java/org/jeecg/service/impl/AssociatedWaveformServiceImpl.java index 74adbb3..5a33887 100644 --- a/jeecg-module-transport/src/main/java/org/jeecg/service/impl/AssociatedWaveformServiceImpl.java +++ b/jeecg-module-transport/src/main/java/org/jeecg/service/impl/AssociatedWaveformServiceImpl.java @@ -15,6 +15,7 @@ import org.jeecg.common.system.query.PageRequest; import org.jeecg.modules.base.entity.rnauto.GardsWaveformEvent; import org.jeecg.modules.base.mapper.GardsAnalysesMapper; import org.jeecg.modules.base.mapper.GardsWaveformEventMapper; +import org.jeecg.modules.base.mapper.GardsWaveformEventResultMapper; import org.jeecg.modules.base.mapper.OriginMapper; import org.jeecg.modules.base.vo.GardsSampleInfoVO; import org.jeecg.service.AssociatedWaveformService; @@ -47,6 +48,7 @@ public class AssociatedWaveformServiceImpl extends ServiceImpl idcSrsContents; private List ndcSrsContents; - //idc srs关联到的波形事件信息 - private Integer idcEvents; - //ndc srs关联到的波形事件信息 - private Integer ndcEvents; - /** * 初始化 @@ -60,14 +59,16 @@ public class AssociatedWaveformTaskExec extends Thread{ DataFusionProperties dataFusionProperties, GardsWaveformEventMapper waveformEventMapper, OriginMapper originMapper, - Integer sampleId, - Date acqEndTime, - String stationCode){ + GardsWaveformEventResultMapper waveformEventResultMapper, + Integer sampleId, + Date acqEndTime, + String stationCode){ this.transactionManager = transactionManager; this.transactionDefinition = transactionDefinition; this.dataFusionProperties = dataFusionProperties; this.waveformEventMapper = waveformEventMapper; this.originMapper = originMapper; + this.waveformEventResultMapper = waveformEventResultMapper; this.sampleId = sampleId; this.acqEndTime = acqEndTime; this.stationCode = stationCode; @@ -126,14 +127,22 @@ public class AssociatedWaveformTaskExec extends Thread{ * 关联波形数据 */ private void associationWaveform(){ - Integer idcEvents = this.associationSrs(this.idcSrsContents); - Integer ndcEvents = this.associationSrs(this.ndcSrsContents); + Set idcEvents = this.associationSrs(this.idcSrsContents); + Set ndcEvents = this.associationSrs(this.ndcSrsContents); DataSourceSwitcher.switchToOracle(); final TransactionStatus transactionStatus = this.transactionManager.getTransaction(this.transactionDefinition); try { + //保存关联结果 + if (CollUtil.isNotEmpty(idcEvents)){ + this.saveWaveformEventResult(idcEvents,WaveformEventResultTypeEnum.IDC.getKey()); + } + if (CollUtil.isNotEmpty(ndcEvents)){ + this.saveWaveformEventResult(ndcEvents,WaveformEventResultTypeEnum.NDC.getKey()); + } + //修改关联结果统计 GardsWaveformEvent waveformEvent = this.waveformEventMapper.selectById(sampleId); - waveformEvent.setIdcEvents(idcEvents); - waveformEvent.setNdcEvents(ndcEvents); + waveformEvent.setIdcEvents(idcEvents.size()); + waveformEvent.setNdcEvents(ndcEvents.size()); waveformEvent.setDescription(Strings.EMPTY); waveformEvent.setModdate(new Date()); waveformEvent.setStatus(AssociatedWaveformTaskEnum.COMPLETE.getValue()); @@ -147,10 +156,7 @@ public class AssociatedWaveformTaskExec extends Thread{ /** * 关联idc srs文件 */ - private Integer associationSrs(List srsContents){ - if (CollUtil.isEmpty(srsContents)) { - return 0; - } + private Set associationSrs(List srsContents){ // 台站经度 台站纬度 开始测量日期 小时 结束测量时间 小时 系数 总共模拟时长 小时数 网格大小 台站编码 // 139.08 36.30 20241203 12 20241203 18 0.1300000E+16 336 1 1 0.50 0.50 "JPX38" String[] firstLine = srsContents.get(0).split("\\s+"); @@ -161,6 +167,8 @@ public class AssociatedWaveformTaskExec extends Thread{ LocalDateTime endTime = LocalDateTime.ofInstant(this.acqEndTime.toInstant(), ZoneId.of("Asia/Shanghai")); endTime = endTime.withMinute(0).withSecond(0); LocalDateTime startTime = endTime.minusHours(totalHour).minusHours(dataFusionProperties.getTraceabilityTime()*24); + System.out.println(startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + System.out.println(endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); //查询范围内波形事件 List origins = this.selectOriginByTime(startTime,endTime); //处理srs文件中的坐标记录格式化成对象 @@ -170,8 +178,8 @@ public class AssociatedWaveformTaskExec extends Thread{ .collect(Collectors.groupingBy(record -> new AbstractMap.SimpleImmutableEntry<>(record.getLon(), record.getLat()) )); - Integer totalEvents = this.queryWaveform(origins, srsRecordsGroup, gridSize); - return totalEvents; + Set events = this.queryWaveform(origins, srsRecordsGroup, gridSize); + return events; } /** @@ -240,19 +248,26 @@ public class AssociatedWaveformTaskExec extends Thread{ private List buildSRSRecord(List contents,Integer hourlyCoefficient,LocalDateTime acqEndTime){ List list = contents.parallelStream().skip(1).map(content->{ String[] line = content.split("\\s+"); - SRSRecord srsRecord = new SRSRecord(); - srsRecord.setLat(Double.parseDouble(line[1])); - srsRecord.setLon(Double.parseDouble(line[2])); - srsRecord.setHour(Integer.parseInt(line[3])*hourlyCoefficient); - srsRecord.setConc(line[4]); - LocalDateTime endTime = acqEndTime.minusHours(srsRecord.getHour()); - LocalDateTime startTime = acqEndTime.minusHours(srsRecord.getHour()+dataFusionProperties.getTraceabilityTime()*24); - long startSecond = startTime.atZone(ZoneId.of("Asia/Shanghai")).toEpochSecond(); - long endSecond = endTime.atZone(ZoneId.of("Asia/Shanghai")).toEpochSecond(); - srsRecord.setStartSecond(startSecond); - srsRecord.setEndSecond(endSecond); - return srsRecord; - }).toList(); + BigDecimal val1 = new BigDecimal(line[4]); + BigDecimal val2 = new BigDecimal(dataFusionProperties.getFilterConditions()); + //过滤掉比较小的值 + if(val1.compareTo(val2) > 0){ + SRSRecord srsRecord = new SRSRecord(); + srsRecord.setLat(Double.parseDouble(line[1])); + srsRecord.setLon(Double.parseDouble(line[2])); + srsRecord.setHour(Integer.parseInt(line[3])*hourlyCoefficient); + srsRecord.setConc(line[4]); + LocalDateTime endTime = acqEndTime.minusHours(srsRecord.getHour()); + LocalDateTime startTime = acqEndTime.minusHours(srsRecord.getHour()+dataFusionProperties.getTraceabilityTime()*24); + long startSecond = startTime.atZone(ZoneId.of("Asia/Shanghai")).toEpochSecond(); + long endSecond = endTime.atZone(ZoneId.of("Asia/Shanghai")).toEpochSecond(); + srsRecord.setStartSecond(startSecond); + srsRecord.setEndSecond(endSecond); + return srsRecord; + } + return null; + }).filter(Objects::nonNull) + .toList(); return list; } @@ -260,8 +275,8 @@ public class AssociatedWaveformTaskExec extends Thread{ * 根据经纬度及时间查询范围内的波形数据,并进行计数,最后的计数就是关联的波形结果 * @param srsRecordsGroup */ - private Integer queryWaveform(List origins,Map, List> srsRecordsGroup,Double gridSize){ - Set idcOrids = ConcurrentHashMap.newKeySet(); + private Set queryWaveform(List origins,Map, List> srsRecordsGroup,Double gridSize){ + Set result = ConcurrentHashMap.newKeySet(); if (CollUtil.isNotEmpty(srsRecordsGroup) && CollUtil.isNotEmpty(origins)){ srsRecordsGroup.forEach((key,srsRecords)->{ double leftLon = Math.floor(key.getKey() / gridSize) * gridSize; @@ -275,12 +290,12 @@ public class AssociatedWaveformTaskExec extends Thread{ origin.getLat() >= bottomLat && origin.getLat() < topLat && origin.getTime() >= record.getStartSecond() && origin.getTime() <= record.getEndSecond()) .map(Origin::getOrid).collect(Collectors.toSet()); - idcOrids.addAll(orids); + result.addAll(orids); }); }); - return idcOrids.size(); + return result; } - return idcOrids.size(); + return result; } /** @@ -338,6 +353,32 @@ public class AssociatedWaveformTaskExec extends Thread{ } } + /** + * 保存关联结果 + * @param orids + */ + private void saveWaveformEventResult(Set orids,Integer type){ + DataSourceSwitcher.switchToOracle(); + final TransactionStatus transactionStatus = this.transactionManager.getTransaction(this.transactionDefinition); + try { + if(CollUtil.isNotEmpty(orids)){ + List waveformEventResults = new ArrayList<>(); + orids.forEach(orid->{ + GardsWaveformEventResult waveformEventResult = new GardsWaveformEventResult(); + waveformEventResult.setSampleId(this.sampleId); + waveformEventResult.setOrid(orid); + waveformEventResult.setType(type); + waveformEventResult.setModdate(new Date()); + waveformEventResults.add(waveformEventResult); + }); + this.waveformEventResultMapper.insert(waveformEventResults); + this.transactionManager.commit(transactionStatus); + } + }finally { + DataSourceSwitcher.clearDataSource(); + } + } + /** * 读取srm文件 * @param gzFile @@ -383,4 +424,17 @@ public class AssociatedWaveformTaskExec extends Thread{ } this.updateTaskStatus(this.sampleId,taskStatus); } + + public static void main(String[] args) { + LocalDateTime endTime = LocalDateTime.of(2024,12, 3,18, 0, 0); + LocalDateTime startTime = endTime.minusDays(74); + + long startSecond = startTime.atZone(ZoneId.of("Asia/Shanghai")).toEpochSecond(); + long endSecond = endTime.atZone(ZoneId.of("Asia/Shanghai")).toEpochSecond(); + + System.out.println(startSecond); + System.out.println(endSecond); + + } + } From 6a5c3f1fc0e7c40475825efe17e47d82d241e9d9 Mon Sep 17 00:00:00 2001 From: panbaolin <13071138970@163.com> Date: Tue, 13 Jan 2026 11:44:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=201.=E4=BF=AE=E6=94=B9=E6=B3=A2?= =?UTF-8?q?=E5=BD=A2=E4=BA=8B=E4=BB=B6=E5=85=B3=E8=81=94=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E6=9F=A5=E7=9C=8B=E6=95=B0=E6=8D=AE=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=92=8C=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/entity/{ => copsdb}/Origin.java | 12 +++- .../base/mapper/GardsWaveformEventMapper.java | 4 -- .../GardsWaveformEventResultMapper.java | 21 +++++++ .../modules/base/mapper/OriginMapper.java | 2 +- .../xml/GardsWaveformEventResultMapper.xml | 43 +++++++++++++ .../modules/base/mapper/xml/OriginMapper.xml | 2 +- .../AssociatedWaveformController.java | 50 +++++++++++++++ .../service/AssociatedWaveformService.java | 20 ++++++ .../impl/AssociatedWaveformServiceImpl.java | 30 ++++++++- .../AssociatedWaveformTaskExec.java | 61 ++++++++++++++----- 10 files changed, 221 insertions(+), 24 deletions(-) rename jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/{ => copsdb}/Origin.java (75%) create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/xml/GardsWaveformEventResultMapper.xml diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/Origin.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/copsdb/Origin.java similarity index 75% rename from jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/Origin.java rename to jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/copsdb/Origin.java index 64594ed..32916ae 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/Origin.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/entity/copsdb/Origin.java @@ -1,8 +1,10 @@ -package org.jeecg.modules.base.entity; +package org.jeecg.modules.base.entity.copsdb; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + import java.util.Date; @Data @@ -10,18 +12,26 @@ import java.util.Date; public class Origin { @TableField("LAT") + @Excel(name = "纬度", width = 20,height = 20,orderNum="2") private Double lat; @TableField("LON") + @Excel(name = "经度", width = 20,height = 20,orderNum="1") private Double lon; @TableField("DEPTH") + @Excel(name = "深度", width = 20,height = 20,orderNum="3") private Double depth; @TableField("TIME") private Double time; + @TableField(exist = false) + @Excel(name = "时间", width = 30,height = 20,orderNum="4") + private String datetime; + @TableField("ORID") + @Excel(name = "ORID", width = 20,height = 20,orderNum="0") private Integer orid; @TableField("EVID") diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventMapper.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventMapper.java index 3e73611..d43c43d 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventMapper.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventMapper.java @@ -5,8 +5,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.base.entity.rnauto.GardsWaveformEvent; import org.jeecg.modules.base.vo.GardsSampleInfoVO; - -import java.time.LocalDateTime; import java.util.Date; import java.util.Map; @@ -34,6 +32,4 @@ public interface GardsWaveformEventMapper extends BaseMapper * @return */ GardsSampleInfoVO selectSampleInfoBySampleId(@Param("sampleId") Integer sampleId); - - } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventResultMapper.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventResultMapper.java index f66544c..68fbb9d 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventResultMapper.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/GardsWaveformEventResultMapper.java @@ -1,8 +1,29 @@ package org.jeecg.modules.base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.base.entity.copsdb.Origin; import org.jeecg.modules.base.entity.rnauto.GardsWaveformEventResult; +import java.util.List; +import java.util.Map; + public interface GardsWaveformEventResultMapper extends BaseMapper { + /** + * 分页查询样品关联的波形数据详情 + * @param page + * @param sampleId + * @return + */ + IPage> page(IPage> page,@Param("sampleId") Integer sampleId,@Param("type") Integer type); + + /** + * 导出关联结果数据 + * @param sampleId + * @param type + * @return + */ + List excelOriginData(@Param("sampleId") Integer sampleId, @Param("type") Integer type); } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/OriginMapper.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/OriginMapper.java index 8d55013..43c9dcd 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/OriginMapper.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/OriginMapper.java @@ -2,7 +2,7 @@ package org.jeecg.modules.base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; -import org.jeecg.modules.base.entity.Origin; +import org.jeecg.modules.base.entity.copsdb.Origin; import java.util.List; diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/xml/GardsWaveformEventResultMapper.xml b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/xml/GardsWaveformEventResultMapper.xml new file mode 100644 index 0000000..241be91 --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/xml/GardsWaveformEventResultMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + \ No newline at end of file diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/xml/OriginMapper.xml b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/xml/OriginMapper.xml index d13706c..0f23550 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/xml/OriginMapper.xml +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/mapper/xml/OriginMapper.xml @@ -2,7 +2,7 @@ - SELECT t.LAT as "lat", t.LON as "lon", diff --git a/jeecg-module-transport/src/main/java/org/jeecg/controller/AssociatedWaveformController.java b/jeecg-module-transport/src/main/java/org/jeecg/controller/AssociatedWaveformController.java index 0aa1227..191ef88 100644 --- a/jeecg-module-transport/src/main/java/org/jeecg/controller/AssociatedWaveformController.java +++ b/jeecg-module-transport/src/main/java/org/jeecg/controller/AssociatedWaveformController.java @@ -6,15 +6,24 @@ import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.constant.enums.WaveformEventResultTypeEnum; import org.jeecg.common.system.query.PageRequest; +import org.jeecg.modules.base.entity.copsdb.Origin; import org.jeecg.service.AssociatedWaveformService; +import org.jeecgframework.poi.excel.ExcelExportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.enmus.ExcelType; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.time.LocalDate; +import java.util.List; /** * 数据融合-关联波形 @@ -36,6 +45,15 @@ public class AssociatedWaveformController { return Result.OK(associatedWaveformService.page(pageRequest,sampleId,status,sampleType,startDate,endDate)); } + @AutoLog(value = "分页查询样品关联的波形数据详情") + @Operation(summary = "分页查询样品关联的波形数据详情") + @GetMapping("getSampleWaveformsDetails") + public Result getSampleWaveformsDetails(PageRequest pageRequest, + @NotNull(message = "样品id不能为空") Integer sampleId, + @NotNull(message = "类型不能为空") Integer type) { + return Result.OK(associatedWaveformService.sampleWaveformsDetailsPage(pageRequest,sampleId,type)); + } + @AutoLog(value = "执行关联") @Operation(summary = "执行关联") @PutMapping("execAssociated") @@ -58,4 +76,36 @@ public class AssociatedWaveformController { associatedWaveformService.viewRRR(sampleId,response); } + @AutoLog(value = "导出样品关联的波形数据详情") + @Operation(summary = "导出样品关联的波形数据详情") + @GetMapping("excelOriginData") + public void excelOriginData(@NotNull(message = "样品id不能为空") Integer sampleId, + @NotNull(message = "类型不能为空")Integer type, + HttpServletResponse response) throws IOException { + String title = ""; + if (WaveformEventResultTypeEnum.IDC.getKey().equals(type)) { + title = "IDC-SRS文件关联的波形数据详情"; + }else if(WaveformEventResultTypeEnum.NDC.getKey().equals(type)){ + title = "NDC-SRS文件关联的波形数据详情"; + } + ExportParams params = new ExportParams(); + params.setTitle(title); + params.setFixedTitle(true); + params.setTitleHeight((short) 10); + params.setHeight((short) 30); + params.setType(ExcelType.XSSF); + + List origins = associatedWaveformService.excelOriginData(sampleId, type); + response.reset(); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + try { + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(title, "UTF-8")); + response.setHeader("Access-Control-Expose-Headers","Content-disposition"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + ExcelExportUtil.exportExcel(params,Origin.class,origins).write(response.getOutputStream()); + } + } diff --git a/jeecg-module-transport/src/main/java/org/jeecg/service/AssociatedWaveformService.java b/jeecg-module-transport/src/main/java/org/jeecg/service/AssociatedWaveformService.java index 60541db..d4c5cb6 100644 --- a/jeecg-module-transport/src/main/java/org/jeecg/service/AssociatedWaveformService.java +++ b/jeecg-module-transport/src/main/java/org/jeecg/service/AssociatedWaveformService.java @@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import jakarta.servlet.http.HttpServletResponse; import org.jeecg.common.system.query.PageRequest; +import org.jeecg.modules.base.entity.copsdb.Origin; import org.jeecg.modules.base.entity.rnauto.GardsWaveformEvent; import java.time.LocalDate; +import java.util.List; import java.util.Map; /** @@ -25,6 +27,15 @@ public interface AssociatedWaveformService extends IService */ IPage> page(PageRequest pageRequest, Integer sampleId, Integer status, String sampleType, LocalDate startDate, LocalDate endDate); + /** + * 查询样品关联的波形详情数据 + * @param pageRequest + * @param sampleId + * @param type + * @return + */ + IPage> sampleWaveformsDetailsPage(PageRequest pageRequest, Integer sampleId,Integer type); + /** * 样品id不能为空 * @param sampleId @@ -42,4 +53,13 @@ public interface AssociatedWaveformService extends IService * @param sampleId */ void viewRRR(Integer sampleId, HttpServletResponse response); + + /** + * 导出关联结果数据 + * @param sampleId + * @param type + * @return + */ + List excelOriginData(Integer sampleId,Integer type); + } diff --git a/jeecg-module-transport/src/main/java/org/jeecg/service/impl/AssociatedWaveformServiceImpl.java b/jeecg-module-transport/src/main/java/org/jeecg/service/impl/AssociatedWaveformServiceImpl.java index 5a33887..763070c 100644 --- a/jeecg-module-transport/src/main/java/org/jeecg/service/impl/AssociatedWaveformServiceImpl.java +++ b/jeecg-module-transport/src/main/java/org/jeecg/service/impl/AssociatedWaveformServiceImpl.java @@ -12,6 +12,7 @@ import lombok.RequiredArgsConstructor; import org.jeecg.common.properties.ArmdReportProperties; import org.jeecg.common.properties.DataFusionProperties; import org.jeecg.common.system.query.PageRequest; +import org.jeecg.modules.base.entity.copsdb.Origin; import org.jeecg.modules.base.entity.rnauto.GardsWaveformEvent; import org.jeecg.modules.base.mapper.GardsAnalysesMapper; import org.jeecg.modules.base.mapper.GardsWaveformEventMapper; @@ -29,9 +30,9 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -74,6 +75,20 @@ public class AssociatedWaveformServiceImpl extends ServiceImpl> sampleWaveformsDetailsPage(PageRequest pageRequest, Integer sampleId,Integer type) { + IPage> page = new Page<>(pageRequest.getPageNum(), pageRequest.getPageSize()); + return this.waveformEventResultMapper.page(page,sampleId,type); + } + /** * 样品id不能为空 * @@ -189,4 +204,17 @@ public class AssociatedWaveformServiceImpl extends ServiceImpl excelOriginData(Integer sampleId, Integer type) { + return this.waveformEventResultMapper.excelOriginData(sampleId,type); + } } diff --git a/jeecg-module-transport/src/main/java/org/jeecg/task/waveformtask/AssociatedWaveformTaskExec.java b/jeecg-module-transport/src/main/java/org/jeecg/task/waveformtask/AssociatedWaveformTaskExec.java index a77f885..4c945d4 100644 --- a/jeecg-module-transport/src/main/java/org/jeecg/task/waveformtask/AssociatedWaveformTaskExec.java +++ b/jeecg-module-transport/src/main/java/org/jeecg/task/waveformtask/AssociatedWaveformTaskExec.java @@ -2,13 +2,14 @@ package org.jeecg.task.waveformtask; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.time.StopWatch; import org.apache.logging.log4j.util.Strings; import org.jeecg.common.constant.enums.*; import org.jeecg.common.properties.DataFusionProperties; import org.jeecg.config.datasource.DataSourceSwitcher; -import org.jeecg.modules.base.entity.Origin; +import org.jeecg.modules.base.entity.copsdb.Origin; import org.jeecg.modules.base.entity.rnauto.GardsWaveformEvent; import org.jeecg.modules.base.entity.rnauto.GardsWaveformEventResult; import org.jeecg.modules.base.mapper.GardsWaveformEventMapper; @@ -29,7 +30,6 @@ import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; import java.util.zip.GZIPInputStream; @@ -86,6 +86,8 @@ public class AssociatedWaveformTaskExec extends Thread{ StopWatch stopWatch = new StopWatch(); stopWatch.start(); try{ + //清除历史关联结果 + this.cleanHistoryResult(this.sampleId); //修改任务状态为执行中 this.updateTaskStatus(this.sampleId, AssociatedWaveformTaskEnum.IN_PROCESS.getValue()); //检查srs文件是否存在 @@ -178,8 +180,7 @@ public class AssociatedWaveformTaskExec extends Thread{ .collect(Collectors.groupingBy(record -> new AbstractMap.SimpleImmutableEntry<>(record.getLon(), record.getLat()) )); - Set events = this.queryWaveform(origins, srsRecordsGroup, gridSize); - return events; + return this.queryWaveform(origins, srsRecordsGroup, gridSize); } /** @@ -279,19 +280,21 @@ public class AssociatedWaveformTaskExec extends Thread{ Set result = ConcurrentHashMap.newKeySet(); if (CollUtil.isNotEmpty(srsRecordsGroup) && CollUtil.isNotEmpty(origins)){ srsRecordsGroup.forEach((key,srsRecords)->{ - double leftLon = Math.floor(key.getKey() / gridSize) * gridSize; - double bottomLat = Math.floor(key.getValue() / gridSize) * gridSize; - double rightLon = leftLon + gridSize; - double topLat = bottomLat + gridSize; - //统计srs中每条记录内关联的波形数据 - srsRecords.parallelStream().forEach(record->{ - Set orids = origins.stream() - .filter(origin ->origin.getLon() >= leftLon && origin.getLon() < rightLon && - origin.getLat() >= bottomLat && origin.getLat() < topLat && - origin.getTime() >= record.getStartSecond() && origin.getTime() <= record.getEndSecond()) - .map(Origin::getOrid).collect(Collectors.toSet()); + double leftLon = Math.floor(key.getKey() / gridSize) * gridSize; + double bottomLat = Math.floor(key.getValue() / gridSize) * gridSize; + double rightLon = leftLon + gridSize; + double topLat = bottomLat + gridSize; + //统计srs中每条记录内关联的波形数据 + srsRecords.parallelStream().forEach(record->{ + Set orids = origins.stream() + .filter(origin ->origin.getLon() >= leftLon && origin.getLon() < rightLon && + origin.getLat() >= bottomLat && origin.getLat() < topLat && + origin.getTime() >= record.getStartSecond() && origin.getTime() <= record.getEndSecond()) + .map(Origin::getOrid).collect(Collectors.toSet()); + if (CollUtil.isNotEmpty(orids)){ result.addAll(orids); - }); + } + }); }); return result; } @@ -312,6 +315,9 @@ public class AssociatedWaveformTaskExec extends Thread{ waveformEvent.setModdate(new Date()); this.waveformEventMapper.updateById(waveformEvent); this.transactionManager.commit(transactionStatus); + }catch (Exception e){ + this.transactionManager.rollback(transactionStatus); + log.error(e.getMessage(),e); }finally { DataSourceSwitcher.clearDataSource(); } @@ -331,6 +337,29 @@ public class AssociatedWaveformTaskExec extends Thread{ waveformEvent.setModdate(new Date()); this.waveformEventMapper.updateById(waveformEvent); this.transactionManager.commit(transactionStatus); + }catch (Exception e){ + this.transactionManager.rollback(transactionStatus); + log.error(e.getMessage(),e); + }finally { + DataSourceSwitcher.clearDataSource(); + } + } + + /** + * 清除历史关联结果 + * @param sampleId + */ + private void cleanHistoryResult(Integer sampleId) { + DataSourceSwitcher.switchToOracle(); + final TransactionStatus transactionStatus = this.transactionManager.getTransaction(this.transactionDefinition); + try { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(GardsWaveformEventResult::getSampleId, sampleId); + this.waveformEventResultMapper.delete(queryWrapper); + this.transactionManager.commit(transactionStatus); + }catch (Exception e){ + this.transactionManager.rollback(transactionStatus); + log.error(e.getMessage(),e); }finally { DataSourceSwitcher.clearDataSource(); }