diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/controller/DustNoiseDataController.java b/src/main/java/com/zhgd/xmgl/modules/environment/controller/DustNoiseDataController.java index 6663abab0..f76d5c7e1 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/controller/DustNoiseDataController.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/controller/DustNoiseDataController.java @@ -90,7 +90,7 @@ public class DustNoiseDataController { } - @ApiOperation(value = "查询环境设备最新一条实时数据", notes = "查询环境设备最新一条实时数据", httpMethod = "POST") + @ApiOperation(value = "查询今日环境设备最新一条实时数据", notes = "查询今日环境设备最新一条实时数据", httpMethod = "POST") @ApiImplicitParams({ @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String"), @ApiImplicitParam(name = "deviceId", value = "设备编号", dataType = "String", paramType = "body", required = false) diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/controller/RainBigScreenController.java b/src/main/java/com/zhgd/xmgl/modules/environment/controller/RainBigScreenController.java index 64a572a60..00456da2f 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/controller/RainBigScreenController.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/controller/RainBigScreenController.java @@ -86,7 +86,7 @@ public class RainBigScreenController { return Result.success(rainRecordService.queryTodayTrendGroupByHour(param)); } - @ApiOperation(value = "查询最新一条实时数据", notes = "查询最新一条实时数据", httpMethod = "POST") + @ApiOperation(value = "查询今日最新一条实时数据", notes = "查询今日最新一条实时数据", httpMethod = "POST") @ApiImplicitParams({ @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String"), @ApiImplicitParam(name = "devSn", value = "设备sn", paramType = "body", required = true, dataType = "String"), diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/entity/RainDev.java b/src/main/java/com/zhgd/xmgl/modules/environment/entity/RainDev.java index 8d572ed20..ce64c415b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/entity/RainDev.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/entity/RainDev.java @@ -1,6 +1,7 @@ package com.zhgd.xmgl.modules.environment.entity; 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 io.swagger.annotations.ApiModel; @@ -64,12 +65,7 @@ public class RainDev implements Serializable { @Excel(name = "报警推送人,多个逗号分割", width = 15) @ApiModelProperty(value = "报警推送人,多个逗号分割") private java.lang.String alarmPushWorkerId; - /** - * 在线状态(0.离线 1.在线) - */ - @Excel(name = "在线状态(0.离线 1.在线)", width = 15) - @ApiModelProperty(value = "在线状态(0.离线 1.在线)") - private java.lang.Integer online; + /** * 上次上传数据时间 */ @@ -85,4 +81,11 @@ public class RainDev implements Serializable { */ @ApiModelProperty(value = "更新时间") private java.util.Date updateDate; + /** + * 在线状态(0.离线 1.在线) + */ + @Excel(name = "在线状态(0.离线 1.在线)", width = 15) + @ApiModelProperty(value = "在线状态(0.离线 1.在线)") + @TableField(exist = false) + private java.lang.Integer online; } diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/mapper/RainDevMapper.java b/src/main/java/com/zhgd/xmgl/modules/environment/mapper/RainDevMapper.java index b57fb53ff..f47676fd2 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/mapper/RainDevMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/mapper/RainDevMapper.java @@ -23,4 +23,6 @@ public interface RainDevMapper extends BaseMapper { IPage queryList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); List queryList( @Param(Constants.WRAPPER)QueryWrapper queryWrapper); + + RainDev queryById(String id); } diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/mapper/xml/DustNoiseDataMapper.xml b/src/main/java/com/zhgd/xmgl/modules/environment/mapper/xml/DustNoiseDataMapper.xml index 6890dca7c..0995886b3 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/mapper/xml/DustNoiseDataMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/environment/mapper/xml/DustNoiseDataMapper.xml @@ -75,6 +75,7 @@ and device_id = #{deviceId} + and upload_date >= CONCAT(DATE_FORMAT(now(), '%Y-%m-%d'), ' 00:00:00') ORDER BY upload_date desc limit 1 diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/mapper/xml/RainDevMapper.xml b/src/main/java/com/zhgd/xmgl/modules/environment/mapper/xml/RainDevMapper.xml index 4ab32eecf..e2fa79985 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/mapper/xml/RainDevMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/environment/mapper/xml/RainDevMapper.xml @@ -3,8 +3,16 @@ + + diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/DustNoiseDataServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/DustNoiseDataServiceImpl.java index e022b3e5c..53e12bf11 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/DustNoiseDataServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/DustNoiseDataServiceImpl.java @@ -1,6 +1,5 @@ package com.zhgd.xmgl.modules.environment.service.impl; -import cn.hutool.core.util.NumberUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -16,7 +15,6 @@ import com.zhgd.xmgl.modules.environment.mapper.EnvironmentDevMapper; import com.zhgd.xmgl.modules.environment.mapper.EnvironmentWarningMapper; import com.zhgd.xmgl.modules.environment.service.IDustNoiseDataService; import com.zhgd.xmgl.modules.environment.service.IEnvironmentAlarmService; -import com.zhgd.xmgl.modules.sprayrt.service.ISprayRtDevService; import com.zhgd.xmgl.util.DateUtils; import com.zhgd.xmgl.util.MessageUtil; import com.zhgd.xmgl.util.WindDirectionUtils; @@ -27,7 +25,10 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @@ -73,32 +74,9 @@ public class DustNoiseDataServiceImpl extends ServiceImpl map) { - DustNoiseData noiseData = null; - - if (map.get("deviceId") == null) { - DustNoiseData nd = dustNoiseDataMapper.getRealTimeDustNoiseData(map); - if (nd != null) { - List noiseDataList = Arrays.asList(nd); - for (DustNoiseData dustNoiseData : noiseDataList) { - DustNoiseData dataBuilder = dataBuilder(dustNoiseData); - if (noiseData == null) { - noiseData = dataBuilder; - continue; - } - noiseData.setPm25(NumberUtil.div(NumberUtil.add(noiseData.getPm25(), dataBuilder.getPm25()), 2)); - noiseData.setPm10(NumberUtil.div(NumberUtil.add(noiseData.getPm10(), dataBuilder.getPm10()), 2)); - noiseData.setNoise(NumberUtil.div(NumberUtil.add(noiseData.getNoise(), dataBuilder.getNoise()), 2)); - noiseData.setTemperature(NumberUtil.div(NumberUtil.add(noiseData.getTemperature(), dataBuilder.getTemperature()), 2)); - noiseData.setHumidity(NumberUtil.div(NumberUtil.add(noiseData.getHumidity(), dataBuilder.getHumidity()), 2)); - noiseData.setWindspeed(NumberUtil.div(NumberUtil.add(noiseData.getWindspeed(), dataBuilder.getWindspeed()), 2)); - noiseData.setPressure(NumberUtil.div(NumberUtil.add(noiseData.getPressure(), dataBuilder.getPressure()), 2)); - } - } - } else { - noiseData = dustNoiseDataMapper.getRealTimeDustNoiseData(map); - if (noiseData != null) { - return dataBuilder(noiseData); - } + DustNoiseData noiseData = dustNoiseDataMapper.getRealTimeDustNoiseData(map); + if (noiseData != null) { + return dataBuilder(noiseData); } return noiseData; } diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/RainDevServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/RainDevServiceImpl.java index 8dcf9dcd3..3b073f820 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/RainDevServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/RainDevServiceImpl.java @@ -96,7 +96,7 @@ public class RainDevServiceImpl extends ServiceImpl impl @Override public RainDev queryById(String id) { - RainDev entity = getById(id); + RainDev entity = baseMapper.queryById(id); if (entity == null) { throw new OpenAlertException("未找到对应实体"); } diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/RainRecordServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/RainRecordServiceImpl.java index 78761429c..cf8e3ab92 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/RainRecordServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/RainRecordServiceImpl.java @@ -87,10 +87,8 @@ public class RainRecordServiceImpl extends ServiceImpl() - .set(RainDev::getOnline, 1) - .eq(RainDev::getDevSn, dev.getDevSn()) - ); + dev.setLastUploadTime(new Date()); + rainDevMapper.updateById(dev); } rainRecord.setId(null); rainRecord.setProjectSn(dev.getProjectSn()); @@ -138,6 +136,7 @@ public class RainRecordServiceImpl extends ServiceImpl() .eq(StrUtil.isNotBlank(devSn), RainRecord::getDevSn, devSn) .eq(StrUtil.isNotBlank(projectSn), RainRecord::getProjectSn, projectSn) + .ge(RainRecord::getRecordTime, DateUtil.formatDateTime(DateUtil.beginOfDay(new Date()))) .last("order by record_time desc limit 1") ); } diff --git a/src/main/java/com/zhgd/xmgl/task/RainDevTask.java b/src/main/java/com/zhgd/xmgl/task/RainDevTask.java deleted file mode 100644 index 7e5f1f165..000000000 --- a/src/main/java/com/zhgd/xmgl/task/RainDevTask.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.zhgd.xmgl.task; - -import cn.hutool.core.date.DateUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.zhgd.xmgl.modules.environment.entity.RainDev; -import com.zhgd.xmgl.modules.environment.mapper.RainDevMapper; -import lombok.extern.slf4j.Slf4j; -import net.javacrumbs.shedlock.core.SchedulerLock; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.util.Date; -import java.util.List; - -@Slf4j -@RestController -@RequestMapping("/xmgl/task") -public class RainDevTask { - @Lazy - @Autowired - private RainDevMapper rainDevMapper; - - /** - * 定时更新设备离线 - */ - @Scheduled(cron = "0 0/1 * * * ?") - @SchedulerLock(name = "updateOffline") - public void updateOffline() { - List rainDevs = rainDevMapper.selectList(new LambdaQueryWrapper() - .le(RainDev::getLastUploadTime, DateUtil.formatDateTime(DateUtil.offsetMinute(new Date(), -30))) - .eq(RainDev::getOnline, 1) - ); - for (RainDev dev : rainDevs) { - rainDevMapper.selectOne(new LambdaUpdateWrapper() - .set(RainDev::getOnline, 0) - .eq(RainDev::getDevSn, dev.getDevSn()) - ); - } - } - - -} diff --git a/src/main/java/com/zhgd/xmgl/task/RainTask.java b/src/main/java/com/zhgd/xmgl/task/RainTask.java index 22e6cb9d8..cd3e0e8ef 100644 --- a/src/main/java/com/zhgd/xmgl/task/RainTask.java +++ b/src/main/java/com/zhgd/xmgl/task/RainTask.java @@ -11,6 +11,7 @@ import com.zhgd.xmgl.enums.ParamEnum; import com.zhgd.xmgl.modules.environment.entity.RainAlarm; import com.zhgd.xmgl.modules.environment.entity.RainDev; import com.zhgd.xmgl.modules.environment.entity.RainRecord; +import com.zhgd.xmgl.modules.environment.mapper.RainDevMapper; import com.zhgd.xmgl.modules.environment.service.IRainAlarmService; import com.zhgd.xmgl.modules.environment.service.IRainDevService; import com.zhgd.xmgl.modules.environment.service.IRainRecordService; @@ -53,6 +54,9 @@ public class RainTask { @Lazy @Autowired private RedisRepository redisRepository; + @Lazy + @Autowired + private RainDevMapper rainDevMapper; /** * 获取实时数据 @@ -90,35 +94,62 @@ public class RainTask { JSONObject dataJo = datas.getJSONObject(i); JSONArray dataItemJa = dataJo.getJSONArray("dataItem"); String deviceAddr = dataJo.getString("deviceAddr"); + //normal:正常 + //alarming:报警 + //preAlarming:预警 + //offline:离线 + String deviceStatus = dataJo.getString("deviceStatus"); RainRecord record = new RainRecord(); - for (int j = 0; j < dataItemJa.size(); j++) { - JSONObject itemJo = dataItemJa.getJSONObject(j); - Integer nodeId = itemJo.getInteger("nodeId"); - JSONArray registerItemJa = itemJo.getJSONArray("registerItem"); - if (nodeId == 1) { - //风力、风速 - record.setWindForce(getDouble(registerItemJa, 0)); - record.setWindSpeed(getDouble(registerItemJa, 1)); - } else if (nodeId == 2) { - record.setWindDirection(getString(registerItemJa, 0)); - } else if (nodeId == 20) { - record.setAccumulatedRainfall(getDouble(registerItemJa, 0)); - } else if (nodeId == 21) { - record.setInstantaneousRainfall(getDouble(registerItemJa, 0)); - record.setCurrentRainfall(getDouble(registerItemJa, 1)); - } else if (nodeId == 22) { - record.setDailyRainfall(getDouble(registerItemJa, 0)); - } else if (nodeId == 11) { - record.setAirTemperature(getDouble(registerItemJa, 0)); - record.setAirHumidity(getDouble(registerItemJa, 1)); - } else if (nodeId == 14) { - record.setAtmosphericPressure(getDouble(registerItemJa, 0)); + RainDev dev = devSnMap.get(deviceAddr); + if (CollUtil.isNotEmpty(dataItemJa)) { + for (int j = 0; j < dataItemJa.size(); j++) { + JSONObject itemJo = dataItemJa.getJSONObject(j); + Integer nodeId = itemJo.getInteger("nodeId"); + JSONArray registerItemJa = itemJo.getJSONArray("registerItem"); + if (nodeId == 1) { + //风力、风速 + record.setWindForce(getDouble(registerItemJa, 0)); + record.setWindSpeed(getDouble(registerItemJa, 1)); + } else if (nodeId == 2) { + record.setWindDirection(getString(registerItemJa, 0)); + } else if (nodeId == 20) { + record.setAccumulatedRainfall(getDouble(registerItemJa, 0)); + } else if (nodeId == 21) { + record.setInstantaneousRainfall(getDouble(registerItemJa, 0)); + record.setCurrentRainfall(getDouble(registerItemJa, 1)); + } else if (nodeId == 22) { + record.setDailyRainfall(getDouble(registerItemJa, 0)); + } else if (nodeId == 11) { + record.setAirTemperature(getDouble(registerItemJa, 0)); + record.setAirHumidity(getDouble(registerItemJa, 1)); + } else if (nodeId == 14) { + record.setAtmosphericPressure(getDouble(registerItemJa, 0)); + } + } + record.setRecordTime(new Date(dataJo.getLong("timeStamp"))); + record.setDevSn(deviceAddr); + record.setProjectSn(dev.getProjectSn()); + records.add(record); + dev.setLastUploadTime(new Date()); + } + + //更新在线离线 + String offline = "offline"; + if (offline.equals(deviceStatus)) { + if (dev != null) { + if (DateUtil.compare(dev.getLastUploadTime(), DateUtil.offsetMinute(new Date(), -30)) >= 0) { + dev.setLastUploadTime(DateUtil.offsetMinute(new Date(), -60)); + rainDevMapper.updateById(dev); + } + } + } else { + if (dev != null) { + if (DateUtil.compare(dev.getLastUploadTime(), DateUtil.offsetMinute(new Date(), -30)) < 0) { + dev.setLastUploadTime(new Date()); + rainDevMapper.updateById(dev); + } } } - record.setRecordTime(new Date(dataJo.getLong("timeStamp"))); - record.setDevSn(deviceAddr); - record.setProjectSn(devSnMap.get(deviceAddr).getProjectSn()); - records.add(record); } rainRecordService.saveBatch(records); }