diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/UndealHandleManager.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/UndealHandleManager.java index 9d61875f..e8446135 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/UndealHandleManager.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/UndealHandleManager.java @@ -69,7 +69,7 @@ public class UndealHandleManager{ //ftp解析失败文件存储路径 final String rootPath = spectrumServiceQuotes.getSpectrumPathProperties().getRootPath(); final String filePath = spectrumServiceQuotes.getSpectrumPathProperties().getUndealPath(); - List spectrumFiles = FileOperation.getFiles(rootPath+ filePath,taskProperties.getUndealDirReceiveNum()); + List spectrumFiles = FileOperation.getFiles(rootPath+ filePath); if(!CollectionUtils.isEmpty(spectrumFiles)){ CountDownLatch taskLatch = new CountDownLatch(spectrumFiles.size()); for(File spectrumFile : spectrumFiles){ diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/file/FileOperation.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/file/FileOperation.java index fc204d66..230e7314 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/file/FileOperation.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/file/FileOperation.java @@ -69,6 +69,50 @@ public class FileOperation { return sortList.stream().limit(num).collect(Collectors.toList()); } + /** + * 获取指定路径下指定数量的文件 + * @param path + * @return + * @throws FileNotFoundException + */ + public static List getFiles(String path) throws FileNotFoundException { + File file = new File(path); + if (!file.exists()){ + throw new FileNotFoundException(path+" directory does not exist"); + } + if (!file.isDirectory()){ + throw new FileNotFoundException(path+" file is not a directory"); + } + if(FileUtil.isDirEmpty(file)){ + return Collections.emptyList(); + } + if(CollectionUtils.isEmpty(dataTypeMap)){ + final DataType[] dataTypes = DataType.values(); + for (DataType dataType : dataTypes){ + dataTypeMap.put(dataType.getSuffix(),"default"); + } + } + File[] spectrumFiles = file.listFiles(new FileFilter() { + @Override + public boolean accept(File file) { + final String suffix = file.getName().substring(file.getName().lastIndexOf(StringConstant.DOT)); + if (dataTypeMap.containsKey(suffix)){ + return true; + } + return false; + } + }); + List sortList = new ArrayList<>(); + for (File spectrumFile : spectrumFiles){ + if(spectrumFile.getName().contains(BlockConstant.sampleFlag)){ + sortList.add(spectrumFile); + }else { + sortList.add(0,spectrumFile); + } + } + return sortList.stream().collect(Collectors.toList()); + } + /** * 保存或追加写入文件 * @param filePath diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/StationOperationController.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/StationOperationController.java index 09173cd6..2517d2c2 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/StationOperationController.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/StationOperationController.java @@ -60,8 +60,8 @@ public class StationOperationController { @GetMapping("getDataReceivingStatus") @ApiOperation(value = "查询台站监测数据信息", notes = "查询台站监测数据信息") - public Result getDataReceivingStatus(String userId, String oneStationId){ - return stationOperationService.getDataReceivingStatus(userId, oneStationId); + public Result getDataReceivingStatus(String userId, Double cacheTime, String oneStationId){ + return stationOperationService.getDataReceivingStatus(userId, cacheTime, oneStationId); } diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/SysUserFocusStationController.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/SysUserFocusStationController.java index 4d04374e..57e0c33a 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/SysUserFocusStationController.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/controller/SysUserFocusStationController.java @@ -38,6 +38,12 @@ public class SysUserFocusStationController { return sysUserFocusStationService.deleteById(stationId); } + @DeleteMapping("deleteUserCache") + @ApiOperation(value = "删除用户的临时缓存", notes = "删除用户的临时缓存") + public Result deleteUserCache(String userId) { + return sysUserFocusStationService.deleteUserCache(userId); + } + @GetMapping("findUserFocusByUserId") @ApiOperation(value = "根据用户id查询用户的缓存配置信息及关注台站信息", notes = "根据用户id查询用户的缓存配置信息及关注台站信息") public Result findUserFocusByUserId(String userId){ diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/entity/SysUserFocusStationStation.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/entity/SysUserFocusStationStation.java index c1522232..6ec9e37e 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/entity/SysUserFocusStationStation.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/entity/SysUserFocusStationStation.java @@ -39,4 +39,10 @@ public class SysUserFocusStationStation extends SysUserFocusStation { @TableField(exist = false) private String stationCode; + /** + * 是否是排班任务台站 + */ + @TableField(exist = false) + private boolean isScheduling; + } diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/mapper/SysTaskStationMapper.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/mapper/SysTaskStationMapper.java new file mode 100644 index 00000000..54776be2 --- /dev/null +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/mapper/SysTaskStationMapper.java @@ -0,0 +1,12 @@ +package org.jeecg.modules.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.base.entity.postgre.SysTaskStation; + +import java.util.List; + +public interface SysTaskStationMapper extends BaseMapper { + + List findTaskStation(String userId, String nowDate); + +} diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/mapper/xml/SysTaskStationMapper.xml b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/mapper/xml/SysTaskStationMapper.xml new file mode 100644 index 00000000..5aabd4df --- /dev/null +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/mapper/xml/SysTaskStationMapper.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/IStationOperationService.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/IStationOperationService.java index 058df0d8..4b5d80a6 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/IStationOperationService.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/IStationOperationService.java @@ -49,7 +49,7 @@ public interface IStationOperationService extends IService { * @param oneStationId * @return */ - Result getDataReceivingStatus(String userId, String oneStationId); + Result getDataReceivingStatus(String userId, Double cacheTime, String oneStationId); /** * 获取台站数据的提供率及有效率 diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/ISysUserFocusStationService.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/ISysUserFocusStationService.java index 309f9ea3..bf8195ae 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/ISysUserFocusStationService.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/ISysUserFocusStationService.java @@ -27,6 +27,13 @@ public interface ISysUserFocusStationService extends IService stationDataMap = (Map) redisUtil.get("stationDataMap"); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(StationReceivingConfig::getUserId, userId); - StationReceivingConfigStation configStation = stationReceivingConfigMapper.selectOne(queryWrapper); - Double cacheTime = configStation.getCacheTime(); + //调用接口获取数据库中对应缓存配置信息默认值 + if (Objects.isNull(cacheTime) || cacheTime <= 0) { + List> cacheList = cacheTimeService.findCacheTime(); + for (int i=0; i< cacheList.size(); i++){ + if ( StringUtils.isNotBlank(cacheList.get(i).get(CacheName.cacheTime)) ){ + cacheTime = Double.valueOf(cacheList.get(i).get(CacheName.cacheTime)); + } + } + } //获取当前日期时间 作为结束查询时间 LocalDateTime endDate = LocalDateTime.now(); //根据缓存日期 得到开始查询时间 @@ -421,33 +429,45 @@ public class StationOperationServiceImpl extends ServiceImpl stationIds = new LinkedList<>(); //根据用户id查询出当前用户关注的台站信息 LambdaQueryWrapper userFocusStationQueryWrapper = new LambdaQueryWrapper<>(); userFocusStationQueryWrapper.eq(SysUserFocusStationStation::getUserId, userId); List userFocusStations = sysUserFocusStationMapper.selectList(userFocusStationQueryWrapper); - List stationIds = userFocusStations.stream().map(SysUserFocusStation::getStationId).collect(Collectors.toList()); - for (String stationId:stationIds) { - StationData stationData = stationDataMap.get(stationId); - if (Objects.nonNull(stationData)) { - //读取探测器的数据集合 - Map>> detectors = stationData.getDetectors(); - //遍历探测器的集合 - for (Map.Entry>> detector:detectors.entrySet()) { - //获取探测器对应的数组 - List> detectorValue = detector.getValue(); - //遍历探测器数组 - for (Map detectorDataMap:detectorValue) { - for (String key :detectorDataMap.keySet()) { - DetectorData detectorData = detectorDataMap.get(key); - //通过流过滤出数据的开始时间戳在用户统计的开始时间戳之后的数据 - detectorData.getDataList().stream().filter(item -> item.getBeginTime() >= startMill).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(userFocusStations)) { + List focusStationIds = userFocusStations.stream().map(SysUserFocusStation::getStationId).collect(Collectors.toList()); + stationIds.addAll(focusStationIds); + } + String nowDate = DateUtils.now(); + List taskStationIds = taskStationMapper.findTaskStation(userId, nowDate); + if (CollectionUtils.isNotEmpty(taskStationIds)) { + stationIds.addAll(taskStationIds); + } + stationIds = stationIds.stream().distinct().collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(stationIds)) { + for (String stationId:stationIds) { + StationData stationData = stationDataMap.get(stationId); + if (Objects.nonNull(stationData)) { + //读取探测器的数据集合 + Map>> detectors = stationData.getDetectors(); + //遍历探测器的集合 + for (Map.Entry>> detector:detectors.entrySet()) { + //获取探测器对应的数组 + List> detectorValue = detector.getValue(); + //遍历探测器数组 + for (Map detectorDataMap:detectorValue) { + for (String key :detectorDataMap.keySet()) { + DetectorData detectorData = detectorDataMap.get(key); + //通过流过滤出数据的开始时间戳在用户统计的开始时间戳之后的数据 + detectorData.getDataList().stream().filter(item -> item.getBeginTime() >= startMill).collect(Collectors.toList()); + } } } + stationDataList.add(stationData); } - stationDataList.add(stationData); } } } diff --git a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/impl/SysUserFocusStationServiceImpl.java b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/impl/SysUserFocusStationServiceImpl.java index 7bd89c5b..7c10d296 100644 --- a/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/impl/SysUserFocusStationServiceImpl.java +++ b/jeecg-module-station-operation/src/main/java/org/jeecg/modules/service/impl/SysUserFocusStationServiceImpl.java @@ -8,7 +8,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.jeecg.common.CacheName; import org.jeecg.common.StationTypeUtil; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.config.mqtoken.UserTokenContext; import org.jeecg.common.system.util.JwtUtil; +import org.jeecg.common.util.DateUtils; import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.SpringContextUtils; import org.jeecg.modules.base.entity.configuration.GardsStations; @@ -18,9 +20,11 @@ import org.jeecg.modules.entity.StationReceivingConfigStation; import org.jeecg.modules.entity.SysUserFocusStationStation; import org.jeecg.modules.entity.data.UserFocusStation; import org.jeecg.modules.mapper.StationReceivingConfigMapper; +import org.jeecg.modules.mapper.SysTaskStationMapper; import org.jeecg.modules.mapper.SysUserFocusStationMapper; import org.jeecg.modules.service.ICacheTimeService; import org.jeecg.modules.service.ISysUserFocusStationService; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -30,6 +34,8 @@ import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; +import static org.jeecg.common.util.TokenUtils.getTempToken; + @Service("sysUserFocusStationService") public class SysUserFocusStationServiceImpl extends ServiceImpl implements ISysUserFocusStationService { @@ -38,7 +44,7 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl stationInfoMap = (HashMap) redisUtil.get("stationInfoMap"); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(SysUserFocusStationStation::getUserId, sysUser.getId()); - List sysUserFocusStations = this.baseMapper.selectList(queryWrapper); - if (CollectionUtils.isNotEmpty(sysUserFocusStations)){ - sysUserFocusStations.stream().forEach(item->{ - if (CollectionUtils.isNotEmpty(stationInfoMap)){ - if (Objects.nonNull(stationInfoMap.get(item.getStationId()))){ - GardsStations stations = (GardsStations) stationInfoMap.get(item.getStationId()); - String stationType = stationTypeUtil.getStationType(stations.getStationId()); - item.setStationType(stationType); - item.setStationCode(stations.getStationCode()); - item.setLon(stations.getLon()); - item.setLat(stations.getLat()); - item.setStatus(stations.getStatus()); - item.setAltitude(Objects.isNull(stations.getElevation())?"--":stations.getElevation()+"m"); - } - } - }); - return sysUserFocusStations; - } - return Collections.emptyList(); + //调用公用方法查询关注台站信息 + List resultList = findUserFocusStations(sysUser.getId()); + return resultList; } @Override @@ -91,28 +77,22 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl receivingConfigQueryWrapper = new LambdaQueryWrapper<>(); - receivingConfigQueryWrapper.eq(StationReceivingConfigStation::getUserId, sysUser.getId()); - StationReceivingConfigStation receivingConfig = stationReceivingConfigMapper.selectOne(receivingConfigQueryWrapper); - //如果没有对应的用户缓存信息 则进行新增 - if (Objects.isNull(receivingConfig)){ - receivingConfig = new StationReceivingConfigStation(); - Long id = IdWorker.getId(); - receivingConfig.setId(id.toString()); - receivingConfig.setUserId(sysUser.getId()); - receivingConfig.setCacheTime(userFocusStation.getCacheTime()); - receivingConfig.setScaleInterval(userFocusStation.getScaleInterval()); - receivingConfig.setTimelineLength(userFocusStation.getTimelineLength()); - receivingConfig.setUpdateIntervalTime(userFocusStation.getUpdateIntervalTime()); - stationReceivingConfigMapper.insert(receivingConfig); - }else { - receivingConfig.setCacheTime(userFocusStation.getCacheTime()); - receivingConfig.setScaleInterval(userFocusStation.getScaleInterval()); - receivingConfig.setTimelineLength(userFocusStation.getTimelineLength()); - receivingConfig.setUpdateIntervalTime(userFocusStation.getUpdateIntervalTime()); - stationReceivingConfigMapper.updateById(receivingConfig); + //判断是否包含最大缓存时间 + if (redisUtil.hasKey("maxCacheTime")) { + //最大的缓存时间 + String maxCacheTime = (String) redisUtil.get("maxCacheTime"); + //用户临时记录的缓存时间 + Double cacheTime = userFocusStation.getCacheTime(); + //如果用户临时记录的缓存时间大于最大缓存时间 + if (cacheTime > Double.valueOf(maxCacheTime)) { + redisUtil.set("maxCacheTime", String.valueOf(cacheTime)); + } } + //记录当前用户的临时数据 + redisUtil.set("cacheTime:"+sysUser.getId(), userFocusStation.getCacheTime()); + redisUtil.set("scaleInterval:"+sysUser.getId(), userFocusStation.getScaleInterval()); + redisUtil.set("timelineLength:"+sysUser.getId(), userFocusStation.getTimelineLength()); + redisUtil.set("updateIntervalTime:"+sysUser.getId(), userFocusStation.getUpdateIntervalTime()); } if (CollectionUtils.isNotEmpty(userFocusStation.getStationIds())){ //根据用户id查询出对应的用户关注台站信息 删除用户的所有关注台站信息并重新保存 @@ -135,9 +115,12 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl0) { this.saveBatch(focusStationStationList); } + } else { + //根据用户id查询出对应的用户关注台站信息 删除用户的所有关注台站信息并重新保存 + LambdaQueryWrapper userFocusStationQueryWrapper = new LambdaQueryWrapper<>(); + userFocusStationQueryWrapper.eq(SysUserFocusStationStation::getUserId, sysUser.getId()); + this.baseMapper.delete(userFocusStationQueryWrapper); } - //重新保存后重新缓存 - cacheStationReceivingConfig(); result.success("Save successfully"); return result; } @@ -164,16 +147,28 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(StationReceivingConfigStation::getUserId, userId); - StationReceivingConfigStation receivingConfig = stationReceivingConfigMapper.selectOne(queryWrapper); //如果用户对应的缓存配置信息为空时,查询字典表中的默认值 - if (Objects.isNull(receivingConfig)){ - receivingConfig = new StationReceivingConfigStation(); + StationReceivingConfigStation receivingConfig = new StationReceivingConfigStation(); + //判断用户是否有缓存数据记录 + if (redisUtil.hasKey("cacheTime:"+userId)) { + String cacheTime = String.valueOf(redisUtil.get("cacheTime:"+userId)); + receivingConfig.setCacheTime(Double.valueOf(cacheTime)); + String scaleInterval = String.valueOf(redisUtil.get("scaleInterval:"+userId)); + receivingConfig.setScaleInterval(Double.valueOf(scaleInterval)); + String timelineLength = String.valueOf(redisUtil.get("timelineLength:"+userId)); + receivingConfig.setTimelineLength(Double.valueOf(timelineLength)); + String updateIntervalTime = String.valueOf(redisUtil.get("updateIntervalTime:"+userId)); + receivingConfig.setUpdateIntervalTime(Double.valueOf(updateIntervalTime)); + } else { //调用接口获取数据库中对应缓存配置信息默认值 List> cacheList = cacheTimeService.findCacheTime(); for (int i=0; i< cacheList.size(); i++){ @@ -196,10 +191,10 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl focusStationQueryWrapper = new LambdaQueryWrapper<>(); focusStationQueryWrapper.eq(SysUserFocusStationStation::getUserId, userId); List sysUserFocusStations = this.baseMapper.selectList(focusStationQueryWrapper); - if (Objects.nonNull(sysUserFocusStations)){ + if (CollectionUtils.isNotEmpty(sysUserFocusStations)){ receivingConfig.setSysUserFocusStations(sysUserFocusStations); } else { - receivingConfig.setSysUserFocusStations(new ArrayList<>()); + receivingConfig.setSysUserFocusStations(Collections.emptyList()); } result.setSuccess(true); result.setResult(receivingConfig); @@ -208,9 +203,110 @@ public class SysUserFocusStationServiceImpl extends ServiceImpl> cacheList = cacheTimeService.findCacheTime(); + for (int i=0; i< cacheList.size(); i++){ + if ( StringUtils.isNotBlank(cacheList.get(i).get(CacheName.cacheTime)) ){ + maxCacheTime = cacheList.get(i).get(CacheName.cacheTime); + } + } + if (StringUtils.isNotBlank(maxCacheTime)) { + redisUtil.set("maxCacheTime", maxCacheTime); + } + UserTokenContext.remove(); + } + + private List findUserFocusStations(String userId) { + List resultList = new LinkedList<>(); + //查询全部台站信息 + HashMap stationInfoMap = (HashMap) redisUtil.get("stationInfoMap"); + //根据用户id查询关注台站信息 + LambdaQueryWrapper focusStationQueryWrapper = new LambdaQueryWrapper<>(); + focusStationQueryWrapper.eq(SysUserFocusStationStation::getUserId, userId); + List sysUserFocusStations = this.baseMapper.selectList(focusStationQueryWrapper); + //根据用户id查询排班任务的台站信息 + //查询用户的排班任务 + String nowDate = DateUtils.now(); + List taskStation = taskStationMapper.findTaskStation(userId, nowDate); + //判断用户是否有关注台站列表 + if (CollectionUtils.isNotEmpty(sysUserFocusStations)){ + //遍历关注台站列表 + for (SysUserFocusStationStation item:sysUserFocusStations) { + //判断台站map是否为空 + if (CollectionUtils.isNotEmpty(stationInfoMap)){ + //判断台站map是否包含当前台站id + if (Objects.nonNull(stationInfoMap.get(item.getStationId()))){ + //获取台站信息 + GardsStations stations = (GardsStations) stationInfoMap.get(item.getStationId()); + //获取台站类型 + String stationType = stationTypeUtil.getStationType(stations.getStationId()); + item.setStationType(stationType); + item.setStationCode(stations.getStationCode()); + item.setLon(stations.getLon()); + item.setLat(stations.getLat()); + item.setStatus(stations.getStatus()); + item.setAltitude(Objects.isNull(stations.getElevation())?"--":stations.getElevation()+"m"); + item.setScheduling(false); + resultList.add(item); + } + } + } + } + if (CollectionUtils.isNotEmpty(taskStation)) { + //遍历排班任务id + for (String stationId:taskStation) { + //台站map不为空 + if (CollectionUtils.isNotEmpty(stationInfoMap)){ + if (Objects.nonNull(stationInfoMap.get(stationId))){ + SysUserFocusStationStation item = new SysUserFocusStationStation(); + //获取台站信息 + GardsStations stations = (GardsStations) stationInfoMap.get(stationId); + //获取台站类型 + String stationType = stationTypeUtil.getStationType(stations.getStationId()); + //将台站信息复制给关注台站实体类 + BeanUtils.copyProperties(stations, item); + item.setStationId(stationId); + item.setUserId(userId); + item.setStationType(stationType); + item.setStationCode(stations.getStationCode()); + item.setLon(stations.getLon()); + item.setLat(stations.getLat()); + item.setStatus(stations.getStatus()); + item.setAltitude(Objects.isNull(stations.getElevation())?"--":stations.getElevation()+"m"); + item.setScheduling(true); + resultList.add(item); + } + } + } + } + List removeIndex = new LinkedList<>(); + for (int i=0; i