1.修改波形事件关联功能,查看数据详情功能和导出功能
This commit is contained in:
panbaolin 2026-01-13 11:44:29 +08:00
parent 760927900a
commit 6a5c3f1fc0
10 changed files with 221 additions and 24 deletions

View File

@ -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.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.Date; import java.util.Date;
@Data @Data
@ -10,18 +12,26 @@ import java.util.Date;
public class Origin { public class Origin {
@TableField("LAT") @TableField("LAT")
@Excel(name = "纬度", width = 20,height = 20,orderNum="2")
private Double lat; private Double lat;
@TableField("LON") @TableField("LON")
@Excel(name = "经度", width = 20,height = 20,orderNum="1")
private Double lon; private Double lon;
@TableField("DEPTH") @TableField("DEPTH")
@Excel(name = "深度", width = 20,height = 20,orderNum="3")
private Double depth; private Double depth;
@TableField("TIME") @TableField("TIME")
private Double time; private Double time;
@TableField(exist = false)
@Excel(name = "时间", width = 30,height = 20,orderNum="4")
private String datetime;
@TableField("ORID") @TableField("ORID")
@Excel(name = "ORID", width = 20,height = 20,orderNum="0")
private Integer orid; private Integer orid;
@TableField("EVID") @TableField("EVID")

View File

@ -5,8 +5,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.base.entity.rnauto.GardsWaveformEvent; import org.jeecg.modules.base.entity.rnauto.GardsWaveformEvent;
import org.jeecg.modules.base.vo.GardsSampleInfoVO; import org.jeecg.modules.base.vo.GardsSampleInfoVO;
import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
@ -34,6 +32,4 @@ public interface GardsWaveformEventMapper extends BaseMapper<GardsWaveformEvent>
* @return * @return
*/ */
GardsSampleInfoVO selectSampleInfoBySampleId(@Param("sampleId") Integer sampleId); GardsSampleInfoVO selectSampleInfoBySampleId(@Param("sampleId") Integer sampleId);
} }

View File

@ -1,8 +1,29 @@
package org.jeecg.modules.base.mapper; package org.jeecg.modules.base.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; 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 org.jeecg.modules.base.entity.rnauto.GardsWaveformEventResult;
import java.util.List;
import java.util.Map;
public interface GardsWaveformEventResultMapper extends BaseMapper<GardsWaveformEventResult> { public interface GardsWaveformEventResultMapper extends BaseMapper<GardsWaveformEventResult> {
/**
* 分页查询样品关联的波形数据详情
* @param page
* @param sampleId
* @return
*/
IPage<Map<String, Object>> page(IPage<Map<String, Object>> page,@Param("sampleId") Integer sampleId,@Param("type") Integer type);
/**
* 导出关联结果数据
* @param sampleId
* @param type
* @return
*/
List<Origin> excelOriginData(@Param("sampleId") Integer sampleId, @Param("type") Integer type);
} }

View File

@ -2,7 +2,7 @@ package org.jeecg.modules.base.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param; 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; import java.util.List;

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.base.mapper.GardsWaveformEventResultMapper">
<select id="page" resultType="java.util.Map">
SELECT
n.ORID as "orid",
n.LON as "lon",
n.LAT as "lat",
n.DEPTH as "depth",
TO_CHAR(
TO_DATE('1970-01-01', 'YYYY-MM-DD') + (n.TIME/86400),
'YYYY-MM-DD HH24:MI:SS'
) AS "time"
FROM
RNAUTO.GARDS_WAVEFORM_EVENT_RESULT t
INNER JOIN COPSDB.ORIGIN n ON t.ORID = n.ORID
WHERE
t.SAMPLE_ID = #{sampleId}
AND t.TYPE = #{type}
ORDER BY n.TIME desc
</select>
<select id="excelOriginData" resultType="org.jeecg.modules.base.entity.copsdb.Origin">
SELECT
n.ORID as "orid",
n.LON as "lon",
n.LAT as "lat",
n.DEPTH as "depth",
TO_CHAR(
TO_DATE('1970-01-01', 'YYYY-MM-DD') + (n.TIME/86400),
'YYYY-MM-DD HH24:MI:SS'
) AS "datetime"
FROM
RNAUTO.GARDS_WAVEFORM_EVENT_RESULT t
INNER JOIN COPSDB.ORIGIN n ON t.ORID = n.ORID
WHERE
t.SAMPLE_ID = #{sampleId}
AND t.TYPE = #{type}
ORDER BY n.TIME desc
</select>
</mapper>

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.base.mapper.OriginMapper"> <mapper namespace="org.jeecg.modules.base.mapper.OriginMapper">
<select id="selectOriginByTime" resultType="org.jeecg.modules.base.entity.Origin"> <select id="selectOriginByTime" resultType="org.jeecg.modules.base.entity.copsdb.Origin">
SELECT SELECT
t.LAT as "lat", t.LAT as "lat",
t.LON as "lon", t.LON as "lon",

