雨量bug修改

This commit is contained in:
guoshengxiong 2024-07-03 10:10:52 +08:00
parent 020206a10f
commit 77f915e849
11 changed files with 91 additions and 115 deletions

View File

@ -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)

View File

@ -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"),

View File

@ -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;
}

View File

@ -23,4 +23,6 @@ public interface RainDevMapper extends BaseMapper<RainDev> {
IPage<RainDev> queryList(Page<RainDev> page, @Param(Constants.WRAPPER) QueryWrapper<RainDev> queryWrapper);
List<RainDev> queryList( @Param(Constants.WRAPPER)QueryWrapper<RainDev> queryWrapper);
RainDev queryById(String id);
}

View File

@ -75,6 +75,7 @@
<if test="deviceId != null and deviceId != ''">
and device_id = #{deviceId}
</if>
and upload_date >= CONCAT(DATE_FORMAT(now(), '%Y-%m-%d'), ' 00:00:00')
ORDER BY upload_date desc
limit 1
</select>

View File

@ -3,8 +3,16 @@
<mapper namespace="com.zhgd.xmgl.modules.environment.mapper.RainDevMapper">
<select id="queryList" resultType="com.zhgd.xmgl.modules.environment.entity.RainDev">
select t.*
select t.*,
IFNULL(((case when round((UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(last_upload_time))/60)&lt;=30 then 1 else 0 end)),0) as online
from rain_dev as t
${ew.customSqlSegment}
</select>
<select id="queryById" resultType="com.zhgd.xmgl.modules.environment.entity.RainDev">
select t.*,
IFNULL(((case when round((UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(last_upload_time))/60)&lt;=30 then 1 else 0 end)),0) as online
from rain_dev as t
where t.id = #{id}
</select>
</mapper>

View File

@ -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<DustNoiseDataMapper, D
@Override
public DustNoiseData getRealTimeDustNoiseData(Map<String, Object> map) {
DustNoiseData noiseData = null;
if (map.get("deviceId") == null) {
DustNoiseData nd = dustNoiseDataMapper.getRealTimeDustNoiseData(map);
if (nd != null) {
List<DustNoiseData> 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;
}

View File

@ -96,7 +96,7 @@ public class RainDevServiceImpl extends ServiceImpl<RainDevMapper, RainDev> impl
@Override
public RainDev queryById(String id) {
RainDev entity = getById(id);
RainDev entity = baseMapper.queryById(id);
if (entity == null) {
throw new OpenAlertException("未找到对应实体");
}

View File

@ -87,10 +87,8 @@ public class RainRecordServiceImpl extends ServiceImpl<RainRecordMapper, RainRec
throw new OpenAlertException("设备不存在");
}
if (Objects.equals(dev.getOnline(), 0)) {
rainDevMapper.selectOne(new LambdaUpdateWrapper<RainDev>()
.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<RainRecordMapper, RainRec
return rainRecordMapper.selectOne(new LambdaQueryWrapper<RainRecord>()
.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")
);
}

View File

@ -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<RainDev> rainDevs = rainDevMapper.selectList(new LambdaQueryWrapper<RainDev>()
.le(RainDev::getLastUploadTime, DateUtil.formatDateTime(DateUtil.offsetMinute(new Date(), -30)))
.eq(RainDev::getOnline, 1)
);
for (RainDev dev : rainDevs) {
rainDevMapper.selectOne(new LambdaUpdateWrapper<RainDev>()
.set(RainDev::getOnline, 0)
.eq(RainDev::getDevSn, dev.getDevSn())
);
}
}
}

View File

@ -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);
}