雨量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({ @ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String"), @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "deviceId", value = "设备编号", dataType = "String", paramType = "body", required = false) @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)); return Result.success(rainRecordService.queryTodayTrendGroupByHour(param));
} }
@ApiOperation(value = "查询最新一条实时数据", notes = "查询最新一条实时数据", httpMethod = "POST") @ApiOperation(value = "查询今日最新一条实时数据", notes = "查询今日最新一条实时数据", httpMethod = "POST")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String"), @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "body", required = true, dataType = "String"),
@ApiImplicitParam(name = "devSn", 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; package com.zhgd.xmgl.modules.environment.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
@ -64,12 +65,7 @@ public class RainDev implements Serializable {
@Excel(name = "报警推送人,多个逗号分割", width = 15) @Excel(name = "报警推送人,多个逗号分割", width = 15)
@ApiModelProperty(value = "报警推送人,多个逗号分割") @ApiModelProperty(value = "报警推送人,多个逗号分割")
private java.lang.String alarmPushWorkerId; 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 = "更新时间") @ApiModelProperty(value = "更新时间")
private java.util.Date updateDate; 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); IPage<RainDev> queryList(Page<RainDev> page, @Param(Constants.WRAPPER) QueryWrapper<RainDev> queryWrapper);
List<RainDev> queryList( @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 != ''"> <if test="deviceId != null and deviceId != ''">
and device_id = #{deviceId} and device_id = #{deviceId}
</if> </if>
and upload_date >= CONCAT(DATE_FORMAT(now(), '%Y-%m-%d'), ' 00:00:00')
ORDER BY upload_date desc ORDER BY upload_date desc
limit 1 limit 1
</select> </select>

View File

@ -3,8 +3,16 @@
<mapper namespace="com.zhgd.xmgl.modules.environment.mapper.RainDevMapper"> <mapper namespace="com.zhgd.xmgl.modules.environment.mapper.RainDevMapper">
<select id="queryList" resultType="com.zhgd.xmgl.modules.environment.entity.RainDev"> <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 from rain_dev as t
${ew.customSqlSegment} ${ew.customSqlSegment}
</select> </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> </mapper>

View File

@ -1,6 +1,5 @@
package com.zhgd.xmgl.modules.environment.service.impl; 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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.mapper.EnvironmentWarningMapper;
import com.zhgd.xmgl.modules.environment.service.IDustNoiseDataService; import com.zhgd.xmgl.modules.environment.service.IDustNoiseDataService;
import com.zhgd.xmgl.modules.environment.service.IEnvironmentAlarmService; 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.DateUtils;
import com.zhgd.xmgl.util.MessageUtil; import com.zhgd.xmgl.util.MessageUtil;
import com.zhgd.xmgl.util.WindDirectionUtils; import com.zhgd.xmgl.util.WindDirectionUtils;
@ -27,7 +25,10 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat; 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.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -73,32 +74,9 @@ public class DustNoiseDataServiceImpl extends ServiceImpl<DustNoiseDataMapper, D
@Override @Override
public DustNoiseData getRealTimeDustNoiseData(Map<String, Object> map) { public DustNoiseData getRealTimeDustNoiseData(Map<String, Object> map) {
DustNoiseData noiseData = null; DustNoiseData noiseData = dustNoiseDataMapper.getRealTimeDustNoiseData(map);
if (noiseData != null) {
if (map.get("deviceId") == null) { return dataBuilder(noiseData);
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);
}
} }
return noiseData; return noiseData;
} }

View File

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

View File