View File

@ -6,15 +6,24 @@ import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.constant.enums.WaveformEventResultTypeEnum;
import org.jeecg.common.system.query.PageRequest; import org.jeecg.common.system.query.PageRequest;
import org.jeecg.modules.base.entity.copsdb.Origin;
import org.jeecg.service.AssociatedWaveformService; 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.format.annotation.DateTimeFormat;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; 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.time.LocalDate;
import java.util.List;
/** /**
* 数据融合-关联波形 * 数据融合-关联波形
@ -36,6 +45,15 @@ public class AssociatedWaveformController {
return Result.OK(associatedWaveformService.page(pageRequest,sampleId,status,sampleType,startDate,endDate)); 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 = "执行关联") @AutoLog(value = "执行关联")
@Operation(summary = "执行关联") @Operation(summary = "执行关联")
@PutMapping("execAssociated") @PutMapping("execAssociated")
@ -58,4 +76,36 @@ public class AssociatedWaveformController {
associatedWaveformService.viewRRR(sampleId,response); 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<Origin> 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());
}
} }

View File

@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import org.jeecg.common.system.query.PageRequest; 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.entity.rnauto.GardsWaveformEvent;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -25,6 +27,15 @@ public interface AssociatedWaveformService extends IService<GardsWaveformEvent>
*/ */
IPage<Map<String,Object>> page(PageRequest pageRequest, Integer sampleId, Integer status, String sampleType, LocalDate startDate, LocalDate endDate); IPage<Map<String,Object>> page(PageRequest pageRequest, Integer sampleId, Integer status, String sampleType, LocalDate startDate, LocalDate endDate);
/**
* 查询样品关联的波形详情数据
* @param pageRequest
* @param sampleId
* @param type
* @return
*/
IPage<Map<String,Object>> sampleWaveformsDetailsPage(PageRequest pageRequest, Integer sampleId,Integer type);
/** /**
* 样品id不能为空 * 样品id不能为空
* @param sampleId * @param sampleId
@ -42,4 +53,13 @@ public interface AssociatedWaveformService extends IService<GardsWaveformEvent>
* @param sampleId * @param sampleId
*/ */
void viewRRR(Integer sampleId, HttpServletResponse response); void viewRRR(Integer sampleId, HttpServletResponse response);
/**
* 导出关联结果数据
* @param sampleId
* @param type
* @return
*/
List<Origin> excelOriginData(Integer sampleId,Integer type);
} }

View File

@ -12,6 +12,7 @@ import lombok.RequiredArgsConstructor;
import org.jeecg.common.properties.ArmdReportProperties; import org.jeecg.common.properties.ArmdReportProperties;
import org.jeecg.common.properties.DataFusionProperties; import org.jeecg.common.properties.DataFusionProperties;
import org.jeecg.common.system.query.PageRequest; 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.entity.rnauto.GardsWaveformEvent;
import org.jeecg.modules.base.mapper.GardsAnalysesMapper; import org.jeecg.modules.base.mapper.GardsAnalysesMapper;
import org.jeecg.modules.base.mapper.GardsWaveformEventMapper; import org.jeecg.modules.base.mapper.GardsWaveformEventMapper;
@ -29,9 +30,9 @@ import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -74,6 +75,20 @@ public class AssociatedWaveformServiceImpl extends ServiceImpl<GardsWaveformEven
return this.baseMapper.page(page,sampleId,status,sampleType,startTime,endTime); return this.baseMapper.page(page,sampleId,status,sampleType,startTime,endTime);
} }
/**
* 查询样品关联的波形详情数据
* @param pageRequest
* @param sampleId
* @param type
* @return
*/
@DS(value = "ora")
@Override
public IPage<Map<String, Object>> sampleWaveformsDetailsPage(PageRequest pageRequest, Integer sampleId,Integer type) {
IPage<Map<String, Object>> page = new Page<>(pageRequest.getPageNum(), pageRequest.getPageSize());
return this.waveformEventResultMapper.page(page,sampleId,type);
}
/** /**
* 样品id不能为空 * 样品id不能为空
* *
@ -189,4 +204,17 @@ public class AssociatedWaveformServiceImpl extends ServiceImpl<GardsWaveformEven
} }
} }
} }
/**
* 导出关联结果数据
*
* @param sampleId
* @param type
* @return
*/
@DS(value = "ora")
@Override
public List<Origin> excelOriginData(Integer sampleId, Integer type) {
return this.waveformEventResultMapper.excelOriginData(sampleId,type);
}
} }

View File

