雨量bug修改
This commit is contained in:
parent
020206a10f
commit
77f915e849
@ -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)
|
||||
|
||||
@ -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"),
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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)<=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)<=30 then 1 else 0 end)),0) as online
|
||||
from rain_dev as t
|
||||
where t.id = #{id}
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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("未找到对应实体");
|
||||
}
|
||||
|
||||
@ -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")
|
||||
);
|
||||
}
|
||||
|
||||
@ -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())
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user