diff --git a/src/main/java/com/zhgd/netty/tcp/service/HighFormworkSupportService.java b/src/main/java/com/zhgd/netty/tcp/service/HighFormworkSupportService.java index 05937aee7..c43bb03c5 100644 --- a/src/main/java/com/zhgd/netty/tcp/service/HighFormworkSupportService.java +++ b/src/main/java/com/zhgd/netty/tcp/service/HighFormworkSupportService.java @@ -276,38 +276,49 @@ public class HighFormworkSupportService { if (StringUtils.isNotBlank(no)) { String noType = no.substring(no.length() - 1); String f = "F"; + String val = dataMap.get(gzDs2); if (f.equals(noType)) { - currentData.setPoleAxialForce(String.valueOf(Double.parseDouble(dataMap.get(gzDs2)))); + currentData.setPoleAxialForce(String.valueOf(Double.parseDouble(val))); } String h = "H"; if (h.equals(noType)) { - currentData.setHorizontalDisplacement(dataMap.get(gzDs2)); + currentData.setHorizontalDisplacement(val); } String v = "V"; if (v.equals(noType)) { - currentData.setFormworkSettlement(dataMap.get(gzDs2)); + currentData.setFormworkSettlement(val); } String l = "L"; if (l.equals(noType)) { - currentData.setPoleTilt(dataMap.get(gzDs2)); + currentData.setPoleTilt(val); } String d = "D"; if (d.equals(noType)) { - currentData.setFoundationSettlement(dataMap.get(gzDs2)); + currentData.setFoundationSettlement(val); + } + String s = "S"; + if (s.equals(noType)) { + currentData.setHorizontalTilt(val); } } } private void setAlarmStatus(HashMap dataMap, HighFormworkMeasureCurrentData currentData) { Integer alarmState = null; - if (getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT1)).equals(HighFormworkMeasureCurrentDataAlarmStateEnum.ALARM.getCode()) || - getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT2)).equals(HighFormworkMeasureCurrentDataAlarmStateEnum.ALARM.getCode()) || - getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT3)).equals(HighFormworkMeasureCurrentDataAlarmStateEnum.ALARM.getCode())) { + if (Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT1)), HighFormworkMeasureCurrentDataAlarmStateEnum.ALARM.getCode()) || + Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT2)), HighFormworkMeasureCurrentDataAlarmStateEnum.ALARM.getCode()) || + Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT3)), HighFormworkMeasureCurrentDataAlarmStateEnum.ALARM.getCode()) || + Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT4)), HighFormworkMeasureCurrentDataAlarmStateEnum.ALARM.getCode()) || + Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT5)), HighFormworkMeasureCurrentDataAlarmStateEnum.ALARM.getCode()) || + Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT6)), HighFormworkMeasureCurrentDataAlarmStateEnum.ALARM.getCode())) { //报警 alarmState = HighFormworkMeasureCurrentDataAlarmStateEnum.ALARM.getCode(); - } else if (getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT1)).equals(HighFormworkMeasureCurrentDataAlarmStateEnum.PRE_ALARM.getCode()) || - getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT2)).equals(HighFormworkMeasureCurrentDataAlarmStateEnum.PRE_ALARM.getCode()) || - getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT3)).equals(HighFormworkMeasureCurrentDataAlarmStateEnum.PRE_ALARM.getCode())) { + } else if (Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT1)), HighFormworkMeasureCurrentDataAlarmStateEnum.PRE_ALARM.getCode()) || + Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT2)), HighFormworkMeasureCurrentDataAlarmStateEnum.PRE_ALARM.getCode()) || + Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT3)), HighFormworkMeasureCurrentDataAlarmStateEnum.PRE_ALARM.getCode()) || + Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT4)), HighFormworkMeasureCurrentDataAlarmStateEnum.PRE_ALARM.getCode()) || + Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT5)), HighFormworkMeasureCurrentDataAlarmStateEnum.PRE_ALARM.getCode()) || + Objects.equals(getAlarmState(dataMap.get(HighFormworkSupport.GZ_ZT6)), HighFormworkMeasureCurrentDataAlarmStateEnum.PRE_ALARM.getCode())) { //预警 alarmState = HighFormworkMeasureCurrentDataAlarmStateEnum.PRE_ALARM.getCode(); } else { diff --git a/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkAlarmData.java b/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkAlarmData.java index 84a5d264c..0351fea4c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkAlarmData.java +++ b/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkAlarmData.java @@ -31,7 +31,7 @@ public class HighFormworkAlarmData implements Serializable { @TableId(type = IdType.ASSIGN_ID) @ApiModelProperty(value = "id") private java.lang.Long id; - @ApiModelProperty(value = "类型:1立杆轴力2水平位移3模板沉降4立杆倾斜5地基沉降") + @ApiModelProperty(value = "类型:1立杆轴力2水平位移3模板沉降4立杆倾斜5地基沉降6水平倾斜") private java.lang.Integer type; /** * 监测点ID diff --git a/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkMeasureCurrentData.java b/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkMeasureCurrentData.java index 1477be733..dcef5445f 100644 --- a/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkMeasureCurrentData.java +++ b/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkMeasureCurrentData.java @@ -51,22 +51,26 @@ public class HighFormworkMeasureCurrentData implements Serializable { /**X轴倾角(°)*/ @Excel(name = "X轴倾角(°)", width = 15) @ApiModelProperty(value="X轴倾角(°)") + @Deprecated private java.lang.String angleXAxis ; /**Y轴倾角(°)*/ @Excel(name = "Y轴倾角(°)", width = 15) @ApiModelProperty(value = "Y轴倾角(°)") + @Deprecated private java.lang.String angleYAxis; /** * 压力(kN) */ @Excel(name = "压力(kN)", width = 15) @ApiModelProperty(value = "压力(kN)") + @Deprecated private java.lang.String pressure; /** * 沉降(mm) */ @Excel(name = "沉降(mm)", width = 15) @ApiModelProperty(value = "沉降(mm)") + @Deprecated private java.lang.String subside; @ApiModelProperty(value = "立杆轴力") private java.lang.String poleAxialForce; @@ -91,7 +95,8 @@ public class HighFormworkMeasureCurrentData implements Serializable { @Excel(name = "采集仪编号", width = 15) @ApiModelProperty(value = "采集仪编号") private java.lang.String acquisitionInstrumentNumber; - + @ApiModelProperty(value = "水平倾斜") + private java.lang.String horizontalTilt; @TableField(exist = false) @ApiModelProperty(value = "测量点名称") private java.lang.String measurePointName; diff --git a/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkMeasurePointThreshold.java b/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkMeasurePointThreshold.java index b91c247b8..86d0b0d55 100644 --- a/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkMeasurePointThreshold.java +++ b/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/HighFormworkMeasurePointThreshold.java @@ -1,16 +1,14 @@ package com.zhgd.xmgl.modules.highformwork.entity; -import java.io.Serializable; - import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import lombok.Data; -import org.jeecgframework.poi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.io.Serializable; /** * @Description: 高支模-测量点报警预警阀值 * @author: pds @@ -36,7 +34,7 @@ public class HighFormworkMeasurePointThreshold implements Serializable { @ApiModelProperty(value = "监测点ID") private java.lang.Long measurePointId; - @ApiModelProperty(value = "类型:1立杆轴力2水平位移3模板沉降4立杆倾斜5地基沉降") + @ApiModelProperty(value = "类型:1立杆轴力2水平位移3模板沉降4立杆倾斜5地基沉降6水平倾斜") private java.lang.Integer type; /** * 预警值 diff --git a/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/vo/DataPerHourForTheLastDayVo.java b/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/vo/DataPerHourForTheLastDayVo.java index 46bc28440..257bd6005 100644 --- a/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/vo/DataPerHourForTheLastDayVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/highformwork/entity/vo/DataPerHourForTheLastDayVo.java @@ -25,4 +25,6 @@ public class DataPerHourForTheLastDayVo { private java.lang.String poleTilt; @ApiModelProperty(value = "地基沉降") private java.lang.String foundationSettlement; + @ApiModelProperty(value = "水平倾斜") + private java.lang.String horizontalTilt; } diff --git a/src/main/java/com/zhgd/xmgl/modules/highformwork/mapper/xml/HighFormworkMeasureCurrentDataMapper.xml b/src/main/java/com/zhgd/xmgl/modules/highformwork/mapper/xml/HighFormworkMeasureCurrentDataMapper.xml index 5e3fe8793..b1f5f6f44 100644 --- a/src/main/java/com/zhgd/xmgl/modules/highformwork/mapper/xml/HighFormworkMeasureCurrentDataMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/highformwork/mapper/xml/HighFormworkMeasureCurrentDataMapper.xml @@ -19,6 +19,7 @@ hfmcd.formwork_settlement, hfmcd.pole_tilt, hfmcd.foundation_settlement, + hfmcd.horizontal_tilt, hfmp.measure_point_name from high_formwork_measure_current_data hfmcd join high_formwork_measure_point hfmp on hfmcd.measure_point_number = hfmp.measure_point_number and @@ -74,7 +75,8 @@ ifnull(avg(cd.horizontal_displacement),0) as horizontal_displacement, ifnull(avg(cd.formwork_settlement),0) as formwork_settlement, ifnull(avg(cd.pole_tilt),0) as pole_tilt, - ifnull(avg(cd.foundation_settlement),0) as foundation_settlement + ifnull(avg(cd.foundation_settlement),0) as foundation_settlement, + ifnull(avg(cd.horizontal_tilt),0) as horizontal_tilt from high_formwork_measure_current_data cd INNER JOIN high_formwork_measure_point mp ON mp.measure_point_number = cd.measure_point_number and cd.acquisition_instrument_number = mp.acquisition_instrument_number diff --git a/src/main/java/com/zhgd/xmgl/modules/highformwork/service/impl/HighFormworkAlarmDataServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/highformwork/service/impl/HighFormworkAlarmDataServiceImpl.java index 2e49baa60..012ec2416 100644 --- a/src/main/java/com/zhgd/xmgl/modules/highformwork/service/impl/HighFormworkAlarmDataServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/highformwork/service/impl/HighFormworkAlarmDataServiceImpl.java @@ -140,6 +140,17 @@ public class HighFormworkAlarmDataServiceImpl extends ServiceImpl projects = projectService.list(); - for (Project project : projects) { - try { - PoliceCameraManufacturer manufacturer = policeCameraManufacturerFactory.getPoliceCameraManufacturer(project.getProjectSn()); - if (manufacturer != null) { - manufacturer.updateStatus(3L); - } - } catch (Exception e) { - log.error("定时更新执法仪设备状态err,{}", project.getProjectName(), e); - } - } - } +// /** +// * 定时更新执法仪设备状态 +// */ +// @Scheduled(cron = "*/5 * * * * ?") +// @RequestMapping("updateStatus") +// public void updateStatus() { +// List projects = projectService.list(); +// for (Project project : projects) { +// try { +// PoliceCameraManufacturer manufacturer = policeCameraManufacturerFactory.getPoliceCameraManufacturer(project.getProjectSn()); +// if (manufacturer != null) { +// manufacturer.updateStatus(3L); +// } +// } catch (Exception e) { +// log.error("定时更新执法仪设备状态err,{}", project.getProjectName(), e); +// } +// } +// } } diff --git a/src/main/java/com/zhgd/xmgl/task/VideoTask.java b/src/main/java/com/zhgd/xmgl/task/VideoTask.java index e48806f19..3870a1b32 100644 --- a/src/main/java/com/zhgd/xmgl/task/VideoTask.java +++ b/src/main/java/com/zhgd/xmgl/task/VideoTask.java @@ -10,6 +10,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.zhgd.xmgl.async.AsyncEnvironment; +import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem; +import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraVideoConfig; +import com.zhgd.xmgl.modules.policecamera.service.IPoliceCameraItemService; +import com.zhgd.xmgl.modules.policecamera.service.IPoliceCameraVideoConfigService; import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig; import com.zhgd.xmgl.modules.project.entity.bo.ProjectVideoConfigBo; import com.zhgd.xmgl.modules.project.enums.ProjectVideoConfigVideoTypeEnum; @@ -55,6 +59,12 @@ public class VideoTask { @Lazy @Autowired private VideoItemServiceImpl videoItemService; + @Lazy + @Autowired + private IPoliceCameraVideoConfigService policeCameraVideoConfigService; + @Lazy + @Autowired + private IPoliceCameraItemService policeCameraItemService; @SchedulerLock(name = "updateVideoState", lockAtMostFor = "PT1H", lockAtLeastFor = "PT5M") @Scheduled(cron = "0 */3 * * * ?") @@ -151,20 +161,23 @@ public class VideoTask { if (CollUtil.isEmpty(itemDbs)) { continue; } - do { - resultJo = HikVideoUtil.callPostApiOnlineStatus(videoConfig.getAccount(), - videoConfig.getPassword(), videoConfig.getAppId(), - videoConfig.getAppSecret(), ++pageNo); - if (resultJo != null && "0".equals(resultJo.getString("code"))) { - alls.addAll(resultJo.getJSONObject("data").getJSONArray("list")); - } else { - log.error("高频更新isc监控状态返回错误:项目sn:{}:code:{},msg:{}", - videoConfig.getProjectSn(), resultJo != null ? resultJo.getString("code") : "", - resultJo != null ? resultJo.getString("msg") : ""); - break; - } - } while (pageNo * 1000 < resultJo.getJSONObject("data").getInteger("total")); - + try { + do { + resultJo = HikVideoUtil.callPostApiOnlineStatus(videoConfig.getAccount(), + videoConfig.getPassword(), videoConfig.getAppId(), + videoConfig.getAppSecret(), ++pageNo); + if (resultJo != null && "0".equals(resultJo.getString("code"))) { + alls.addAll(resultJo.getJSONObject("data").getJSONArray("list")); + } else { + log.error("高频更新isc监控状态返回错误:项目sn:{}:code:{},msg:{}", + videoConfig.getProjectSn(), resultJo != null ? resultJo.getString("code") : "", + resultJo != null ? resultJo.getString("msg") : ""); + break; + } + } while (pageNo * 1000 < resultJo.getJSONObject("data").getInteger("total")); + } catch (Exception e) { + log.error("高频更新isc监控状态返回异常", e); + } Map indexCodeMap = alls.stream().collect(Collectors.toMap(j -> ((JSONObject) j).getString("indexCode"), j -> ((JSONObject) j), (o1, o2) -> o1)); for (VideoItem videoItem : itemDbs) { JSONObject jsonObject = indexCodeMap.get(videoItem.getSerialNumber()); @@ -183,7 +196,8 @@ public class VideoTask { .set(VideoItem::getDeviceState, 1) .in(VideoItem::getItemId, onlineIds) ); - } List offlineIds = videoItemsToUpdate.stream().filter(v -> Objects.equals(v.getDeviceState(), 2)).map(VideoItem::getItemId).collect(Collectors.toList()); + } + List offlineIds = videoItemsToUpdate.stream().filter(v -> Objects.equals(v.getDeviceState(), 2)).map(VideoItem::getItemId).collect(Collectors.toList()); if (CollUtil.isNotEmpty(offlineIds)) { videoItemService.update(null, new LambdaUpdateWrapper() .set(VideoItem::getDeviceState, 2) @@ -197,6 +211,84 @@ public class VideoTask { } } + /** + * 高频更新执法记录仪的isc监控状态 + */ + @Scheduled(cron = "*/10 * * * * ?") + @RequestMapping("updatePoliceCameraItemIscVideoState") + public void updatePoliceCameraItemIscVideoState() { + try { + List configs = policeCameraVideoConfigService.list(new QueryWrapper<>()); + Map> projectSnMap2ItemsMap = policeCameraItemService.list(new LambdaQueryWrapper()).stream().collect(Collectors.groupingBy(PoliceCameraItem::getProjectSn)); + Map> projectSn2IndexCodeMap = new HashMap<>(); + for (PoliceCameraVideoConfig videoConfig : configs) { + // 收集需要更新的视频设备 + List videoItemsToUpdate = new ArrayList<>(); + List itemDbs = projectSnMap2ItemsMap.get(videoConfig.getProjectSn()); + if (CollUtil.isEmpty(itemDbs)) { + continue; + } + Map indexCodeMap = projectSn2IndexCodeMap.computeIfAbsent(StrUtil.format("{},{},{},{}", videoConfig.getIp(), + videoConfig.getPort(), videoConfig.getAppId(), + videoConfig.getAppSecret()), key -> { + if (StrUtil.isBlank(videoConfig.getIp()) || StrUtil.isBlank(videoConfig.getPort()) || StrUtil.isBlank(videoConfig.getAppId()) || StrUtil.isBlank(videoConfig.getAppSecret())) { + return new HashMap<>(); + } + JSONArray alls = new JSONArray(); + try { + JSONObject resultJo; + int pageNo = 0; + do { + resultJo = HikVideoUtil.callPostApiOnlineStatus(videoConfig.getIp(), + videoConfig.getPort(), videoConfig.getAppId(), + videoConfig.getAppSecret(), ++pageNo); + if (resultJo != null && "0".equals(resultJo.getString("code"))) { + alls.addAll(resultJo.getJSONObject("data").getJSONArray("list")); + } else { + log.error("高频更新执法记录仪的isc监控状态返回错误:项目sn:{}:code:{},msg:{}", + videoConfig.getProjectSn(), resultJo != null ? resultJo.getString("code") : "", + resultJo != null ? resultJo.getString("msg") : ""); + break; + } + } while (pageNo * 1000 < resultJo.getJSONObject("data").getInteger("total")); + } catch (Exception e) { + log.error("高频更新执法记录仪的isc监控状态返回异常", e); + } + return alls.stream().collect(Collectors.toMap(j -> ((JSONObject) j).getString("indexCode"), j -> ((JSONObject) j), (o1, o2) -> o1)); + }); + + for (PoliceCameraItem item : itemDbs) { + JSONObject jsonObject = indexCodeMap.get(item.getMonitoringNumber()); + Integer newOnlineStatus = jsonObject != null && Objects.equals(jsonObject.getInteger("online"), 1) ? 1 : 2; + // 只有当设备状态发生变化时才更新 + if (!newOnlineStatus.equals(item.getDeviceState())) { + item.setDeviceState(newOnlineStatus); + videoItemsToUpdate.add(item); + } + } + // 批量更新 + if (CollUtil.isNotEmpty(videoItemsToUpdate)) { + List onlineIds = videoItemsToUpdate.stream().filter(v -> Objects.equals(v.getDeviceState(), 1)).map(PoliceCameraItem::getItemId).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(onlineIds)) { + policeCameraItemService.update(null, new LambdaUpdateWrapper() + .set(PoliceCameraItem::getDeviceState, 1) + .in(PoliceCameraItem::getItemId, onlineIds) + ); + } + List offlineIds = videoItemsToUpdate.stream().filter(v -> Objects.equals(v.getDeviceState(), 2)).map(PoliceCameraItem::getItemId).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(offlineIds)) { + policeCameraItemService.update(null, new LambdaUpdateWrapper() + .set(PoliceCameraItem::getDeviceState, 2) + .in(PoliceCameraItem::getItemId, offlineIds) + ); + } + } + } + } catch (Exception e) { + log.error("高频更新执法记录仪的isc监控状态返回错误", e); + } + } + private void sendVideoData(VideoItem videoItem, ProjectVideoConfig videoConfig) { List> list = new ArrayList<>(); Map video = new HashMap<>(16);