@ -87,10 +87,8 @@ public class RainRecordServiceImpl extends ServiceImpl<RainRecordMapper, RainRec
throw new OpenAlertException("设备不存在"); throw new OpenAlertException("设备不存在");
} }
if (Objects.equals(dev.getOnline(), 0)) { if (Objects.equals(dev.getOnline(), 0)) {
rainDevMapper.selectOne(new LambdaUpdateWrapper<RainDev>() dev.setLastUploadTime(new Date());
.set(RainDev::getOnline, 1) rainDevMapper.updateById(dev);
.eq(RainDev::getDevSn, dev.getDevSn())
);
} }
rainRecord.setId(null); rainRecord.setId(null);
rainRecord.setProjectSn(dev.getProjectSn()); rainRecord.setProjectSn(dev.getProjectSn());
@ -138,6 +136,7 @@ public class RainRecordServiceImpl extends ServiceImpl<RainRecordMapper, RainRec
return rainRecordMapper.selectOne(new LambdaQueryWrapper<RainRecord>() return rainRecordMapper.selectOne(new LambdaQueryWrapper<RainRecord>()
.eq(StrUtil.isNotBlank(devSn), RainRecord::getDevSn, devSn) .eq(StrUtil.isNotBlank(devSn), RainRecord::getDevSn, devSn)
.eq(StrUtil.isNotBlank(projectSn), RainRecord::getProjectSn, projectSn) .eq(StrUtil.isNotBlank(projectSn), RainRecord::getProjectSn, projectSn)
.ge(RainRecord::getRecordTime, DateUtil.formatDateTime(DateUtil.beginOfDay(new Date())))
.last("order by record_time desc limit 1") .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.RainAlarm;
import com.zhgd.xmgl.modules.environment.entity.RainDev; import com.zhgd.xmgl.modules.environment.entity.RainDev;
import com.zhgd.xmgl.modules.environment.entity.RainRecord; 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.IRainAlarmService;
import com.zhgd.xmgl.modules.environment.service.IRainDevService; import com.zhgd.xmgl.modules.environment.service.IRainDevService;
import com.zhgd.xmgl.modules.environment.service.IRainRecordService; import com.zhgd.xmgl.modules.environment.service.IRainRecordService;
@ -53,6 +54,9 @@ public class RainTask {
@Lazy @Lazy
@Autowired @Autowired
private RedisRepository redisRepository; private RedisRepository redisRepository;
@Lazy
@Autowired
private RainDevMapper rainDevMapper;
/** /**
* 获取实时数据 * 获取实时数据
@ -90,35 +94,62 @@ public class RainTask {
JSONObject dataJo = datas.getJSONObject(i); JSONObject dataJo = datas.getJSONObject(i);
JSONArray dataItemJa = dataJo.getJSONArray("dataItem"); JSONArray dataItemJa = dataJo.getJSONArray("dataItem");
String deviceAddr = dataJo.getString("deviceAddr"); String deviceAddr = dataJo.getString("deviceAddr");
//normal:正常
//alarming:报警
//preAlarming:预警
//offline:离线
String deviceStatus = dataJo.getString("deviceStatus");
RainRecord record = new RainRecord(); RainRecord record = new RainRecord();
for (int j = 0; j < dataItemJa.size(); j++) { RainDev dev = devSnMap.get(deviceAddr);
JSONObject itemJo = dataItemJa.getJSONObject(j); if (CollUtil.isNotEmpty(dataItemJa)) {
Integer nodeId = itemJo.getInteger("nodeId"); for (int j = 0; j < dataItemJa.size(); j++) {
JSONArray registerItemJa = itemJo.getJSONArray("registerItem"); JSONObject itemJo = dataItemJa.getJSONObject(j);
if (nodeId == 1) { Integer nodeId = itemJo.getInteger("nodeId");
//风力风速 JSONArray registerItemJa = itemJo.getJSONArray("registerItem");
record.setWindForce(getDouble(registerItemJa, 0)); if (nodeId == 1) {
record.setWindSpeed(getDouble(registerItemJa, 1)); //风力风速
} else if (nodeId == 2) { record.setWindForce(getDouble(registerItemJa, 0));
record.setWindDirection(getString(registerItemJa, 0)); record.setWindSpeed(getDouble(registerItemJa, 1));
} else if (nodeId == 20) { } else if (nodeId == 2) {
record.setAccumulatedRainfall(getDouble(registerItemJa, 0)); record.setWindDirection(getString(registerItemJa, 0));
} else if (nodeId == 21) { } else if (nodeId == 20) {
record.setInstantaneousRainfall(getDouble(registerItemJa, 0)); record.setAccumulatedRainfall(getDouble(registerItemJa, 0));
record.setCurrentRainfall(getDouble(registerItemJa, 1)); } else if (nodeId == 21) {
} else if (nodeId == 22) { record.setInstantaneousRainfall(getDouble(registerItemJa, 0));
record.setDailyRainfall(getDouble(registerItemJa, 0)); record.setCurrentRainfall(getDouble(registerItemJa, 1));
} else if (nodeId == 11) { } else if (nodeId == 22) {
record.setAirTemperature(getDouble(registerItemJa, 0)); record.setDailyRainfall(getDouble(registerItemJa, 0));
record.setAirHumidity(getDouble(registerItemJa, 1)); } else if (nodeId == 11) {
} else if (nodeId == 14) { record.setAirTemperature(getDouble(registerItemJa, 0));
record.setAtmosphericPressure(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); rainRecordService.saveBatch(records);
} }