@ -2,13 +2,14 @@ package org.jeecg.task.waveformtask;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.StopWatch; import org.apache.commons.lang3.time.StopWatch;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.jeecg.common.constant.enums.*; import org.jeecg.common.constant.enums.*;
import org.jeecg.common.properties.DataFusionProperties; import org.jeecg.common.properties.DataFusionProperties;
import org.jeecg.config.datasource.DataSourceSwitcher; 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.GardsWaveformEvent;
import org.jeecg.modules.base.entity.rnauto.GardsWaveformEventResult; import org.jeecg.modules.base.entity.rnauto.GardsWaveformEventResult;
import org.jeecg.modules.base.mapper.GardsWaveformEventMapper; import org.jeecg.modules.base.mapper.GardsWaveformEventMapper;
@ -29,7 +30,6 @@ import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
@ -86,6 +86,8 @@ public class AssociatedWaveformTaskExec extends Thread{
StopWatch stopWatch = new StopWatch(); StopWatch stopWatch = new StopWatch();
stopWatch.start(); stopWatch.start();
try{ try{
//清除历史关联结果
this.cleanHistoryResult(this.sampleId);
//修改任务状态为执行中 //修改任务状态为执行中
this.updateTaskStatus(this.sampleId, AssociatedWaveformTaskEnum.IN_PROCESS.getValue()); this.updateTaskStatus(this.sampleId, AssociatedWaveformTaskEnum.IN_PROCESS.getValue());
//检查srs文件是否存在 //检查srs文件是否存在
@ -178,8 +180,7 @@ public class AssociatedWaveformTaskExec extends Thread{
.collect(Collectors.groupingBy(record -> .collect(Collectors.groupingBy(record ->
new AbstractMap.SimpleImmutableEntry<>(record.getLon(), record.getLat()) new AbstractMap.SimpleImmutableEntry<>(record.getLon(), record.getLat())
)); ));
Set<Integer> events = this.queryWaveform(origins, srsRecordsGroup, gridSize); return this.queryWaveform(origins, srsRecordsGroup, gridSize);
return events;
} }
/** /**
@ -279,19 +280,21 @@ public class AssociatedWaveformTaskExec extends Thread{
Set<Integer> result = ConcurrentHashMap.newKeySet(); Set<Integer> result = ConcurrentHashMap.newKeySet();
if (CollUtil.isNotEmpty(srsRecordsGroup) && CollUtil.isNotEmpty(origins)){ if (CollUtil.isNotEmpty(srsRecordsGroup) && CollUtil.isNotEmpty(origins)){
srsRecordsGroup.forEach((key,srsRecords)->{ srsRecordsGroup.forEach((key,srsRecords)->{
double leftLon = Math.floor(key.getKey() / gridSize) * gridSize; double leftLon = Math.floor(key.getKey() / gridSize) * gridSize;
double bottomLat = Math.floor(key.getValue() / gridSize) * gridSize; double bottomLat = Math.floor(key.getValue() / gridSize) * gridSize;
double rightLon = leftLon + gridSize; double rightLon = leftLon + gridSize;
double topLat = bottomLat + gridSize; double topLat = bottomLat + gridSize;
//统计srs中每条记录内关联的波形数据 //统计srs中每条记录内关联的波形数据
srsRecords.parallelStream().forEach(record->{ srsRecords.parallelStream().forEach(record->{
Set<Integer> orids = origins.stream() Set<Integer> orids = origins.stream()
.filter(origin ->origin.getLon() >= leftLon && origin.getLon() < rightLon && .filter(origin ->origin.getLon() >= leftLon && origin.getLon() < rightLon &&
origin.getLat() >= bottomLat && origin.getLat() < topLat && origin.getLat() >= bottomLat && origin.getLat() < topLat &&
origin.getTime() >= record.getStartSecond() && origin.getTime() <= record.getEndSecond()) origin.getTime() >= record.getStartSecond() && origin.getTime() <= record.getEndSecond())
.map(Origin::getOrid).collect(Collectors.toSet()); .map(Origin::getOrid).collect(Collectors.toSet());
if (CollUtil.isNotEmpty(orids)){
result.addAll(orids); result.addAll(orids);
}); }
});
}); });
return result; return result;
} }
@ -312,6 +315,9 @@ public class AssociatedWaveformTaskExec extends Thread{
waveformEvent.setModdate(new Date()); waveformEvent.setModdate(new Date());
this.waveformEventMapper.updateById(waveformEvent); this.waveformEventMapper.updateById(waveformEvent);
this.transactionManager.commit(transactionStatus); this.transactionManager.commit(transactionStatus);
}catch (Exception e){
this.transactionManager.rollback(transactionStatus);
log.error(e.getMessage(),e);
}finally { }finally {
DataSourceSwitcher.clearDataSource(); DataSourceSwitcher.clearDataSource();
} }
@ -331,6 +337,29 @@ public class AssociatedWaveformTaskExec extends Thread{
waveformEvent.setModdate(new Date()); waveformEvent.setModdate(new Date());
this.waveformEventMapper.updateById(waveformEvent); this.waveformEventMapper.updateById(waveformEvent);
this.transactionManager.commit(transactionStatus); 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<GardsWaveformEventResult> 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 { }finally {
DataSourceSwitcher.clearDataSource(); DataSourceSwitcher.clearDataSource();
} }